C# System.Net.Mail 类不支持465端口发送邮件

今天遇到特别恼人的bug,用System.Net.Mail 类 异步发送 邮件老是报错(我之前用python配置阿里云邮件服务,可以发送成功,而且很流畅)
看下代码

using System;
using System.ComponentModel;
using System.Net.Mail;
using System.Text;// 邮件发送辅助静态类 异步public static void SendMails(string MailTo, string Subject, string Body, Action errorcallback){SmtpClient mailclient = new SmtpClient{//smtp服务器Host = "smtpdm.aliyun.com",// 是否加密EnableSsl = true,//smtp端口Port = 465,//发送方式DeliveryMethod = SmtpDeliveryMethod.Network,//用户名凭证               Credentials = new System.Net.NetworkCredential("发信账户", "password"),};//邮件信息MailMessage message = new MailMessage{//发件人From = new MailAddress("发信账户"),};//收件人new MailAddress(MailTo, MailTo.ToString(), Encoding.UTF8);//邮件标题编码message.SubjectEncoding = Encoding.UTF8;//主题message.Subject = Subject;//内容message.Body = Body;//正文编码message.BodyEncoding = Encoding.UTF8;//设置为HTML格式message.IsBodyHtml = true;//优先级message.Priority = MailPriority.Normal;//事件注册mailclient.SendCompleted += (s1, e1) =>{ if (e1.Error != null){ errorcallback();}};//异步发送mailclient.SendAsync(message, message.To);}

外部调用

// 外部调用Task.Factory.StartNew(() =>{SendEmail.SendMails(user.Email, "半根蓝白博客注册帐号激活", sb.ToString(),() =>{System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(Server.MapPath("~/data_log/"));if (!dir.Exists)dir.Create();string _savefile = "~/data_log/SendEmailError_" + DateTime.Now.ToString("yyyyMMdd") + ".log";System.IO.StreamWriter sw = new System.IO.StreamWriter(Server.MapPath(_savefile), true, Encoding.UTF8);sw.WriteLine(sb);sw.Close();sw.Dispose();});});

因为是异步方法,所以一直看不到报错具体信息,通过断点调试,最后发现报错是 语法错误 命令不可用 服务器返回: 返回什么也看不到
经过长时间百度,谷歌
……………………………………

好像理解了,是用户名的格式问题,按照百度的说法,使用 邮件地址@符号前面(我使用的是阿里云邮件推送服务)的 我的 账户是 blog@bglb.work 所以,我把身份认证Credentials = new System.Net.NetworkCredential("发信账户", "password")换成Credentials = new System.Net.NetworkCredential("blog", "password") 结果还是相同的语法错误 命令不可用 服务器返回:
有点恼人,经过长时间的谷歌 ,我最后决定,先把异步方法去掉,把代码换成了

