.Net实现邮件定时发送问题总结
来源:互联网 发布:第一会软件 编辑:程序博客网 时间:2024/06/06 13:58
环境:
Windows下使用C#实现邮件发送,用的是163邮箱
步骤:
1)登录163邮箱,选择设置-》POP3/SMTP/IMAP设置
开启SMTP服务
2)开启客户端授权码,并设置授权码(此授权码会用于客户端用户登录凭证密码)
3)使用System.Net.Mail实现邮件发送
问题:
采用25端口,在本地实现邮件发送,发送成功,而将程序部署到服务器,却无法发送。
排查:
1)在服务器上,打开命令提示符, 输入:telnet smtp.163.com 25
返回:正在连接smtp.163.com…无法打开到主机的连接。 在端口25:连接失败。
由此判断,可能是由于服务器关闭端口导致,经查实,猜测正确
https://help.aliyun.com/knowledge_detail/51777.html
尝试方案:
1)改为SSL连接,使用465端口,163邮箱服务器SSL设置帮助如下:
http://help.163.com/10/1111/15/6L7HMASV00753VB8.html
2)在服务器上,打开命令提示符,输入:telnet smtp.163.com 465
进入telnet页面(全黑),光标闪烁,表示465端口正常
3)在代码里修改端口为465,设置EnableSSL=true,尝试发送,发送失败。
搜索查询,得到的问题答案是:
System.Net.Mail只支持显式SSL
引发的问题:
1)什么是显式SSL和隐式SSL
explicit SSL:
explicit SSL会执行以下操作:尝试连接25端口 -> 申请加密连接( StartTLS)-> 认证-> 发送数据, 如果SMTP服务器要求一开始就需要加密连接,那么使用explicit SSL 就会发送失败
implicit SSL:
申请加密连接(Start SSL) -> 连接-> 认证-> 发送数据
(参考来源:
https://blogs.msdn.microsoft.com/webdav_101/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465/)
2)怎么验证邮箱服务器是使用explicit SSL 还是 implicit SSL:
按惯例来说,使用25端口正常模式下的SMTP发送,使用的是显式的SSL,而使用465端口,采用SSL协议的SMTPS发送,使用的是隐式SSL,邮件发送使用587端口的使用的是显式SSL。
想要确定到底是使用哪一种SSL,可以通过Telnet端口号来确定,比如”telnet smtp.163.com 25.如果服务器返回文本信息标识连接成功,那么你就是在使用显式SSL连接,如果你连接成功但没有看到任何返回,那么你就是使用隐式SSL连接
(参考来源: https://stackoverflow.com/questions/172811/is-there-a-way-i-can-tell-whether-an-smtp-server-is-expecting-a-client-to-connec)
最终方案:
使用第三方插件 Aegis Implicit Mail (AIM) V1.0.3
https://sourceforge.net/p/netimplicitssl/wiki/Home/
遇到问题:
1)
如果发送的邮件内容中包含HTML内容,需要使用以上带6个参数的MimeMailer的构造函数,邮件才能正确显示HTML
_mailer = new MimeMailer(smtpInfo.SmtpHost, smtpInfo.SmtpPort.Value, smtpInfo.SmtpUserName, smtpInfo.SmtpPassword, SslMode.Ssl, AuthenticationType.Base64);
2)发送的主题包含中文,无法正确显示。(乱码)
最后还是修改了插件源码,给主题加上使用UTF-8编码才解决了问题。
主要参考:
http://www.ruanyifeng.com/blog/2008/06/mime.html
https://en.wikipedia.org/wiki/MIME#Difference_between_Q-encoding_and_quoted-printable
- .Net实现邮件定时发送问题总结
- asp.net定时发送邮件总结 (转)
- asp.net定时发送邮件总结
- asp.net定时发送邮件总结
- asp.net定时发送邮件总结
- ASP.NET定时发送邮件总结
- 关于aps.net进程内定时发送邮件的问题
- java实现邮件定时发送
- java实现邮件定时发送
- .net邮件发送问题
- .net发送邮件实现
- NET实现发送邮件
- ASP.NET 定时发送邮件 实现方法(包括确认邮件)
- 详解Asp.Net定时发送邮件方法
- ASP.NET定时发送邮件&windows server
- java定时发送邮件(带附件)总结
- Asp.net 邮件发送总结
- Asp.net 邮件发送总结
- Unix、Posix和标准UniX规范
- 自定义View练习
- P1209 几何图形还原
- Android笔记五(Binder例子)
- Leetcode 151(Java)
- .Net实现邮件定时发送问题总结
- 【ubuntu】1404 安装ssh-server时出现错误
- hdu1496—Equations(枚举)
- 数据结构实验之栈七:出栈序列判定
- Win2008系统创建DNS服务器
- 蓝桥-ALGO-24-统计单词个数
- Java Swing2 基本登录框
- LeetCode 44. Wildcard Matching
- Java的类的加载器ClassLoader