遇到的坑
默认使用
端口选择注意
接收邮件服务器:imap.qq.com,使用SSL,端口号993
发送邮件服务器:smtp.qq.com,使用SSL,端口号465或587
对于ssl/tls加密,使用465端口
对于starttls 一般使用587端口
换了587端口各种不行,查了资料才发现SmtpClient只支持STARTTLS加密
msnd
EnableSsl 属性指定是否使用 SSL 来访问指定的 SMTP 邮件服务器。
还可以在计算机或应用程序配置文件中设置此属性的默认值。 对 EnableSsl 属性所做的任何更改都会覆盖配置文件设置。
SmtpClient 类仅支持在 RFC 3207 中定义的基于传输层安全性的安全 SMTP 的 SMTP 服务扩展。 在此模式下,SMTP 会话在未加密的通道上开始,然后客户端向服务器发出一个 STARTTLS 命令,以使用 SSL 切换到安全通信。 有关详细信息,请参阅 Internet 工程任务组(IETF)发布的 RFC 3207。
备用连接方法是在发送任何协议命令之前提前建立 SSL 会话的位置。 此连接方法有时被称为 SMTP/SSL、SMTP over SSL 或 SMTPS,并在默认情况下使用端口465。 当前不支持使用 SSL 的替代连接方法。
你可以使用 ClientCertificates 来指定应使用哪些客户端证书建立 SSL 连接。 ServerCertificateValidationCallback 允许您拒绝 SMTP 服务器提供的证书。 SecurityProtocol 属性允许你指定要使用的 SSL 协议的版本。
网易的163刚好不支持,下面列举了些部分邮箱及对应的smtp服务器和支持的协议
邮箱 | smtp服务器 | 支持的协议(可能有遗漏) |
---|---|---|
gmail | smtp.gmail.com | TLS/ STARTTLS(TLS) |
smtp.qq.com | SSL/TLS/ STARTTLS(TLS) | |
foxmail | smtp.exmail.qq.com | SSL/TLS/ STARTTLS(TLS) |
outlook | smtp-mail.outlook.com | STARTTLS(TLS) |
雅虎 | smtp.mail.yahoo.com | TLS/STARTTLS(TLS) |
网易163 | smtp.163.com | SSL/TLS |
hotmail | smtp.live.com | STARTTLS(TLS) |
icloud | smtp.mail.me.com | STARTTLS(TLS) |
Yandex | smtp.yandex.ru | SSL/TLS/STARTTLS(SSL/TLS) |
GMX | smtp.gmx.com | TLS/STARTTLS |
新浪 | smtp.sina.com | SSL/TLS/STARTTLS(SSL/TLS) |
aol | smtp.aol.com | TLS/STARTTLS |
rediff | smtp.rediffmail.com | SSL/TLS/STARTTLS(SSL/TLS) |
解决方案
如果你使用的是.NET SmtpClient,需要使用支持STARTTLS协议的邮箱,比如QQ邮箱