example - Por qué System.Net.Mail falla donde funciona System.Web.Mail
smtpclient c# gmail (3)
He aprendido la respuesta. La respuesta es:
Porque System.Net.Mail no admite SSL "implícito", solo SSL "explícito".
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.
Obtengo la configuración de SMTP desde 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"/>
Aquí está el código que toma 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 este mi problema?
La respuesta de Gimel es volver al frente. Él dice usar el nuevo Sistema. Net. Mail biblioteca, pero el problema es ese sistema. Net. Mail no funciona para SSL en el puerto 465 como System. Web .Mail funcionó / funciona!
Me he golpeado la cabeza contra esto todo el día y para los ajustes idénticos del 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 de M $ parece indicarlo todo; "System.Net.Mail solo admite" SSL explícito "." y supongo que el servidor SMTP con el que he estado probando quiere SSL implícito. (Es un servidor de Yahoo por cierto).
Dado que "actualizar" a la nueva API sin duda romperá la funcionalidad para los usuarios que tienen servidores que requieren SSL implícito, parece un paso atrás para "actualizar" en este caso. Si aún puede compilar solo con advertencias, simplemente desactive esas advertencias (0618 si lo recuerdo) y continúe en el transporte por carretera. Ah, y es posible que desee considerar garantizar que su aplicación siempre se ejecute en contra de la versión de .NET Framework que ha creado y probado con un archivo de configuración, de modo que en el futuro si M $ arranca la API anterior, su aplicación está a salvo.
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).
Detallé y di un ejemplo en otra publicación de desbordamiento de pila ( GMail SMTP a través de errores de C # .Net en todos los puertos ) si es curioso. De lo contrario, puede ir directamente al artículo de KB en http://support.microsoft.com/kb/310212 .
¡Espero que esto ayude!