using System;
using System.ComponentModel;
using System.Net.Mail;
using System.Text;public static void SendMails(string MailTo, string Subject, string Body, Action errorcallback=null){SmtpClient mailclient = new SmtpClient{//smtp服务器Host = "smtpdm.aliyun.com",// 是否加密EnableSsl = true,//smtp端口Port = 465,//发送方式DeliveryMethod = SmtpDeliveryMethod.Network,//用户名凭证               Credentials = new System.Net.NetworkCredential("发信账户", "password", "bglb.work"),};//邮件信息MailMessage message = new MailMessage{//发件人From = new MailAddress("发信账户"),};//收件人new MailAddress(MailTo, MailTo.ToString(), Encoding.UTF8);//邮件标题编码message.SubjectEncoding = Encoding.UTF8;//主题message.Subject = Subject;//内容message.Body = Body;//正文编码message.BodyEncoding = Encoding.UTF8;//设置为HTML格式message.IsBodyHtml = true;//优先级message.Priority = MailPriority.Normal;//事件注册//mailclient.SendCompleted += (s1, e1) => { if (e1.Error != null) { errorcallback(); } };//异步发送//mailclient.SendAsync(message, message.To);mailclient.Send(message);}

外部调用代码

 SendEmail.SendMails(user.Email, "半根蓝白博客注册帐号激活", sb.ToString())

经过调试,我又得到了一个离奇错误无法从传输连接中读取数据: net_io_connectionclosed。
又是一个漫长的谷歌 最后看到一篇博客说,好像不能指定多个发件人(我也没有啊) 只不过是用了一个list 但是里面确实只有一个用户啊
哎 ,再试试 修改 mailclient.Send(message);mailclient.Send("blog@bglb.work", MailTo, message.Subject, message.Body);; 满心欢喜的以为会看到 发送成功!结果 还是 相同的错误()无法从传输连接中读取数据: net_io_connectionclosed。

我就不信了,又是长时间的百度,谷歌,一篇博客中说,using System.Net.Mail; 属于System.dll v4.0.0.0 这个程序集,
System.Net.Mail 命名空间下的 SmtpClient 默认是不支持 SSL & 465 端口发送邮件的。虽然启用了 ssl 和465 端口,但是还是不能用的,啊!!!!! 炸了 一万句** 奉上 !

在给大家说一点:云服务器一般不支持25 端口 发送邮件,因为会有安全问题,都已经禁止使用了,而邮件发送的默认端口就是25,因此之后,大家都在使用 465 端口,或者587 端口,使用加密传送,启用Ssl,这也就是为什么我要使用 465 的原因

解决方法:

既然这个dll 不支持,那就换一个呗 ,C# 能发邮件的类库多了去了。
我之前使用一个废弃的类库 System.Web.Mail 这个在使用中可能会报一个错Web.Mail 已过时,但是不影响邮件的发送!,所以换一个吧。
下面给出一个简单的示例,这是我之前使用过的一个类库,没有任何问题

using MailKit.Net.Smtp;
using MimeKit;
using System;/// <summary>
/// Mail 的摘要说明
/// </summary>
public class Mail
{public Mail(){//// TODO: 在此处添加构造函数逻辑//}/// <summary>/// 使用 阿里云邮件服务获取qq邮件服务/// </summary>/// <param name="address"></param>/// <param name="title"></param>/// <param name="content"></param>/// <returns></returns>public static bool send(string address, string title, string content){var message = new MimeMessage();message.From.Add(new MailboxAddress("发件人备注", "发信账户"));message.To.Add(new MailboxAddress("收件人备注", address));message.Subject = string.Format("邮件标题 ", title);  //邮件标题     message.Body = new TextPart("plain"){Text = string.Format("{0}内容:{1} ", title, content)//邮件内容。};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.aliyun.com", 465, true);// 取决与你发信账户的类型 一般的qq邮箱(需要开启授权码,以及smtp服务,密码也就是授权码了)使用 :"smtp.qq.com" 126邮箱类似等,类似// Note: only needed if the SMTP server requires authenticationclient.Authenticate("发信账户", "密码");try{client.Send(message);//发送邮件client.Disconnect(true);return true;}catch (Exception ex){return false;throw ex;}}}}

加油吧

首次发表地址–蓝白社区

C# System.Net.Mail 类 使用465端口邮件不成功相关推荐

  1. 如何利用System.Net.Mail类发送EMAIL

    废话不多说,直接上代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; us ...

  2. .net System.Web.Mail发送邮件

    net System.Web.Mail发送邮件 用System.Web.Mail发送邮件,适用于.net1.1.net2.0请用System.Net.Mail 先引用System.Web 1,发送简单 ...

  3. System.Web.Mail.SmtpMail

    System.Web.Mail.MailMessage message = new  System.Web.Mail.MailMessage();  // 定义邮件的发送地址  message.Fro ...

  4. java Mail使用SSl,端口465加密发送邮件配置

    转载于 https://www.cnblogs.com/hoojjack/p/8025284.html 一.一般配置 发送邮件需要用到  mail包 maven 依赖如下: 1 <!-- htt ...

  5. C# 发送电子邮件(含附件)用到的类 system.web.mail

    主要是用到了System.Web.Mail命名空间,用到了此空间的三个类,分别是: ●MailMessage类,用于构造电子邮件 ●MailAttachment类,用于构造电子邮件附件 ●SmtpMa ...

  6. spring boot mail 发送邮件,及25端口更换到465端口

    因为考虑到邮箱注册的业务,最近写了一个发送邮件的业务.使用阿里云邮箱发送.在这里搭建什么的就不展示了,直接上关键代码. pom.xml中添加: <dependency><groupI ...

  7. 使用JavaMail发送邮件,465端口开启ssl加密传输

    自己的项目在本地发邮件没任何问题.但部署到服务器,发送邮件显示连接异常.原来是云服务器出于安全考虑,关闭了服务器的25端口,而25端口是smtp的默认端口.所以使用465端口开启ssl加密传输 代码: ...

  8. System.Net.Mail 简介 收藏

    System.Net.Mail命名空间是在.NET Framework中新增的,该命名空间提供了发送电子邮件的功能.通过对本章的学习,读者可以轻松地使用.NET Framework提供的类库来发送电子 ...

  9. php 465端口发送邮件,云服务器使用SSL加密465端口发信样例及Demo

    适用场景 因服务器的25端口默认封闭,需要使用SSL加密端口(通常是465)来对外发信,以下样例适用于程序调用外部邮箱发信的场景,调用的邮箱服务器需要支持SSL加密.这里介绍.NET和PHP的样例,其 ...

最新文章

  1. 团队项目-个人博客-4.20
  2. (转载)Python数据分析之pandas学习
  3. win10电脑插耳机没声音_Win10如何录制电脑内部播放的声音
  4. eclipse部署web项目
  5. Latex与VSCode环境搭建问题解决
  6. Qt文档阅读笔记-Qt 3D: Simple C++ Example解析
  7. FullCalendar 一: 日程安排FullCalendar
  8. ES5(三)——数组新增函数every()、some()、map()、foreach()、filter()和reduce()汇总
  9. 基于W5300和FPGA的实时数据采集系统设计
  10. python 从列表中随机选择_使用条件Python从列表中随机选择
  11. 家庭记账本开发进度6
  12. jenkins中eclipse+ant+svn自动打包APK
  13. 自动驾驶 7-1 Carla 概述 - 自动驾驶汽车模拟Carla Overview - Self-Driving Car Simulation
  14. Windows自带便签工具Sticky Notes
  15. 引用参数如何设缺省值(默认值)(C++)
  16. 《SysML精粹》学习记录--第七章
  17. PC/UVa 题号: 110106/10033 Interpreter (解释器)题解 c语言版
  18. SNMP简单网络配置协议
  19. C# 电脑麦克风录音
  20. 关于com.lowagie.text包的报错问题

热门文章

  1. 2021 buaa 计组上机P3和P4 单周期CPU 3道课上考试题
  2. 使用Python下载酷狗音乐
  3. 《痞子衡嵌入式半月刊》 第 1 期
  4. 直播app代码公布:视频直播源码转盘功能的实现
  5. 在进行原理图编译的时候提示警告:Net has no driving source
  6. 联想笔记本键盘亮屏幕不亮_联想笔记本电脑开机键亮但是黑屏,联想笔记本电脑键盘失灵怎么办...
  7. 搭载固态硬盘的服务器究竟比机械硬盘快多少
  8. Taiyo Pacific Partners L.P.成为ZENKOKU HOSHO CO., Ltd.的主要股东,持股比例超过5%
  9. bzoj1755 [Usaco2005 qua]Bank Interest
  10. 怎么关闭自动启动的屏幕键盘