使用 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 等。
时间: 2024-10-13 00:17:22

使用 MimeKit 和 MailKit 发送邮件的相关文章

asp.net core 使用MailKit 发送邮件。

使用MailKit需要安装 发送邮件需要开启smtp,我是用的QQ.可以参考http://jingyan.baidu.com/article/0f5fb099dffe7c6d8334ea31.html var message = new MimeMessage(); string Email = "接受者邮箱"; message.From.Add(new MailboxAddress(发送者)); message.To.Add(new MailboxAddress(Email)); m

使用MailKit发送邮件

.NET Core 使用MailKit发送电子邮件 Github:关于 MailKit 很多有经验的.NET老程序员可能会说,发邮件有什么难的,十几年前我们就能用.NET Framework自带的SmtpClient发邮件了,并且.NET Core也能用.为啥还要写这篇文章? 但是,万物皆有始有终,最近我突然发现,SmtpClient 已经被微软标记为弃用: 并且微软官方钦点了一个继任者:MailKit,https://github.com/jstedfast/MailKit 这是一个基于Mim

使用MailKit收发邮件

.Net BCL库中对于邮件的支持只有SmtpClient一个,它只能进行简单的邮件的发送操作,并且不支持POP3和SMTP,无法接收邮件,用起来有诸多不便. 今天看到园子里有文章(使用 MimeKit 和 MailKit 发送邮件)介绍了一个新库MailKit.看了一下,它对SMTP, POP3, and IMAP都有良好的支持,以后有用到的地方可以一试. ? ?

创建基于MailKit和MimeKit的.NET基础邮件服务

邮件服务是一般的系统都会拥有和需要的功能,但是对于.NET项目来说,邮件服务的创建和使用会较为的麻烦..NET对于邮件功能提供了System.Net.Mail用于创建邮件服务,该基础服务提供邮件的基础操作,并且使用也较为的简单.对于真正将该功能使用于项目的人,就会慢慢发现其中的优缺点,甚至有些时候不能忍受其中的问题.在这里介绍一种微软用于替代System.Net.Mail的邮件服务组件MailKit和MimeKit,官网地址:http://www.mimekit.net/.GitHub地址:ht

MailKit和MimeKit 收发邮件

新建项目,引用MailKit和MimeKit NuGet包 using CommonTool.MailKit; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ProjectDemo.ConsoleApp { class Program { static void Main(string[] a

邮件发送已经说烂了的功能

我相信每一个系统,都会有邮件发送的场景,而且这种使用场景有很多,比如登入一个系统,忘记密码,那就要通过忘记密码功能,检查你注册邮件,然后发一封重设密码的邮件给你(当然现在可能通过手机验证码处理的方案多). 到今天为止我一直以为,.NET发送邮件组件有很多,我之前了解的有.Net 自带的System.Net.Mail,JMail,MimeKit&MailKit. 今天我用度娘搜索了一下“发送邮件 组件”,搜索结果大概汇总一下,.Net 自带的,CDO 组件,JMail 组件 就这三个.没有搜索到 

.NET Core 实现定时抓取博客园首页文章信息并发送到邮箱

前言 大家好,我是晓晨.许久没有更新博客了,今天给大家带来一篇干货型文章,一个每隔5分钟抓取博客园首页文章信息并在第二天的上午9点发送到你的邮箱的小工具.比如我在2018年2月14日,9点来到公司我就会收到一封邮件,是2018年2月13日的博客园首页的文章信息.写这个小工具的初衷是,一直有看博客的习惯,但是最近由于各种原因吧,可能几天都不会看一下博客,要是中途错过了什么好文可是十分心疼的哈哈.所以做了个工具,每天归档发到邮箱,妈妈再也不会担心我错过好的文章了.为什么只抓取首页?因为博客园首页文章

解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题

在博问中(.net core怎么实现邮件发送)知道了MailKit无法使用阿里云邮件推送服务发送邮件的问题,自已实测也遇到同样的问题,而用自己搭建的邮件服务器没这个问题. 于是,向阿里云提交了工单...在提供了TCP抓包数据后,阿里云技术专员发现了问题所在:在认证通过后,MailKit发送了EHLO命令,然后才发送MAIL FROM命令,服务器在收到EHLO时会重置客户端的认证状态,所以后续的命令过来时,服务器认为客户端没有认证,于是报错“503 Bad sequence of commands

跨平台的.NET邮件协议MailKit组件解析

发起的.NET Core开源组织号召,进展的速度是我自己也没有想到的,很多园友都积极参与(虽然有些人诚心砸场子,要是以我以前的宝脾气,这会应该被我打住院了吧,不过幸好是少数,做一件事总有人说好,也有人说是用武汉话说"闹眼子"),.NET社区不是没有乐于共享知识的人,只是没有一个完整和良好的生态环境,总之希望国内的.NET发展越来越强大.我在这里想到一句话"我们希望自己可以做巨浪,但我们也甘愿做巨浪来袭前的小浪". 上面扯淡完毕(我这人干正事前,都要将一些扯淡的话,这