最近开发一个项目,需要给客户发送报告邮件,在开发中遇到本地调试发送邮件一切正常,但当部署到服务器上的时候,一直返回“发送失败”,在此记录,以免以后采坑

webapi 端代码:

         /// <summary>
/// 发送邮件
/// </summary>
/// <param name="fromMail">发件人邮箱</param>
/// <param name="toMail">收件人邮箱</param>
/// <param name="authorizationCode">发件人授权码</param>
/// <param name="replyTo">收件人回复邮件默认接收地址(不设置也可以)</param>
/// <param name="ccMail">邮件抄送人</param>
/// <param name="filePath">附件地址</param>
/// <param name="sendPeopleCall">收件人称呼</param>
/// <param name="collectSampleDate">收样时间</param>
/// <returns></returns>
public MsgModel SendMails(string fromMail,List<string> toMail,string authorizationCode,string replyTo, List<string> ccMail,List<string> filePath,string sendPeopleCall,string collectSampleDate)
{ try
{
//实例化发送邮件类
MailMessage mailMessage = new MailMessage();
//邮件的优先级 分为 low normal high 通常用Normal即可
mailMessage.Priority = MailPriority.Normal;
//发送人邮件地址
mailMessage.From = new MailAddress(fromMail);
//收件人邮件地址 //考虑群发邮件
foreach(var r in toMail)
{
mailMessage.To.Add(new MailAddress(r));
}
if (replyTo == "" || replyTo == null)
{
replyTo = fromMail;
} //对方回复邮件时默认的接收地址(可以不设置)
//mailMessage.ReplyTo = new MailAddress(replyTo);
if (ccMail != null)
{
//邮件抄送 支持 群发 抄送
foreach (var r in ccMail)
{
mailMessage.CC.Add(r);
}
}
//如果邮件标题包含中文,这里要设置编码方式 否则会出现乱码
mailMessage.SubjectEncoding = Encoding.GetEncoding();
//邮件正文是否是Html 格式
mailMessage.IsBodyHtml = true;
//邮件标题
mailMessage.Subject = $@" REPORT-{collectSampleDate}";
//邮件内容
mailMessage.Body = $@"
Dear {sendPeopleCall},
"; mailMessage.Attachments.Clear();
if (filePath != null&&filePath.Count>)
{
foreach (var r in filePath)
{
var urls = System.AppDomain.CurrentDomain.BaseDirectory.ToString() + r;//获取项目的绝对
//将附件添加到邮件
mailMessage.Attachments.Add(new Attachment(urls));
//获取设置此电子邮件的发送通知
mailMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
} }
//实例化 SmtpClient类
SmtpClient client = new SmtpClient();
client.Host = GetClientHost(fromMail);
//使用安全加密连接
client.EnableSsl = true;
client.Port = ;//默认是25 此处设置成587
//不和请求一块发送
client.UseDefaultCredentials = false; //client.DeliveryMethod = SmtpDeliveryMethod.Network; //验证发送人身份(发件人的邮箱,邮箱里生成的授权码)
client.Credentials = new NetworkCredential(fromMail,authorizationCode); //如果发送失败,SMTP 服务器将发送 失败邮件告知fromEmail
mailMessage.DeliveryNotificationOptions= DeliveryNotificationOptions.OnFailure; client.Send(mailMessage); return new MsgModel
{
Status = true,
Msg = "发送邮件成功" ,
Data = ""
};
}
catch(Exception ex)
{
return new MsgModel
{
Status = false,
Msg = "发送邮件失败!错误:" + ex.Message,
Data=""
};
} }
         /// <summary>
/// 根据发送邮箱 识别发件服务器地址
/// </summary>
/// <param name="fromEmail"></param>
/// <returns></returns>
public string GetClientHost(string fromEmail)
{
var host = "";
if (fromEmail.Length != )
{
var addressStr = fromEmail.Trim().Split(new char[] { '@','.'});
switch (addressStr[])
{
case "":
host = "smtp.163.com";
break;
case "":
host = "smtp.126.com";
break;
case "qq":
host = "smtp.qq.com";
break;
case "gmail":
host = "smtp.gmail.com";
break;
case "hotmail":
host = "smtp.live.com";//outlook邮箱
//client.Port = 587;
break;
case "foxmail":
host = "smtp.foxmail.com";
break;
case "sina":
host = "smtp.sina.com.cn";
break;
default:
host = "smtp.exmail.qq.com";//qq企业邮箱
break; }
}
return host;
}

发送邮箱,以及授权码都放在配置文件webconfig 中,这里不展示。

另外:项目是部署到阿里服务器的,此项目邮件发送端口是587,因此在阿里服务器需要设置允许端口587进出。

在此基础上本地调试可正常发送,部署到服务器上就发送失败,经过查阅相关博客,不断的尝试其他博客的解决方法,其中一个博客中说:本地调试发送了邮件成功后,tx那边认为你当前发送邮件的地址为常用的邮件发送地址,再部署到服务器上的时候,tx就认为你是发送广告,就被禁止当前地址发送邮箱,需要解除禁止。禁止一时半会不知道咋去解禁,于是尝试着替换一个qq邮箱账号进行发送邮件,结果真的是发送成功了。

