zoukankan      html  css  js  c++  java
  • Email

    MailKit帮助类

    https://github.com/jstedfast/MailKit

    https://github.com/jstedfast/MimeKit

    https://www.cnblogs.com/pengze0902/p/6562447.html

    public class EmailHelp
        {
            /// <summary>
            /// Smtp服务器地址
            /// </summary>
            private static readonly string SmtpServer = ConfigurationManager.AppSettings["SmtpServer"];
    
            /// <summary>
            /// Pop服务器地址
            /// </summary>
            private static readonly string PopServer = ConfigurationManager.AppSettings["PopServer"];
    
            /// <summary>
            /// Imap服务器地址
            /// </summary>
            private static readonly string ImapServer = ConfigurationManager.AppSettings["ImapServer"];
    
            /// <summary>
            /// SMTP端口
            /// </summary>
            private static readonly int SmtpPort = int.Parse(ConfigurationManager.AppSettings["SmtpPort"]);
    
            /// <summary>
            /// POP端口
            /// </summary>
            private static readonly int PopPort = int.Parse(ConfigurationManager.AppSettings["PopPort"]);
    
            /// <summary>
            /// IMAP端口
            /// </summary>
            private static readonly int ImapPort = int.Parse(ConfigurationManager.AppSettings["ImapPort"]);
    
            /// <summary>
            /// 邮件发送
            /// </summary>
            /// <param name="mailFromAccount">发送邮箱账号</param>
            /// <param name="mailPassword">发送邮箱密码</param>
            /// <param name="message">邮件</param>
            public static void SendEmali(string mailFromAccount, string mailPassword, MimeMessage message)
            {
                using (var client = new MailKit.Net.Smtp.SmtpClient())
                {
                    client.Connect(SmtpServer, SmtpPort, 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);
                }
            }
    
            /// <summary>
            /// 创建文本消息
            /// </summary>
            /// <param name="fromAddress">发件地址</param>
            /// <param name="toAddressList">收件地址</param>
            /// <param name="title">标题</param>
            /// <param name="content">内容</param>
            /// <param name="IsPostFiles">是否将POST上传文件加为附件</param>
            /// <returns></returns>
            public static MimeMessage CreateTextMessage(MailboxAddress fromAddress, IList<MailboxAddress> toAddressList
                , string title, string content, bool IsPostFiles = false)
            {
                var message = new MimeMessage();
                message.From.Add(fromAddress);
                message.To.AddRange(toAddressList);
                message.Subject = title; //设置消息的主题
    
                var html = new TextPart("html")
                {
                    Text = content,
                };
                var alternative = new Multipart("alternative");
                alternative.Add(html);
    
                var multipart = new Multipart("mixed");
                multipart.Add(alternative);
                if (IsPostFiles)
                {
                    IList<MimePart> multiPartList = GetMimePartList();
                    foreach (var item in multiPartList)
                    {
                        multipart.Add(item);
                    }
                }
    
                message.Body = multipart;
                return message;
            }
    
            /// <summary>
            /// 收邮件
            /// </summary>
            /// <param name="mailFromAccount">发送邮箱账号</param>
            /// <param name="mailPassword">发送邮箱密码</param>
            /// <param name="searchQuery">查询条件</param>
            /// <param name="folderName">文件夹名称</param>
            /// <returns></returns>
            public static IList<IMessageSummary> ReceiveEmail(string mailFromAccount, string mailPassword, string folderName, SearchQuery searchQuery = null)
            {
                //打开收件箱
                var folder = OpenFolder(mailFromAccount, mailPassword, folderName);
    
                //IList<OrderBy> orderByList = new List<OrderBy> { OrderBy.Date };
                //查询所有的邮件
                var uidss = folder.Search(searchQuery);
    
                IList<IMessageSummary> msgList = new List<IMessageSummary>();
                if (uidss.Count > 0)//判断是否查询到邮件
                {
                    //获取邮件头
                    msgList = folder.Fetch(uidss, MessageSummaryItems.UniqueId | MessageSummaryItems.Full);
                }
    
                folder.Close();
                return msgList;
            }
    
    
            /// <summary>
            /// 根据唯一号查询信件
            /// </summary>
            /// <param name="mailFromAccount">邮箱账号</param>
            /// <param name="mailPassword">邮箱密码</param>
            /// <param name="id">唯一号</param>
            /// <param name="folderName">文件夹名称</param>
            /// <returns></returns>
            public static MimeMessage GetEmailByUniqueId(string mailFromAccount, string mailPassword, uint id, string folderName)
            {
                //打开收件箱
                var folder = OpenFolder(mailFromAccount, mailPassword, folderName);
                UniqueId emailUniqueId = new UniqueId(id);
                MimeMessage message = folder.GetMessage(emailUniqueId);
                /*将邮件设为已读*/
                MessageFlags flags = MessageFlags.Seen;
                folder.SetFlags(emailUniqueId, flags, true);
                return message;
            }
    
            /// <summary>
            /// 读取上传的文件
            /// </summary>
            /// <returns></returns>
            public static IList<MimePart> GetMimePartList()
            {
                IList<MimePart> mimePartList = new List<MimePart>();
                var current = HttpContext.Current;
                if (current != null)
                {
                    HttpRequest request = current.Request;
                    HttpFileCollection files = request.Files;
                    int filesCount = files.Count;
                    for (int i = 0; i < filesCount; i++)
                    {
                        HttpPostedFile item = files[i];
                        MimePart attachment = new MimePart(item.ContentType)
                        {
                            ContentObject = new ContentObject(item.InputStream, ContentEncoding.Default),
                            ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
                            ContentTransferEncoding = ContentEncoding.Base64,
                            FileName = item.FileName
                        };
    
                        mimePartList.Add(attachment);
                    }
                }
                return mimePartList;
            }
    
    
            /// <summary>
            /// 打开邮箱文件夹
            /// </summary>
            /// <param name="mailFromAccount">邮箱账号</param>
            /// <param name="mailPassword">邮箱密码</param>
            /// <param name="folderName">文件夹名称(INBOX:收件箱名称)</param>
            /// <returns></returns>
            public static IMailFolder OpenFolder(string mailFromAccount, string mailPassword, string folderName)
            {
                ImapClient client = new ImapClient();
                client.Connect(ImapServer, ImapPort);
                client.Authenticate(mailFromAccount, mailPassword);
                //获取所有文件夹
                //List<IMailFolder> mailFolderList = client.GetFolders(client.PersonalNamespaces[0]).ToList();
    
                var folder = client.GetFolder(folderName);
    
                //打开文件夹并设置为读的方式
                folder.Open(MailKit.FolderAccess.ReadWrite);
                return folder;
            }
    
            /// <summary>
            /// 下载邮件附件
            /// </summary>
            /// <param name="mimePart"></param>
            public static void DownFile(MimePart mimePart)
            {
                HttpContext context = HttpContext.Current;
    
                // 设置编码和附件格式
                context.Response.ContentType = mimePart.ContentType.ToString();
                //context.Response.ContentEncoding = Encoding.UTF8;
    
                context.Response.Charset = "";
                string fileName = HttpUtility.UrlEncode(mimePart.FileName, Encoding.UTF8);
                context.Response.AppendHeader("Content-Disposition",
                    "attachment;filename=" + fileName);
                using (MemoryStream ms = new MemoryStream())
                {
                    mimePart.ContentObject.DecodeTo(ms);
                    ms.Flush();
                    ms.Position = 0;
                    context.Response.BinaryWrite(ms.GetBuffer());
    
                    context.Response.End();
                }
            }
        }
    View Code

    http://www.mimekit.net/

    MailKit正式替换了.NET的SmtpClient

    SmtpClient的文档现已改成:“废弃(“SmtpClient及其相关类型设计很差,我们强烈建议使用https://github.com/jstedfast/MailKithttps://github.com/jstedfast/MimeKit替代。”)”。这是Microsoft有史以来第二次将一个.NET类正式标为被开源软件库替代。

    MailKitMimeKit的创建者是Jeffrey Stedfast,InfoQ曾在2014年采访过他。在当时,它们已被认为是.NET上最全面的MIME和电子邮件库。

    Newtonsoft的JSON.NET是被Microsoft接受的首个重要开源库。JSON.NET已在ASP.NET Web API中广泛使用,并被正式推荐为Web API使用的序列化类,通常可替代JavaScriptSerializer类。但是不同于SmtpClient的是,没有任何一个序列化类因此被标记为废弃。

    client.Inbox.Open (FolderAccess.ReadOnly);
    var uids = client.Inbox.Search (SearchQuery.SubjectContains ("HELLO_"));
    if (uids.Count > 0) {
        var summaries = client.Inbox.Fetch (uids, MessageSummaryItems.Envelope);
        foreach (var summary in summaries) {
            if (summary.Envelope.Subject.StartsWith ("HELLO_"))
                return summary.Envelope.Subject;
        }
    }
    View Code
  • 相关阅读:
    Json Web Token
    logstash 收集 IIS 日志实践
    Lucene Query In Kibana
    autofac 在.net core 与经典asp.net中的差异
    .net core 集成 autofac.
    向量化
    神经网络学习1
    漏斗限流
    正则化(Regularization)
    简单限流
  • 原文地址:https://www.cnblogs.com/zeroone/p/8433575.html
Copyright © 2011-2022 走看看