首页 新闻 会员 周边

.net 邮件发送

0
悬赏园豆:20 [已解决问题] 解决于 2018-08-28 17:27

比较奇怪的一个问题,以前(大概是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;
        }
    }
View Code

config配置:

邮箱密码我试过两个,一个是邮箱本身的密码,一个是客户端授权密码(见第一张截图左下角)那个密码,都行不通,等了好久以后提示超时。

----------------------------------------------------------------------------------

有人能看出是哪里问题吗,或者发我一个亲测能用的帮助类也行,原本是想借鉴自己公司的代码的,结果发现公司压根儿没有自己写,而是用的买的邮件服务,醉了.

网上搜了一些demo,都超时(是我搜到的不对??还是用得不对...)

----------------------------------------------------------------------------------

下面是调用:

问题补充:

在vs本地运行项目的(其实是在我服务器上装的vs上运行的,没有发布到IIS),防火墙是关闭状态

顾星河的主页 顾星河 | 大侠五级 | 园豆:7173
提问于:2018-08-28 16:50
< >
分享
最佳答案
1

telnet smtp.163.com 25 能连上吗?

收获园豆:15
dudu | 高人七级 |园豆:31003 | 2018-08-28 17:10

连不上,一直是正在连接状态,这个是要设置一下什么吗

顾星河 | 园豆:7173 (大侠五级) | 2018-08-28 17:13

@❀七芯海棠❀: 你是不是在阿里云服务器操作的?

dudu | 园豆:31003 (高人七级) | 2018-08-28 17:15

@dudu: 嗯是的,阿里的服务器,用了好久了,上面装了vs和sql,平时都在上面写demo  (*/ω\*)  

顾星河 | 园豆:7173 (大侠五级) | 2018-08-28 17:17

@❀七芯海棠❀: 阿里云服务器默认屏蔽25端口,详见 https://help.aliyun.com/knowledge_detail/56130.html

dudu | 园豆:31003 (高人七级) | 2018-08-28 17:19

@dudu: 居然还有这种限制,涨姿势了,看了下描述,需要输入域名,我还是先申请个阿里云邮,然后用阿里云邮箱发邮件吧。  非常感谢~~  学到了  

顾星河 | 园豆:7173 (大侠五级) | 2018-08-28 17:26

@❀七芯海棠❀: 可以使用阿里云邮件推送服务( https://dm.console.aliyun.com/ ),发送时将 smtp 的端口号改为 80

dudu | 园豆:31003 (高人七级) | 2018-08-28 17:35

@dudu: 嗯,前期我写demo可能会发一些无意义的邮件被识别成垃圾邮件,我先注册个阿里云邮箱,用那个发,等有成型的小作品了再去试下这个邮件推送服务,每天200封免费的可以接受,之前就是不想花钱发邮件,所以想自己写写,这200个免费的基本够我以后的小作品用了,蟹蟹园长大大  O(∩_∩)O 

顾星河 | 园豆:7173 (大侠五级) | 2018-08-28 17:52
其他回答(1)
0

有没有可能是服务器所在的网络与邮箱服务器的网络不通。

收获园豆:5
放逐人 | 园豆:694 (小虾三级) | 2018-08-28 16:59

厉害了,代码放到本地可以,已经可以收到邮件了,那么为什么服务器上不行呢,服务器是window2012R2,编程环境基本和我本机电脑一致,之前一直是在服务器上写代码,莫非是安全组端口的问题?我记得端口都打开了的,我再去检查一下,感谢回答~  

支持(0) 反对(0) 顾星河 | 园豆:7173 (大侠五级) | 2018-08-28 17:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册