比较奇怪的一个问题,以前(大概是2015-2016年的时候)用的一个邮件发送帮助类,今天重新整理出来以后,发送不了邮件了,超时。
邮箱的设置如下:
帮助类代码如下:
public class EmailClient { /// <summary> /// 邮箱服务器地址 /// </summary> private string smtpServer = ConfigurationManager.AppSettings["EmailSmtpServer"]; /// <summary> /// 系统邮箱地址 /// </summary> private string user = ConfigurationManager.AppSettings["EmailUser"]; /// <summary> /// 系统邮箱密码 /// </summary> private string password = ConfigurationManager.AppSettings["EmailPassword"]; /// <summary> /// 系统邮箱名称 /// </summary> private string sender = ConfigurationManager.AppSettings["EmailSender"]; /// <summary> /// 默认使用xxxx系统邮箱 /// </summary> public EmailClient() { } /// <summary> /// 初始化发送邮箱 /// </summary> /// <param name="smtpServer">邮箱服务器地址</param> /// <param name="user">系统邮箱地址</param> /// <param name="password">系统邮箱密码</param> /// <param name="sender">系统邮箱名称</param> public EmailClient(string smtpServer, string user, string password, string sender) { this.smtpServer = smtpServer; this.user = user; this.password = password; this.sender = sender; } /// <summary> /// 单发邮件(将邮件内容发送至一个用户) /// </summary> /// <param name="MailTo">对方邮箱地址</param> /// <param name="Subject">邮件标题</param> /// <param name="Body">邮件内容</param> /// <returns></returns> public bool Send(string MailTo, string Subject, string Body) { bool Flag = true; try { //string From = user + "@" + smtpServer.Substring(smtpServer.IndexOf(".") + 1); MailMessage mailObj = new MailMessage(); //Add MailTo address mailObj.To.Add(MailTo); mailObj.IsBodyHtml = true; mailObj.Subject = Subject; mailObj.From = new MailAddress(user, sender, System.Text.Encoding.UTF8); mailObj.Body = Body; SmtpClient SmtpMail = new SmtpClient(smtpServer); SmtpMail.Credentials = new NetworkCredential(user, password); SmtpMail.Send(mailObj); SmtpMail = null; mailObj.Dispose(); Flag = true; } catch(Exception ex) { var res = ex.Message; Flag = false; } return Flag; } /// <summary> /// 群发邮件(将邮件内容发送至多个用户) /// </summary> /// <param name="MailTo">对方邮箱地址(n)</param> /// <param name="Subject">邮件标题</param> /// <param name="Body">邮件内容</param> /// <returns></returns> public bool Send(string[] MailTo, string Subject, string Body) { bool Flag = true; try { //string From = user + "@" + smtpServer.Substring(smtpServer.IndexOf(".") + 1); MailMessage mailObj = new MailMessage(); //Add MailTo address for (int i = 0; i < MailTo.Length; i++) { mailObj.To.Add(MailTo[i]); } mailObj.IsBodyHtml = true; mailObj.Subject = Subject; mailObj.From = new MailAddress(user, sender, System.Text.Encoding.UTF8); mailObj.Body = Body; SmtpClient SmtpMail = new SmtpClient(smtpServer); SmtpMail.Credentials = new NetworkCredential(user, password); SmtpMail.Send(mailObj); SmtpMail = null; mailObj.Dispose(); Flag = true; } catch (Exception ex) { //记录邮件发送异常日志 LogUtil.instance.LogSaveToSQL(EnumForLog.Email, "时间:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + ";Meg:" + ex); Flag = false; } return Flag; } }
config配置:
邮箱密码我试过两个,一个是邮箱本身的密码,一个是客户端授权密码(见第一张截图左下角)那个密码,都行不通,等了好久以后提示超时。
----------------------------------------------------------------------------------
有人能看出是哪里问题吗,或者发我一个亲测能用的帮助类也行,原本是想借鉴自己公司的代码的,结果发现公司压根儿没有自己写,而是用的买的邮件服务,醉了.
网上搜了一些demo,都超时(是我搜到的不对??还是用得不对...)
----------------------------------------------------------------------------------
下面是调用:
在vs本地运行项目的(其实是在我服务器上装的vs上运行的,没有发布到IIS),防火墙是关闭状态
telnet smtp.163.com 25
能连上吗?
连不上,一直是正在连接状态,这个是要设置一下什么吗
@❀七芯海棠❀: 你是不是在阿里云服务器操作的?
@dudu: 嗯是的,阿里的服务器,用了好久了,上面装了vs和sql,平时都在上面写demo (*/ω\*)
@❀七芯海棠❀: 阿里云服务器默认屏蔽25端口,详见 https://help.aliyun.com/knowledge_detail/56130.html
@dudu: 居然还有这种限制,涨姿势了,看了下描述,需要输入域名,我还是先申请个阿里云邮,然后用阿里云邮箱发邮件吧。 非常感谢~~ 学到了
@❀七芯海棠❀: 可以使用阿里云邮件推送服务( https://dm.console.aliyun.com/ ),发送时将 smtp 的端口号改为 80
@dudu: 嗯,前期我写demo可能会发一些无意义的邮件被识别成垃圾邮件,我先注册个阿里云邮箱,用那个发,等有成型的小作品了再去试下这个邮件推送服务,每天200封免费的可以接受,之前就是不想花钱发邮件,所以想自己写写,这200个免费的基本够我以后的小作品用了,蟹蟹园长大大 O(∩_∩)O
有没有可能是服务器所在的网络与邮箱服务器的网络不通。
厉害了,代码放到本地可以,已经可以收到邮件了,那么为什么服务器上不行呢,服务器是window2012R2,编程环境基本和我本机电脑一致,之前一直是在服务器上写代码,莫非是安全组端口的问题?我记得端口都打开了的,我再去检查一下,感谢回答~