【发布时间】:2012-02-11 07:03:04
【问题描述】:
是否有任何免费的库可用于使用隐式 ssl 协议来感知电子邮件。我的托管服务提供商支持 ssl 电子邮件……但标准的 .net 电子邮件客户端无法处理。
【问题讨论】:
是否有任何免费的库可用于使用隐式 ssl 协议来感知电子邮件。我的托管服务提供商支持 ssl 电子邮件……但标准的 .net 电子邮件客户端无法处理。
【问题讨论】:
System.Net.Mail 确实支持“显式 SSL”(也称为“StartTLS” - 通常在端口 25 或 587 上),但不支持“隐式 SSL”(又名“SMTPS” - 通常在端口 465 上)。
据我所知,显式 SSL 从不安全的连接开始,然后给出 STARTTLS 命令,最后建立 SSL 安全连接。 另一方面,隐式 SSL 要求在双方开始通话之前建立 SSL 连接。
一些服务器(如 gmail)同时接受两者,因此您只需将 EnableSsl 设置为 true 并发送到正确的端口。但是,如果您的服务器不支持显式 SSL,则这种“简单方式”不是一种选择。
我还在四处寻找将 System.Net.Mail 与隐式 SSL 结合使用的通用解决方案,但到目前为止还没有运气。
无论如何看看this article,它可能会给你一些见解。
[编辑:@Nikita 是对的,固定端口号以避免混淆]
【讨论】:
您可以使用 AIM (Aegis Implicit Mail) 通过隐式 SSL 发送电子邮件:
然后使用示例代码发送电子邮件
class Mail
{
private static string mailAddress = "{you email address}";
private static string host = "{your host server}";
private static string userName = "{your user name}";
private static string password = "{your password}";
private static string userTo = "{to address}";
private static void SendEmail(string subject, string message)
{
//Generate Message
var mailMessage = new MimeMailMessage();
mailMessage.From = new MimeMailAddress(mailAddress);
mailMessage.To.Add(userTo);
mailMessage.Subject = subject;
mailMessage.Body = message;
//Create Smtp Client
var mailer = new MimeMailer(host, 465);
mailer.User = userName;
mailer.Password = password;
mailer.SslType = SslMode.Ssl;
mailer.AuthenticationMode = AuthenticationType.Base64;
//Set a delegate function for call back
mailer.SendCompleted += compEvent;
mailer.SendMailAsync(mailMessage);
}
//Call back function
private static void compEvent(object sender, AsyncCompletedEventArgs e)
{
if (e.UserState != null)
Console.Out.WriteLine(e.UserState.ToString());
Console.Out.WriteLine("is it canceled? " + e.Cancelled);
if (e.Error != null)
Console.Out.WriteLine("Error : " + e.Error.Message);
}
}
【讨论】:
尝试在https://sourceforge.net/p/netimplicitssl/wiki/Home/ 上检查 AIM(Aegis 隐式邮件)
【讨论】:
使用 TLS 端口(即 587)而不是 SSL 端口。几个月来我一直遇到同样的问题,直到我找到了这个解决方案。
【讨论】:
AspNetEmail 支持显式 SSL 和隐式 ssl
【讨论】:
作为选项之一,我们的 SecureBlackbox 包括 SMTP 组件,该组件通过隐式和显式 SSL 工作,并支持不同的身份验证机制(包括 SASL、NTLM 等)。
【讨论】:
您仍然可以使用已弃用的 System.Web.Mail.MailMessage API(并设置其 "http://schemas.microsoft.com/cdo/configuration/smtpusessl" 选项,用于显式 SSL/TLS):
System.Web.Mail.MailMessage mailMsg = new System.Web.Mail.MailMessage();
// ...
mailMsg.Fields.Add
("http://schemas.microsoft.com/cdo/configuration/smtpusessl",
true);
或者,如果可以,您可以在本地运行 stunnel 之类的东西,以建立从您的 localhost 到您的 SMTP 服务器的 SSL/TLS 隧道。然后,您必须正常连接(不使用 SSL/TLS)到隧道的 localhost 端作为您的 SMTP 服务器。
【讨论】: