5

使用 MimeKit 和 MailKit 发送邮件

 3 years ago
source link: https://www.cnblogs.com/shanyou/p/4034298.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

使用 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 = "[email protected]";
        const string mailTo = "[email protected]";
        const string mailFromAccount = "[email protected]";
        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 等。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK