[HttpPost]
public JsonResult<object> SendMail()
{MailMessage mailMsg = new MailMessage();//实例化对象
mailMsg.From = new MailAddress("XXXXXXXXXX@163.com", "网易邮箱测试");//源邮件地址和发件人
mailMsg.To.Add(new MailAddress("17XXXXXXXX@qq.com","收件人:小越"));//收件人地址
mailMsg.Subject = "邮件发送测试";//发送邮件的标题
StringBuilder sb = new StringBuilder();
sb.Append("测试测试测试测试");
sb.Append("嘿嘿,测试网易万一");
mailMsg.Body = sb.ToString();//发送邮件的内容
//指定smtp服务地址(根据发件人邮箱指定对应SMTP服务器地址)
SmtpClient client = new SmtpClient();//格式:smtp.126.com smtp.164.com
client.Host = "smtp.163.com";
//要用587端口
client.Port =25 ;//端口25
//加密
client.EnableSsl = true;
//通过用户名和密码验证发件人身份
client.Credentials = new NetworkCredential("XXXXXXXXX@163.com", "XXXXXXXXXXXXXXXXXXXX");
//发送邮件
try
{
client.Send(mailMsg);
return Result<object>(ResultCode.sucess,"发送成功");}
catch (SmtpException ex)
{
return Result<object>(ResultCode.sucess, "发送失败", ex.ToString());
}}
[HttpPost]
[AllowAnonymous]
public JsonResult<object> SendQQmail()
{
string fromname = "发件人";//发件人
string fromAddress = "465XXXXXXXXXXXXXX@qq.com";//发件邮箱账号
string password = "XXXXXXXXXXXXXX";//授权码
string title = "邮件主题:测试一下";//邮件标题
string body = "邮件内容:测试一下,测试一下,哈哈";//邮件内容
string style = "smtp.qq.com";//发件方式
int port = 25; // 或者587
string toAddresses = "1xxxxxxxxxxxxx@qq.com";//不能判断是否存在这个邮箱
string toName = "收件人";
SendEmail se = new SendEmail(toAddresses, fromAddress, toName, fromname, title, body, false);
int res = se.SetSmtp(fromAddress, password, style, port, true, System.Net.Mail.MailPriority.Normal); //必须在所有参数设置完后调用此方法return Result<object>(ResultCode.sucess, "发送成功");
}
SendMail 类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
using System.Text;
using System.Threading.Tasks;namespace Wz.Test.Api.Extensions
{
public class SendEmail
{
private MailMessage mailMessage = new MailMessage(); //实例化一个邮件类
/// <summary>
/// 构造函数
/// </summary>
/// <param name="toAddresses">收件人地址(多个以,号分开)</param>
/// <param name="fromAddress">发件人地址</param>
/// <param name="title">主题</param>
/// <param name="body">正文</param>
public SendEmail(string toAddresses, string fromAddress, string title, string body)
: this(toAddresses, fromAddress, "", "", title, body, false)
{ }
/// <summary>
/// 构造函数
/// </summary>
/// <param name="toAddress">收件人地址</param>
/// <param name="fromAddress">发件人地址</param>
/// <param name="toName">收件人名字</param>
/// <param name="fromName">发件人姓名</param>
/// <param name="title">主题</param>
/// <param name="body">正文</param>
/// <param name="isBodyHtml">正文是否为html格式</param>
public SendEmail(string toAddress, string fromAddress, string toName, string fromName, string title, string body, bool isBodyHtml)
{
mailMessage.From = new MailAddress(fromAddress, fromName, Encoding.GetEncoding(936));if (toName.Equals(""))
{
mailMessage.To.Add(toAddress);
}
else
{
mailMessage.To.Add(new MailAddress(toAddress, toName, Encoding.GetEncoding(936)));}
mailMessage.Subject = title;
mailMessage.SubjectEncoding = Encoding.GetEncoding(936);
mailMessage.Body = body;
mailMessage.IsBodyHtml = isBodyHtml;
mailMessage.BodyEncoding = Encoding.GetEncoding(936);
}
/// <summary>
/// 设置SMTP,并且将邮件发送出去
/// 所有参数都设置完成后再调用该方法
/// </summary>
/// <param name="password">发件人密码</param>
/// <param name="smtpHost">SMTP服务器地址</param>
public void SetSmtp(string password, string smtpHost)
{
SetSmtp(mailMessage.From.Address, password, smtpHost, 25, false, MailPriority.Normal);
}
/// <summary>
/// 设置SMTP,并且将邮件发送出去
/// 所有参数都设置完成后再调用该方法
/// </summary>
/// <param name="address">发件人地址(必须为真实有效的email地址)</param>
/// <param name="password">发件人密码</param>
/// <param name="smtpHost">SMTP服务器地址</param>
/// <param name="smtpPort">SMTP服务器的端口</param>
/// <param name="isEnableSsl">SMTP服务器是否启用SSL加密</param>
/// <param name="priority">邮件的优先级</param>
public int SetSmtp(string address, string password, string smtpHost, int smtpPort, bool isEnableSsl, MailPriority priority)
{
try
{
SmtpClient smtp = new SmtpClient();
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Credentials = new NetworkCredential(address, password);
smtp.Host = smtpHost;
smtp.Port = smtpPort;
smtp.EnableSsl = isEnableSsl;
mailMessage.Priority = priority;
smtp.Send(mailMessage); //发送邮件
return 1;
}
catch (Exception ex)
{
return 0;
throw ex;
}
}
#region
/// <summary>
/// 设置更多收件人
/// </summary>
/// <param name="toAddresses">收件人地址</param>
public void SetMoreToAddress(string toAddresses)
{
mailMessage.To.Add(toAddresses);
}
/// <summary>
/// 设置更多收件人
/// </summary>
/// <param name="toAddresses">收件人地址</param>
/// <param name="toName">收件人名字</param>
public void SetMoreToAddress(string toAddress, string toName)
{
mailMessage.To.Add(new MailAddress(toAddress, toName, Encoding.GetEncoding(936)));
}
/// <summary>
/// 设置抄送者(多个以,号分开)
/// </summary>
/// <param name="ccAddresses">抄送者地址</param>
public void SetCarbonCopyFor(string ccAddresses)
{
mailMessage.CC.Add(ccAddresses);
}
/// <summary>
/// 设置抄送者
/// </summary>
/// <param name="ccAddress">抄送者地址</param>
/// <param name="ccName">抄送者名字</param>
public void SetCarbonCopyFor(string ccAddress, string ccName)
{
mailMessage.Bcc.Add(new MailAddress(ccAddress, ccName, Encoding.GetEncoding(936)));
}
/// <summary>
/// 设置密送者(多个以,号分开)
/// </summary>
/// <param name="bccAddresses">密送者</param>
public void SetBlindCarbonCopyFor(string bccAddresses)
{
mailMessage.Bcc.Add(bccAddresses);
}
/// <summary>
/// 设置密送者
/// </summary>
/// <param name="bccAddress">密送者</param>
/// <param name="bccName">密送者名字</param>
public void SetBlindCarbonCopyFor(string bccAddress, string bccName)
{
mailMessage.Bcc.Add(new MailAddress(bccAddress, bccName, Encoding.GetEncoding(936)));
}
#endregion
/// <summary>
/// 添加附件(自动识别文件类型)
/// </summary>
/// <param name="fileName">单个文件的路径</param>
public void Attachments(string fileName)
{
mailMessage.Attachments.Add(new Attachment(fileName));
}
/// <summary>
/// 添加附件(默认为富文本ZIP格式)
/// </summary>
/// <param name="fileName">单个文件的路径</param>
public void AttachmentsForZIP(string fileName)
{
mailMessage.Attachments.Add(new Attachment(fileName, MediaTypeNames.Application.Zip));
}
}
}
出现问题:
.net core 出现错误:No data is available for encoding 936. For information......
解决:
异常信息中提到了Encodeing.RegisterProvider,.NET Core 在默认情况下是没有注册EncodeProvider,需要手动注册。
步骤:
1.安装NuGet包 System.Text.Encoding.CodePages
2.在 Startup.cs 中Configure 添加:
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
参考链接:
使用MailMessage发送邮件_anqiuqi4791的博客-CSDN博客
使用 System.Net.Mail.MailMessage 发送电子邮件_weixin_30546933的博客-CSDN博客