记录一次bug Linux jexus专业版 部署.net 项目 不能发送邮件的坑

不说废话,直接说几个重要的点吧!一个小小的bug搞了四天,头皮发麻。。。。。。
自己写的小项目 用到了.net 的 System.Net.Mai 里面的 SmtpClient 来发送邮件。
原始代码 在本地运行没有任何错误 iis 也没有报错 可以正常运行,但是发布到服务器(Linux jexus)
上就开始报错。。。。。

            MailMessage mailMessage = new MailMessage();
            mailMessage.From = new MailAddress("[email protected]");
            mailMessage.To.Add(new MailAddress("收件人邮箱"));
            mailMessage.Subject = "标题";
            mailMessage.Body = "{0}内容:{1} ";
            var smtpClient = new SmtpClient
            {
                Host = "smtp.sohu.com",
                //使用安全加密连接。
                EnableSsl = false,
                //不和请求一块发送。
                UseDefaultCredentials = false,
                //验证发件人身份(发件人的邮箱,邮箱里的生成授权码);
                Credentials = new NetworkCredential("[email protected]", "xxx")
            };
            smtpClient.Send(mailMessage);

具体的报错信息当时忘记了没保存,通过各种百度,找到原因:

某云服务器禁止了 25 端口的通讯,而smtp服务器默认端口就是25 所以采用465端口 ssl 加密传输

当时 我就蒙了, 对端口这些还真没具体了解过,先不管了,先把代码中的 EnableSs= false 改为 EnableSs= true; Port = 465; 端口也改为465,安全组也配置了 465端口 ,防火墙 也开启了 465 端口 ,赶快去试试 结果 还是一样 报错 具体报错当时没看(有点后悔没有开启错误日志)最严重的,在本地打开465端口 也报错 说是 连接远程主机失败 !!!!!最后 在百度得到可以申请解封25 端口 ,于是去请求 结果肯定是禁止使用 !
申请解封25端口
最后再某云官网找到一段代码 可以使用465发送邮件 官方的代码 总不会出错 拿去试试 想看代码的朋友去阿里官网

又百度到 这样一片博文 意思是他使用 CDO 可以发送;
https://blog.csdn.net/yu18352566889/article/details/86500265
本地测试ok了 但是服务器还是报错,
报错截图
多方求助大佬 最终解决 是因为引用了第三方库CDO 里面 附带了 ole32.dll 必须依赖windows
所以这个代码也失败!
使用第三方插件 ----Microsoft CDO for Windows Library :CDO.dll

using CDO;
try
      {
             Message oMsg = new Message();
             Configuration conf = new ConfigurationClass();
             conf.Fields[CdoConfiguration.cdoSendUsingMethod].Value = CdoSendUsing.cdoSendUsingPort;
             conf.Fields[CdoConfiguration.cdoSMTPAuthenticate].Value = CdoProtocolsAuthentication.cdoBasic;
             conf.Fields[CdoConfiguration.cdoSMTPUseSSL].Value = true;
             conf.Fields[CdoConfiguration.cdoSMTPServer].Value = "smtp.sohu.com";//必填,而且要真实可用   
             conf.Fields[CdoConfiguration.cdoSMTPServerPort].Value = 465;//465特有
             conf.Fields[CdoConfiguration.cdoSendEmailAddress].Value = "<" + "[email protected]" + ">";
             conf.Fields[CdoConfiguration.cdoSendUserName].Value = "[email protected]";//真实的邮件地址   
             conf.Fields[CdoConfiguration.cdoSendPassword].Value = "xxx";   //为邮箱密码,必须真实   
             conf.Fields.Update();
             oMsg.Configuration = conf;
             oMsg.HTMLBody = "你好";
             oMsg.Subject = "主题";
             oMsg.From = "[email protected]";
             oMsg.To = "[email protected]";
             oMsg.Send();
         }
         catch (System.Net.Mail.SmtpException ex)
         {
             throw ex;
         }

最终 在大佬的教导下 使用 MailKit.dll 发送

using MailKit.Net.Smtp;
using MimeKit;
			var message = new MimeMessage();
            message.From.Add(new MailboxAddress("发件人用户名", "发件人地址"));
            message.To.Add(new MailboxAddress("收件人用户名", "收件人地址"));
            message.Subject = string.Format("来自Hack The Game的{0}邮件 ", "注册");  //邮件标题     
            message.Body = new TextPart("plain")
            {
                Text = string.Format("{0}内容:{1} ", "注册", "测试")//邮件内容。
            };
            using (var client = new SmtpClient())
            {
                // For demo-purposes, accept all SSL certificates (in case the server supports STARTTLS)
                client.ServerCertificateValidationCallback = (s, c, h, e) => true;
                client.Connect("smtpdm.qq.com");
                // Note: only needed if the SMTP server requires authentication
                client.Authenticate("[email protected]", "xxxx");
                client.Send(message);
                client.Disconnect(true);
            }

本地测试ok 发布到服务器 !!!!又是报错 !!!不过报错不一样
服务器报错图片
意思就是说不能加载这个插件 BouncyCastle.Crypto.dll 但是我根本没有这个插件啊 最后翻译了一下
具体意思是 BouncyCastle.Crypto.dll 没有找到 先不管为啥 ,把这个dll 找到 加到项目中 去了服务器试一下 。。。结果 成功了!!!!! 我惊了 !!好高兴 ,但是为啥 为啥 为啥呢 ????
总之 是成功了!
成功的页面截图

在本地测试的时候还有个问题,使用 465 端口发送 邮件 会报错 : 邮件发送失败; 不知道为什么
先这样吧 !! 反正算是部署成功了 也是第一次写博文 ,写的不好 见谅!
插一句 : 最近在玩游戏 有兴趣的来玩一玩 养龙 养龙游戏注册码8utmzf
确实可以体现 ---- 已提现 200块!有问题直接留言告诉我
关于上面的问题 有大佬知道详情的a 愿意帮助我的也跟麻烦留言告诉我一声 半根蓝白感激不尽。抱拳!
项目源码 已上传GitHub
源码下载传送门

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章