使用 MimeKit 和 MailKit 发送邮件
MimeKit 给.NET 社区带来了一流的 MIME 解析器,它能处理复杂的各种Mime, 性能好。而且开箱即用支持 S/MIME 和 PGP。MimeKit 和 MailKit 支持最新的国际化的电子邮件标准,是.NET 中为一个支持完整支持这些标准电子邮件库,最近正式发布了1.0版本。如果你想做所有与的电子邮件相关的事情,看看 MimeKit 和 MailKit。我保证你不会失望,它支持.NET/Mono的所有平台,包括移动电话、平板等。
使用方法很简单和.NET的SmtpClient 差不多,不过比它优雅多了,下面show个代码:
using MimeKit; using System; using System.Collections.Generic; using System.Linq; using System.Net.Mail; using System.Text; using System.Threading.Tasks; using MailKit.Net.Smtp; using System.IO; namespace NetSmtpClient { class Program { const string mailFrom = "xxxx@hotmail.com"; const string mailTo = "xxxx@qq.com"; const string mailFromAccount = "xxxx@hotmail.com"; const string mailPassword = "xxxx"; const string path = @"E:\GitHub\TestMailClient\NetSmtpClient\.NETFoundation.png"; static void Main(string[] args) { TestSmtpClient(); TestMailKit(); } private static void TestMailKit() { var message = new MimeMessage(); message.From.Add(new MailboxAddress("geffzhang", mailFrom)); message.To.Add(new MailboxAddress("geffzhang", mailTo)); message.Subject = string.Format("C#自动发送邮件测试 From geffzhang TO {0}", mailTo); var plain = new TextPart("plain") { Text = @"不好意思,我在测试程序,刚才把QQ号写错了,Sorry!" }; var html = new TextPart("html") { Text = @"<p>Hey geffzhang<br> <p>不好意思,我在测试程序,刚才把QQ号写错了,Sorry!<br> <p>-- Geffzhang<br>" }; // create an image attachment for the file located at path var attachment = new MimePart("image", "png") { ContentObject = new ContentObject(File.OpenRead(path), ContentEncoding.Default), ContentDisposition = new ContentDisposition(ContentDisposition.Attachment), ContentTransferEncoding = ContentEncoding.Base64, FileName = Path.GetFileName(path) }; var alternative = new Multipart("alternative"); alternative.Add(plain); alternative.Add(html); // now create the multipart/mixed container to hold the message text and the // image attachment var multipart = new Multipart("mixed"); multipart.Add(alternative); multipart.Add(attachment); message.Body = multipart; using (var client = new MailKit.Net.Smtp.SmtpClient()) { client.Connect("smtp.live.com", 587, false); // Note: since we don't have an OAuth2 token, disable // the XOAUTH2 authentication mechanism. client.AuthenticationMechanisms.Remove("XOAUTH2"); // Note: only needed if the SMTP server requires authentication client.Authenticate(mailFromAccount, mailPassword); client.Send(message); client.Disconnect(true); } } private static void TestSmtpClient() { MailMessage mymail = new MailMessage(); mymail.From = new System.Net.Mail.MailAddress(mailFrom); mymail.To.Add(mailTo); mymail.Subject = string.Format("C#自动发送邮件测试 From geffzhang TO {0}",mailTo); mymail.Body = @"<p>Hey geffzhang<br><p>不好意思,我在测试程序,刚才把QQ号写错了,Sorry!<br><p>-- Geffzhang<br>"; mymail.IsBodyHtml = true; mymail.Attachments.Add(new Attachment(path)); System.Net.Mail.SmtpClient smtpclient = new System.Net.Mail.SmtpClient(); smtpclient.Port = 587; smtpclient.UseDefaultCredentials = false; smtpclient.DeliveryMethod = SmtpDeliveryMethod.Network; smtpclient.Host = "smtp.live.com"; smtpclient.EnableSsl = true; smtpclient.Credentials = new System.Net.NetworkCredential(mailFromAccount, mailPassword); try { smtpclient.Send(mymail); Console.WriteLine("发送成功"); } catch (Exception ex) { Console.WriteLine("发送邮件失败.请检查是否为qq邮箱,并且没有被防护软件拦截" + ex); } } } }
上面代码是smtp发送代码,这个库还支持POP3, 和 IMAP 等。
欢迎大家扫描下面二维码成为我的客户,扶你上云