¿Por qué es MailMessage enviado a cualquier dirección de la aplicación de Windows Forms, pero no de la aplicación ASP.NET, cuando ambos están usando el mismo servidor SMTP?

StackOverflow https://stackoverflow.com/questions/2145437

Pregunta

Estoy experimentando un error de misterioso (para mí) al enviar correos electrónicos a través de un servidor SMTP desde una aplicación Web ASP.NET. Me sale el famoso error "No se puede retransmitir para xxx@yyy.zzz". Lo que es misterioso para mí es que cuando cortar y pegar el mismo código que envía el e-mail en un habitual .NET aplicación de Windows Forms, enviar el correo electrónico con esta aplicación, todo funciona bien. Esto me hizo pensar que tal vez el problema es que se ejecuta la aplicación ASP.NET como Servicio de red, mientras que el de Windows Forms aplicación se ejecuta en una cuenta de usuario de dominio, pero resulta que tengo otra aplicación ASP.NET envío de correo electrónico a través de la misma SMTP-servidor que ejecuta bajo sERVIDOR dE RED al mismo IIS, y esta aplicación no experimenta este problema.

He intentado además, para enviar correos electrónicos a través del servidor SMTP manualmente mediante telnet al servidor SMTP en el puerto 25 y ejecutando el protocolo SMTP manualmente, y todo funciona bien. El servidor SMTP no está configurado con cualquier tipo de autenticación o SSL.

Otro hecho misterioso es que la aplicación ASP.NET puede enviar mensajes de correo electrónico desde una dirección dentro del mismo dominio a una dirección de correo electrónico dentro del mismo dominio, pero no a cualquier dirección fuera del dominio. Sin embargo, la aplicación de Windows Forms, que utiliza el mismo código, puede enviar correos electrónicos desde cualquier dirección a cualquier dirección dentro y fuera del dominio.

Para resumir:

  • La aplicación ASP.NET puede enviar e-mails de direcciones dentro de la dominio a direcciones dentro del dominio, pero no a direcciones fuera de la dominio.
  • Una aplicación que se ejecuta Windows Forms el mismo código en el mismo equipo puede enviar correos electrónicos desde cualquier dirección a Cualquier dirección.
  • Otra aplicación ASP.NET en el mismas IIS que se ejecutan en el mismo cuenta (servicio de red) puede enviar correos electrónicos que utilizan el mismo servidor SMTP desde cualquier dirección a cualquier dirección.
  • No hay autenticación configurados en el servidor SMTP.
  • Tanto la aplicación ASP.NET y el Windows Forms utiliza aplicaciones la clase System.Net.Mail.SmtpClient enviar una System.Net.Mail.MailMessage.

El código que envía el masaje de correo electrónico es:

private void button1_Click(object sender, EventArgs e)
        {
            MailMessage mesasge = new MailMessage(txtFrom.Text, txtTo.Text, "Test mail", txtBody.Text);
            SmtpClient client = new SmtpClient();
            if (!(string.IsNullOrEmpty(txtUserName.Text)))  //Is false since txtUserName.Text is empty
                client.Credentials = new System.Net.NetworkCredential(txtUserName.Text, txtPassword.Text);
            client.EnableSsl = false;
            client.Host = txtServer.Text;
            client.Port = 25;
            try
            {
                client.Send(mesasge);
            }
            catch (Exception ex)
            {
                txtResponse.Text = ex.Message;
            }
        }

Por lo que yo puedo entender, esto debería ser una cuestión de configuración en lugar de los problemas de codificación. No Alguien tiene una idea de lo que el problema podría ser, y tal vez cómo esto podría ser resuelto? Gracias!

¿Fue útil?

Solución

Esto definitivamente suena como un problema de autenticación o, accidentalmente usted está utilizando 2 servidores SMTP diferentes.

recomiendo habilita el registro en ambas aplicaciones, y ver el registro. Al ver el registro, usted debe ser capaz de ver las diferencias, y es de esperar rastrear de nuevo a su código.

Para enalbe registro en System.Net.Mail, es necesario agregar algunas entradas al archivo .config.

<configuration>
  <system.diagnostics>
    <trace autoflush="true" />

    <sources>

      <source name="System.Net" >
        <listeners>
          <add name="MyTraceFile"/>
        </listeners>
      </source>

      <source name="System.Net.Sockets">
        <listeners>
          <add name="MyTraceFile"/>
        </listeners>
      </source>

    </sources>


    <sharedListeners>
      <add
        name="MyTraceFile"
        type="System.Diagnostics.TextWriterTraceListener"
        initializeData="System.Net.trace.log"                />
    </sharedListeners>

    <switches>
      <add name="System.Net" value="Verbose" />
      <add name="System.Net.Sockets" value="Verbose" />
    </switches>
 </configuration>

Aquí hay un enlace con más información:

http://systemnetmail.com/faq/4.10.aspx

Otros consejos

¿Tiene impersonate = true en el web.config?

Hacer esto:

new System.Net.NetworkCredential(txtUserName.Text, txtPassword.Text);

Por lo que yo sé requiere que el web.config estar configurado para permitir suplantar.

Trate de añadir esto a usted web.config (si no lo tiene allí)

    <system.web>
    <identity impersonate="true"  />
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top