我所列举都是重点,就把一些其他操作过滤掉了,比如异常处理等,实际使用需要根据具体情况自行判断。
/// <summary>
/// 发邮件带抄送人
/// </summary>
/// <param name="MailContent">邮件内容</param>
/// <param name="IsBodyHtml">是否是HTML</param>
/// <param name="Theme">邮件主旨</param>
/// <param name="Copyer">抄送人</param>
/// <returns></returns>
[HttpPost("SendEmail")]
public string SendEmail(string MailContent, bool IsBodyHtml, string Theme, List<string> Receiver)
{
//公司提供的发邮件人
SmtpClient sender = new SmtpClient("ip", 8995)
{
UseDefaultCredentials = false,
DeliveryMethod = SmtpDeliveryMethod.Network,
EnableSsl = false //SSL/TLS不加密
};
sender.Credentials = new NetworkCredential("iFactory", "密码");
//邮件信息
MailMessage myMail = new MailMessage
{
From = new MailAddress("iFactory@luxshare-ict.com"),//公司提供的发邮件人
Subject = Theme,
SubjectEncoding = Encoding.UTF8,
Body = MailContent,
BodyEncoding = Encoding.UTF8,
IsBodyHtml = IsBodyHtml,
Priority = MailPriority.High
};
for (int i = 0; i < Receiver.Count; i++)//收件人
{
string receivers = Receiver[i].ToString().Trim();
if (CheckEamilFormat.IsValidEmail(receivers) && (receivers.ToUpper().Contains("LUXSAN") || receivers.ToUpper().Contains("LUXSHARE")))//为了保密,公司要求邮件必须要包含LUXSHARE、LUXSAN,因为之前有向qq邮箱发邮件的情况。
{
myMail.To.Add(new MailAddress(Receiver[i].ToString().Trim()));
}
}
//如果有抄送人的话
//for (int i = 0; i < Copyer.Count; i++)//抄送人
//{
// string copyers = Copyer[i].ToString().Trim();
// if (CheckEamilFormat.IsValidEmail(copyers) && (copyers.ToUpper().Contains("LUXSAN") || copyers.ToUpper().Contains("LUXSHARE")))
// {
// myMail.CC.Add(new MailAddress(Copyer[i].ToString().Trim()));
// }
//}
sender.Send(myMail);
//如果有附件的话,完事后附件要释放
//foreach (Attachment item in myMail.Attachments)
//{
// item.Dispose();
//}
return "发送成功";
}
public class CheckEamilFormat
{
//判断邮件地址是否正确,错误则跳过
public static bool IsValidEmail(string email)
{
if (string.IsNullOrEmpty(email))
{
return false;
}
try
{
MailAddress mailAddress = new MailAddress(email);
return true;
}
catch (FormatException)
{
return false;
}
}
}
题外话:我在做某个需求时,用户想要发邮件带图片,并且图片附着在正文中,本身简单a标签的事,但由于公司保密措施强大,禁止开发人员通过邮件发送图片,但用户又坚持。发图片这个事,用户又找了资安,又找了稽查,最后结果是规则已经定下了,但是如果我们可以发图片的话,只要不涉及过高的机密,他们就允许。这一下子就把问题抛给了我,要我一个小卡拉米去“开疆拓土”?
当时确实挺烧脑的。
好在不辱使命,后来我突发奇想了个idea,就是可以把用户上传的图片先存到图片服务器中,用户调发邮件接口时去图片的服务器中查该图片,并下载到接口所在的服务器中,然后将图片附着到邮件的正文中,最后再从接口所在的服务器中把上传的图片删除掉,以免图片越来越多,占用磁盘间,完美解决。或许这就是程序员的快乐吧,解决一个难点,能happy好几天。