服务器无法发送邮件,System.Net与System.Web问题

咸鱼DoKey 2018-07-26 08:39:05
各位大神好,我最近遇到一个问题,搞了我差不多一个月,今天算是解决了,但是却不知道其中原理,请各位大神帮忙解惑。

我遇到的问题是:购买的阿里云windows服务器部署网站后,网站发送邮件总是失败,本地没有问题。

一开始的代码如下,使用的是System.Net.Mail
string smtpServer = "smtp.163.com"; //SMTP服务器
string mailFrom = ConfigHelper.GetString("from163Email"); //登陆用户名
string userPassword = ConfigHelper.GetString("pwd163Email");//登陆密码

// 邮件服务设置
SmtpClient smtpClient = new SmtpClient();//();
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式
smtpClient.Host = smtpServer; //指定SMTP服务器
if (isBySsl)
{
smtpClient.EnableSsl = true;
smtpClient.Port = int.Parse(ConfigHelper.GetString("sslPort"));
}
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new System.Net.NetworkCredential(mailFrom, userPassword);//用户名和密码

// 发送邮件设置
MailMessage mailMessage = new MailMessage(mailFrom, mailTo); // 发送人和收件人
mailMessage.Subject = mailSubject;//主题
mailMessage.Body = mailContent;//内容
mailMessage.BodyEncoding = System.Text.Encoding.UTF8;//正文编码
mailMessage.IsBodyHtml = true;//设置为HTML格式
mailMessage.Priority = MailPriority.Low;//优先级

try
{
smtpClient.Send(mailMessage); // 发送邮件

25端口被禁了,但是ssl加密的465端口也一直发送不出去,网上说改成587也还是不行。
后面改用了另一个类库System.Web.Mail,代码如下

System.Web.Mail.MailMessage mmsg = new System.Web.Mail.MailMessage();
//邮件主题
mmsg.Subject = subject;
mmsg.BodyFormat = System.Web.Mail.MailFormat.Html;
//邮件正文
mmsg.Body = body;
//正文编码
mmsg.BodyEncoding = Encoding.UTF8;
//优先级
mmsg.Priority = System.Web.Mail.MailPriority.Normal;
//发件者邮箱地址
mmsg.From = ConfigHelper.GetString("from163Email");
//收件人收箱地址
mmsg.To = Tomail;

mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
//用户名
mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", ConfigHelper.GetString("from163Email"));
//密码
mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", ConfigHelper.GetString("pwd163Email"));
//端口
mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", isBySsl ? "465" : "25");
//是否ssl
mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", isBySsl ? "true" : "false");
//Smtp服务器
System.Web.Mail.SmtpMail.SmtpServer = "smtp.163.com";

try
{
System.Web.Mail.SmtpMail.Send(mmsg);
这次竟然发送成功了。按理说,net2.0以后的版本用的应该是net类库的,web类库已经过时了。但实际是net类库的发送不了,web类库的可以,有大神指点一下吗?谢谢了
这是我的目标框架:
...全文
970 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
咸鱼DoKey 2018-07-26
  • 打赏
  • 举报
回复
我服务器是windows server 2008 r2
咸鱼DoKey 2018-07-26
  • 打赏
  • 举报
回复
那服务器是不支持安全链接发送吗?还是需要设置什么呢?我用前者在服务器上面无法发送成功,本地可以。而用后者就本地和服务器都可以发送成功
江湖评谈 2018-07-26
  • 打赏
  • 举报
回复
不光是system.net.email,后面的system.web.email 也是.net 类库一部分。不同的是前者用的是安全链接发送后者是无模式通知形式。
实际上都能达到发送邮件效果
peng2739956 2018-07-26
  • 打赏
  • 举报
回复
阿里云的服务器 端口开放 需要在安全组设置端口,设置端口之后 你之前的发送应该也是能用的。
.NET Framework 4.0 常用类库参考手册 [微软官方 MSDN] MSDN Library - .NET Framework 4.0 - 命名空间 (节选版) 制作成了chm格式,方便离线状态下学习! ======================================= 原文地址:http://msdn.microsoft.com/zh-cn/library/ms229335.aspx ======================================= .NET Framework 类库 - 命名空间 (节选版) Microsoft.Win32 提供两种类型的类:处理由操作系统引发的事件的类和对系统注册表进行操作的类。 System 包含用于定义常用值和引用数据类型、事件和事件处理程序、接口、特性和处理异常的基础类和基类。其他类提供支持下列操作的服务:数据类型转换,方法参数操作,数学计算,远程和本地程序调用,应用程序环境管理以及对托管和非托管应用程序的监管。 System.Collections 包含定义各种对象集合(如列表、队列、位数组、哈希表和字典)的接口和类。 System.Data 包含组成大部分 ADO.NET 结构的类。ADO.NET 结构使您可以生成可用于有效管理来自多个数据源的数据的组件。 System.Data.Common 包含由 .NET Framework 数据提供程序共享的类。.NET Framework 数据提供程序描述用于在托管空间中访问数据源(如数据库)的类的集合。 System.Data.Linq 包含支持在 LINQ to SQL 应用程序中与关系数据库进行交互的类。 System.Data.Linq.Mapping 包含用于生成表示关系数据库的结构和内容的 LINQ to SQL 对象模型的类。 System.Data.Mapping 提供用于存储数据映射信息的类型。 System.Data.Metadata.Edm 包含一组类型,这些类型表示模型中由实体框架使用的概念,以及一组帮助应用程序使用元数据的类。 System.Data.Objects 包含可访问对象服务的核心功能的类。 System.Data.Objects.DataClasses 包含以下这些类:Entity Data Model (EDM) 中定义的类型的基类、由导航属性返回的类型的基类,以及用于定义将公共语言运行时 (CLR) 对象映射到概念模型中类型的特性的类。 System.Data.Sql 包含支持特定于 SQL Server 的功能的类。此类的 API 扩展已添加到 SQL Server 的 .NET Framework 数据提供程序 ( System.Data.SqlClient) 中。 System.Data.SqlClient 包含封装 SQL Server .NET Framework 数据提供程序的类。SQL Server .NET Framework 数据提供程序描述了用于在托管空间中访问 SQL Server 数据库的类集合。 System.IO 包含允许对数据流和文件进行同步和异步读写的类型。 System.Linq 包含支持使用语言集成查询 (LINQ) 的查询的类和接口。 System.Web 提供启用浏览器/服务器通信的类和接口。 ……

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