2008-10-05 13 views
5

Puedo hacer que System.Net.Mail y System.Web.Mail trabajen con GMail, pero no puedo hacer que ambos trabajen con smtp .att.yahoo.com.¿Por qué falla System.Net.Mail donde funciona System.Web.Mail

Obtengo la configuración SMTP de mis propias teclas Web.config. Estas configuraciones funcionan cuando envío usando System.Web.Mail, pero fallan con System.Net.Mail.

<add key="SmtpServer" value="smtp.att.yahoo.com"/> 
    <add key="SmtpServerAuthenticateUser" value="[email protected]"/> 
    <add key="SmtpServerPort" value="465"/> 
    <add key="SmtpUseSSL" value="1"/> 
    <add key="SmtpServerAuthenticatePassword" value="MY PASSWORD"/> 

Este es el código que llama mi configuración, y funciona con Gmail, falla con att.yahoo:

 SmtpClient smtp; 

     if (!string.IsNullOrEmpty(Util.get_setting("SmtpServer", ""))) 
     { 
      smtp = new SmtpClient(Util.get_setting("SmtpServer", "")); 
     } 
     else 
     { 
      smtp = new SmtpClient(); 
     } 


     if (!string.IsNullOrEmpty(Util.get_setting("SmtpServerAuthenticatePassword", ""))) 
      smtp.Credentials = new System.Net.NetworkCredential(
       Util.get_setting("SmtpServerAuthenticateUser", ""), 
       Util.get_setting("SmtpServerAuthenticatePassword", "")); 

     if (!string.IsNullOrEmpty(Util.get_setting("SmtpServerPort", ""))) 
      smtp.Port = int.Parse(Util.get_setting("SmtpServerPort", "")); 

     if (Util.get_setting("SmtpUseSSL", "0") == "1") 
      smtp.EnableSsl = true; 

     smtp.Send(message); 

¿Es esta mi problema?

http://blogs.msdn.com/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx

+0

¿Intentaste usar el puerto 25? – gimel

Respuesta

9

He aprendido la respuesta. La respuesta es:

Porque System.Net.Mail no admite SSL "implícito", solo SSL "explícito".

1

La respuesta de Gimel es hacia atrás. Él dice usar el nuevo Sistema. Net. Biblioteca de correo, pero el problema es ese sistema. Net .Mail no funciona para SSL en el puerto 465 como System. Web .Mail hizo/funciona!

Me he golpeado la cabeza contra esto todo el día y para ajustes idénticos Sistema. Web .Mail WORKS y Sistema. Net .Mail NO funciona (al menos para el servidor SMTP con el que he estado probando), y aquí estaba pensando que siempre debería actualizar a la última oferta de Microsoft para obtener lo mejor en la vida. :-(

Ese enlace al blog M $ parece indicarlo todo; "System.Net.Mail solo es compatible con" SSL explícito "." Y supongo que el servidor SMTP con el que he estado probando quiere SSL implícita. (Es un servidor de Yahoo por cierto).

Dado que la "actualización" de la nueva API sin duda romperá la funcionalidad para los usuarios que tienen servidores que requieren SSL implícita, parece un paso atrás para "actualizar" en este caso. todavía compilar solo con advertencias, simplemente deshabilite esas advertencias (0618 si lo recuerdo) y continúe en el transporte por camión. Ah, y es posible que desee considerar garantizar que su aplicación siempre se ejecute contra la versión de .NET Framework que ha creado y probado con el archivo de configuración , así que en el futuro si M $ arranca la API anterior, su aplicación es segura.

1

Las respuestas anteriores sobre conexiones SSL implícitas y explícitas a través de System.Net.Mail son absolutamente correctas. La forma en que pude superar este obstáculo, y sin tener que usar el ahora obsoleto System.Web.Mail, fue utilizar el CDO (Collaborative Data Objects).

He detallado y dado un ejemplo en otra publicación de desbordamiento de pila (GMail SMTP via C# .Net errors on all ports) si es curioso. De lo contrario, puede ir directamente al artículo de KB al http://support.microsoft.com/kb/310212.

Espero que esto ayude!

Cuestiones relacionadas