zoukankan      html  css  js  c++  java
  • 使用 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 等。
     
     
  • 相关阅读:
    Power BI for Office 365(八)共享查询
    Power BI for Office 365(七) Power BI站点
    Power BI for Office 365(六)Power Map简介
    Power BI for Office 365(五)Power View第二部分
    Power BI for Office 365(四)Power View第一部分
    Power BI for Office 365(三)Power Pivot
    Power BI for Office 365(二)Power Query
    java 继承、重载、重写与多态
    Android 热修复方案Tinker(一) Application改造
    阿里最新热修复Sophix与QQ超级补丁和Tinker的实现与总结
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4036144.html
Copyright © 2011-2022 走看看