邮件发送相关端口

  首先说下邮件发送的端口:25/465/587

  25端口

  25端口是为SMTP协议服务开放的,是这三个端口中最老的一个。25端口也称为消息中继端口,因为这个端口经常被恶意利用,所以现在这个端口主要用于邮件服务器之间的消息转发,而且现在国内的云服务器如阿里云腾讯云等等都是默认禁用25端口的。

  465端口

  465端口是为SMTPS(SMTP-over-SSL)协议服务开放的,而SMTPS是SMTP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露,SMTP与SMTPS的关系类似HTTP与HTTPS的关系。465端口并未被IETF认可,因此那些严格准招Internet标准的公司可能也没有认可,但是在国内环境被作为25端口的替代端口。

  587端口

  587端口是邮件客户端向邮件服务器提交消息的推荐端口,是STARTTLS协议的,属于TLS通讯协议,也称为消息提交端口。客户端通过587端口提交消息,然后服务器之间通过25端口转发,这是一个理想模式。

  

  问题

  如下面发邮件的代码  

    string host = "smtp.exmail.qq.com";//qq邮箱
int port = 25;//25 465 587
string from = "123456@qq.com";
string to = "456789@qq.com";
string userName = "123456@qq.com";
string password = "123456"; MailMessage message = new MailMessage();
message.From = new MailAddress(from);
message.To.Add(new MailAddress(to));
message.Body = "test body";
message.Subject = "test subject";
message.IsBodyHtml = true;
message.SubjectEncoding = Encoding.UTF8; SmtpClient client = new SmtpClient(host, port);
client.UseDefaultCredentials = true;
client.Credentials = new NetworkCredential(userName, password);
client.Send(message);

  上面发邮件使用的是System.Net.Mail,如果使用的本地环境,是可以发送邮件的,可如果部署到服务器上,特别是云服务器,可能邮件就发不出来了,这个很可能是因为25端口被禁用,所以需要开启服务器的25端口(阿里云腾讯云等25端口开启要申请),而网上推荐使用465端口,但是System.Net.Mail貌似不支持465端口,可能与上面说的465端口未被IETF认可有关吧。

  System.Net.Mail不支持465端口不表示465端口不可用,如果是.net framework,可以使用System.Web.Mail来使用465端口,如果是.net core,可以使用MailKit,不仅支持465,还支持25和587端口,可以使用nuget安装MailKit    

    string host = "smtp.exmail.qq.com";//qq邮箱
int port = 465;//25 465 587
string from = "123456@qq.com";
string to = "456789@qq.com";
string userName = "123456@qq.com";
string password = "123456"; var message = new MimeMessage();
message.From.Add(new MailboxAddress(from));
message.To.AddRange(new MailboxAddress[] { new MailboxAddress(to) });
message.Subject = "test subject";
var entity = new TextPart(TextFormat.Html)
{
Text = "test body"
};
SmtpClient client = new SmtpClient();
client.Connect(host, port, port == 465);//465端口是ssl端口
client.Authenticate(userName, password);
client.Send(message);
client.Disconnect(true);

  