.net 发送qq邮件的更多相关文章

  1. CI框架使用PHPmail插件发送QQ邮件:

    有助请顶,不好请评.0:33 2016/3/12CI框架使用PHPmail插件发送QQ邮件:发送成功,不过修改了主机参数,还包含了一个phpmail中的一个另外的文件,详见下方:参见:http://c ...

  2. 5分钟 wamp下php phpmaile发送qq邮件 2015最新方法说明

    13:40 2015/11/20 5分钟 wamp下php phpmaile发送qq邮件 2015最新方法说明 关键点:现在qq邮箱开通smtp服务后会给你一个很长的独立新密码,发邮件配置中的密码需要 ...

  3. 【python】脚本连续发送QQ邮件

    今天习得用python写一个连续发送QQ邮件的脚本,经过测试,成功给国内外的服务器发送邮件,包括QQ邮箱.163邮箱.google邮箱,香港科技大学的邮箱和爱丁堡大学的邮箱.一下逐步解答相关技巧. 首 ...

  4. Java发送QQ邮件

    面试的时候被问到这个问题,别人问我用Java发过邮件没有,被问得一脸懵逼.然后就研究了一下,不是很难,按照网上的方法折腾了几天就搞出来了. 首先,使用QQ邮箱发送邮件之前需要在邮箱里面配置,开启pop ...

  5. python3:利用SMTP协议发送QQ邮件+附件

    转载请表明出处:https://www.cnblogs.com/shapeL/p/9115887.html 1.发送QQ邮件,首先必须知道QQ邮箱的SMTP服务器 http://service.mai ...

  6. java mail Received fatal alert: handshake_failure java 无法发送邮件问题 java 发送qq邮件(含源码)

     java 无法发送邮件问题 java 发送qq邮件 报错:java mail Received fatal alert: handshake_failure (使用ssl) javax.mail.M ...

  7. Quartz.NET浅谈一 : 简单Job使用(定时发送QQ邮件)

    Quartz.NET是一个全功能的开源作业调度系统,可用于从最小的应用程序到大型企业系统. 直接上代码吧... 一.新建一个控制台项目 略过 二.安装Nuget包 三.创建发送邮箱辅助工具类 stat ...

  8. 电子邮件协议及GO发送QQ邮件

    目录 一.电子邮件的工作机制 1.1 SMTP 1.2 POP3 1.3 IMAP 二.邮件地址 三.MIME信息 四.使用golang发送qq邮件 一.电子邮件的工作机制 提供电子邮件服务的协议叫做 ...

  9. java代码如何发送QQ邮件

    近来想写一个qq之间互相发送邮件的工具.奈何一直报错服务错误: org.apache.commons.mail.EmailException: Sending the email to the fol ...

  10. 使用python发送QQ邮件

    这里用到了Python的两个包来发送邮件: smtplib 和 email . Python 的 email 模块里包含了许多实用的邮件格式设置函数,可以用来创建邮件“包裹”.使用的 MIMEText ...

随机推荐

  1. AWS re:Invent 2019参会有感

    感谢AWS方面的邀请,以及公司给予的机会,近期有幸赴美参与了享有盛名的AWS re:Invent大会.会议期间自己还算勤勉,参加了尽可能多的session.现笔者也已回到国内,交个作业,写一篇短文作为 ...

  2. bsoj5988 [Achen模拟赛]期望 题解

    bsoj5988 Description [题目背景] NOI2018 已经过去了许久,2019 届的 BSOIer 们退役的退役,颓废的颓废,计数能力大不如前.曾经的数数之王 xxyj 坦言:&qu ...

  3. 终极CURD-4-java8新特性

    目录 1 概述 2 lambda表达式 2.1 lambda重要知识点总结 2.2 java内置函数接口 2.3 方法引用 2.4 构造器引用 2.5 数组引用 2.6 lambda表达式的陷阱 3 ...

  4. SpringMVC 数据交互

    为什么使用JSON进行数据交互? JSON数据格式比较简单.解析比较方便,在接口调用及HTML页面Ajax调用时较常用. JSON交互方式 请求是Key/Value,响应是JSON(推荐使用) 请求是 ...

  5. SpringCloud -创建统一的依赖管理

    场景 Spring Cloud 为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性 Token,全居琐,Leader 选举,分布式 Session,集群状态)中快速构 ...

  6. jQuery模仿ToDoList实现简单的待办事项列表

    功能:在文本框中输入待办事项按下回车后,事项会出现在未完成列表中:点击未完成事项前边的复选框后,该事项会出现在已完成列表中,反之亦然:点击删除按钮会删除该事项:双击事项可以修改事项的内容.待办事项的数 ...

  7. Dubbo学习笔记-RPC扩展和本地Mock

    1.Dubbo介绍 Dubbo,一个是一款高性能Java RPC框架.私以为有中文官方文档,就不再重复介绍了 2.RPC扩展-本地存根stub RPC扩展功能:提前效验参数,缓存调用结果,日志记录等等 ...

  8. UWP 在ShellPage.xaml.cs 中导航至其他页面引发System.Exception

    最近有一个需求,需要App监测网络变化,并在网络变化的同时用户,你切网啦,并且导航至一个切网的特定页面. 和Android.iOS的小伙伴后共同发现,人家有一个类似”拦截器“的框架,可以拦截App发出 ...

  9. 从头学pytorch(一):数据操作

    跟着Dive-into-DL-PyTorch.pdf从头开始学pytorch,夯实基础. Tensor创建 创建未初始化的tensor import torch x = torch.empty(5,3 ...

  10. LeetCode 按序打印

    第1114题 我们提供了一个类: public class Foo {   public void one() { print("one"); }   public void tw ...