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 = @"

Hey geffzhang

不好意思,我在测试程序,刚才把QQ号写错了,Sorry!

-- Geffzhang
"

};

// 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 = @"

Hey geffzhang

不好意思,我在测试程序,刚才把QQ号写错了,Sorry!

-- Geffzhang
";

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

查看原文