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

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. 函数知识总结(js)

    c语言中函数的形参必须定义类型,而且形参的个数和实参的个数必须相等.但是在js中形参不需要定义,在函数定义的小括号中只需要写形参名就可以了不用写var关键字,而且在函数调用时传入的实参可以和形参的个数 ...

  2. 《Dotnet9》系列-Google ProtoBuf在C#中的简单应用

    时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...

  3. 【高可用架构】开发机上部署Deploy项目(一)

    准备 部署项目的细节可以看这个,传送门Centos 7部署Laravel项目 主机IP:192.168.10.17 [高可用架构]系列链接:待部署的架构介绍 演示 部署Deploy composer ...

  4. 设计模式-单例模式code

    package singeton; import java.security.SecureRandom; /** * @author Zero * @since 2019-08-13. * Descr ...

  5. Jetpack架构组件(二)Lifecycle使用

    1.直接添加如下依赖就可以满足日常的工作,如果缺少哪个库,再去单独添加就好了 implementation "android.arch.lifecycle:extensions:1.1.1& ...

  6. Java设计模式13:责任链模式

    前言 来菜鸟这个大家庭10个月了,总得来说比较融入了环境,同时在忙碌的工作中也深感技术积累不够,在优秀的人身边工作必须更加花时间去提升自己的技术能力.技术视野,所以开一个系列文章,标题就轻松一点叫做最 ...

  7. Spring Cloud Finchley.SR1 版本的坑:placeholer占位符无法解析!

    接入nacos 之后,想把所有的配置丢上去. 启动程序是: @EnableDiscoveryClient @RestController @ComponentScan(basePackages = { ...

  8. Spring Boot Security 保护你的程序

    Spring Boot Security 本示例要内容 基于角色的权限访问控制 加密.解密 基于Spring Boot Security 权限管理框架保护应用程序 String Security介绍 ...

  9. 使用hexo、github Pages搭建博客

    1. 安装node 如果本机已经有node,为避免安装出现问题,建议先升级到最新版.参考:https://juejin.im/post/5b9739d1e51d450e9f66ee3b 2. 安装he ...

  10. inux CPU监控分析

    一.vmstat 可对操作系统的虚拟内存.进程.CPU活动进行监控 Procs(进程) r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU.(长期大于1) b: 等待IO的进程数量. Mem ...