public class Email
{
public Email()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 初始化信件相关信息
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public MailMessage InitMailMessage(string address)
{
MailMessage mail = new MailMessage();
mail.From = new MailAddress("你的邮箱"); //发件人
mail.To.Add(address); //收件人
mail.Subject = "邮件发送测试"; //主题
mail.Body = "邮件测试内容"; //内容
//邮件主题和正文的编码格式
mail.SubjectEncoding = System.Text.Encoding.UTF8;
mail.BodyEncoding = System.Text.Encoding.UTF8;
mail.IsBodyHtml = true; //邮件正文允许html编码
mail.Priority = MailPriority.Normal; //优先级
//密送——就是将信密秘抄送给收件人以外的人,所有收件人看不到密件抄送的地址
// mail.Bcc.Add("@qq.com");
//抄送——就是将信抄送给收件人以外的人,所有的收件人可以在抄送地址处看到此信还抄送给谁
//mail.CC.Add("beilongkechuan@163.com");
//mail.Attachments.Add(new Attachment("D:\\1.wps")); //添加附件
return mail;
}
/// <summary>
/// 发送邮件
/// </summary>
/// <returns></returns>
public bool SendEmail(string tomail)
{
SmtpClient client = new SmtpClient();
//获取或设置用于验证发件人身份的凭据。授权码非密码
client.Credentials = new System.Net.NetworkCredential("你的邮箱", "授权码非密码");
//经过ssl(安全套接层)加密,163邮箱SSL协议端口号为465/994,关闭SSL时端口为25,
//qq邮箱SSL协议端口号为465或587,关闭SSL时端口同样为25,不过用SSL加密后发送邮件都失败,具体原因不知
//client.EnableSsl = true;
client.Port = 25; //端口号
//client.Host = "smtp.qq.com"; //获取或设置用于 SMTP 事务的主机的名称或 IP 地址
client.Host = "smtp.163.com";//使用163的SMTP服务器发送邮件
try
{
client.Send(InitMailMessage(tomail));
return true;
}
catch (System.Net.Mail.SmtpException ex)
{
return false;
}
}
}
Email mail = new Email();
if (mail.SendEmail("836678868@qq.com"))
{
Response.Write("<script language='javascript'> alert('发送成功!')</script>");
}
else
{
Response.Write("<script language='javascript'> alert('发送失败!')</script>");
}
常见问题:
163邮箱发送邮件碰到:System.Net.Mail.SmtpException: 不允许使用邮箱名称。 服务器响应为:authentication is required这个问题我的解决方法是:设置发件邮箱的授权码
提供一个支持ssl发邮件成功的demo, 具体内容见注释
public void SendMailKit(string[] tos)
{
var message = new MimeMessage();
message.From.Add(new MailboxAddress("发件人名称", email));
message.To.Add(new MailboxAddress("收件人名称", to));
message.Subject = "邮件标题"; //邮件标题
var builder = new BodyBuilder
{
//TextBody = "Hey geffzhang<br>DennisDong"//不支持Html
HtmlBody = "Hey geffzhang<br>DennisDong"//支持Html
};
//添加附件
//builder.Attachments.Add($@"{Directory.GetCurrentDirectory()}\1.png");//包含图片附件,或者正文中有图片会被当成垃圾邮件退回,所以不建议放图片内容(跟Mail类库框架无关)
//builder.Attachments.Add($@"{Directory.GetCurrentDirectory()}\ConsoleApp1.exe.config");
message.Body = builder.ToMessageBody();
using (var client = new SmtpClient())
{
client.ServerCertificateValidationCallback = (s, c, h, e) => true;
var mSendMail = email;
var mSendPwd = auth;//163和qq都是授权码,不是邮箱密码
client.Connect("smtp.163.com", 465, true);//网易、QQ支持 25(未加密),465和587(SSL加密)
client.Authenticate(mSendMail, mSendPwd);
try
{
client.Send(message);//发送邮件
client.Disconnect(true);
}
catch (SmtpCommandException ex)
{
Console.WriteLine(ex.ErrorCode);
}
catch (Exception ex)
{
throw ex;
}
}
}