首页 > 代码库 > 使用 MimeKit 和 MailKit 发送邮件

使用 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 等。

使用 MimeKit 和 MailKit 发送邮件