• 使用 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:GitHubTestMailClientNetSmtpClient.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 等。
     
     
  • 相关阅读:
    DMALL刘江峰:生鲜市场具有巨大O2O改造空间
    互联网产品经理能力体系
    Review Board——在线代码审查工具
    Java Dns Cache Manipulator
    Keepalived 双机web服务宕机检测切换系统软件
    weblogic性能调优参考
    spring的ResultSetWrappingSqlRowSet使用rs.getTimestamp取oracle数据库时分秒问题
    oracle ORA-01747(系统保留关键字)user.table.column, table.column 或列说明无效 hibernate映射oracle保留关键字
    javascript模块化编程(AMD规范的加载器)
    oracle定时运行 存储过程
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4036144.html
Copyright © 2020-2023  润新知