C# 服务器发送邮件失败的更多相关文章

  1. 使用 spring封装的javamail linux服务器发送邮件失败解决

    原文参考:https://blog.csdn.net/a540891049/article/details/79385471 由于某些平台的linxu服务器为了安全起见 屏蔽了发送邮件的常用端口 25 ...

  2. 阿里云服务器发送邮件失败,25端口被禁用,采用ssl 方式 465端口发送

    /** * 邮件工具类 * User: NZG * Date: 2019/3/8 * Time: 12:25 **/ @Data @Component @Configuration @Configur ...

  3. JDK1.8导致发送邮件失败

    问题:本地JDK1.6测试可以发送邮件,但是linux上jdk1.8发送邮件失败.报错: Sending the email to the following server failed : smtp ...

  4. Linux SendMail发送邮件失败诊断案例(三)

    一Linux服务器突然发送不出邮件,检查了很多地方都没有发现异常,检查/var/log/maillog发现如下具体信息: Apr 12 00:36:04 mylinux sendmail[4685]: ...

  5. (转)解决jdk1.8中发送邮件失败(handshake_failure)问题

    解决jdk1.8中发送邮件失败(handshake_failure)问题 作者 zhisheng_tian 2016.08.12 22:44* 字数 1573 阅读 2818评论 6喜欢 9 暑假在家 ...

  6. Linux SendMail发送邮件失败诊断案例(四)

    最近又碰到一起Linux下SendMail发送邮件失败的案例,邮件发送后,邮箱收不到具体邮件, 查看日志/var/log/maillog 发现有"DSN: User unknown" ...

  7. C# 使用 SmtpClient.SendAsync 方法发送邮件失败,总是返回 Cancelled

    问题: 调用 SmtpClient.SendAsync,在 SendCompleted 的回调函数里面总是获取到 e.Cancelled 为 true. 后来测试了一下,相同的代码,只是把 SmtpC ...

  8. PHP用socket连接SMTP服务器发送邮件

    PHP用socket连接SMTP服务器发送邮件 PHP用socket连接SMTP服务器发送邮件学习实验记录: 分析与SMTP会话的一般流程 1. HELO XXX \r\n //XXX就是自己起个名字 ...

  9. Jenkins 邮件配置 || Jenkins 发送邮件失败,提示:Error sending to the following VALID addresses

    jenkins---系统管理---系统设置 在Jenkins URL下填写URL链接 在系统管理员邮件地址下填写发件邮箱,这将是以后发送邮件通知的发件人 如果下载了外部邮件通知 配置一下SMTP se ...

随机推荐

  1. oracle first_value,last_valus

    first_value和last_value 是用来去分析函数窗口中对应列的第一个值和最后一个值的函数. 语法如下: first_value(col [ignore NULLS]) over([PAR ...

  2. Linux学习 - 压缩解压命令

    一." .gz "压缩文件 1 压缩语法 gzip  [文件] 2 解压语法 gunzip  [压缩文件] 3 注 gzip只能压缩文件 gzip不保留原文件 二." . ...

  3. 搭建内网Yum源

    搭建内网yum源 阅读(2,238) 一:因内网服务器 众多,当统一安装一些比较大的rpm的时候全部从外网下载就比较慢,而且还占用了一定的出口流量,因此在内网部署了一台yum服务器,将阿里云的epel ...

  4. JS - 事件常用

    问:什么是事件? 答:JS创建动态页面,可以被JS侦测到的行为.网页中的每个元素都可以产生某些可以触发JS函数的事件.比如说,当用户点击按钮时,就发生一个鼠标单击(onclick)事件,需要浏览器做出 ...

  5. 【kafka学习笔记】kafka的基本概念

    在了解了背景知识后,我们来整体看一下kafka的基本概念,这里不做深入讲解,只是初步了解一下. kafka的消息架构 注意这里不是设计的架构,只是为了方便理解,脑补的三层架构.从代码的实现来看,kaf ...

  6. hibernate多对多单向(双向)关系映射

    n-n(多对多)的关联关系必须通过连接表实现.下面以商品种类和商品之间的关系,即一个商品种类下面可以有多种商品,一种商品又可以属于多个商品种类,分别介绍单向的n-n关联关系和双向的n-n关联关系. 单 ...

  7. vue+element项目中动态表格合并

    需求:elementui里的table虽然有合并函数(:span-method),单基本都是设置固定值合并.现在有一个树型结构的数据,要求我们将里面的某个list和其他属性一起展开展示,并且list中 ...

  8. 人工水母搜索算法--JS

    1. 人工水母算法原理背景 水母生活在世界上不同深度和温度的水中.它们酷似钟状,一些水母的直径小于1cm,然有些水母直径则非常大.它们有各种各样的颜色.大小和形状.大多数水母偏好海洋环境.它们进食的方 ...

  9. how2heap libc2.31学习

    今天是四月十九,想在五月份之前把how2heap中的高版本(2.31)的例子过一遍.所以这个系列目前还是在更新中.如果比较简单就几句话带过了,遇到难一点的会写的详细一点. fastbin_dup 源代 ...

  10. TensorFlow.NET机器学习入门【0】前言与目录

    曾经学习过一段时间ML.NET的知识,ML.NET是微软提供的一套机器学习框架,相对于其他的一些机器学习框架,ML.NET侧重于消费现有的网络模型,不太好自定义自己的网络模型,底层实现也做了高度封装. ...