当前位置: 首页 > news >正文

广西网站建设哪家有如何进行关键词分析

广西网站建设哪家有,如何进行关键词分析,手机网站建设可信赖,用pdf怎么做电子书下载网站邮件服务是一般的系统都会拥有和需要的功能#xff0c;但是对于.NET项目来说#xff0c;邮件服务的创建和使用会较为的麻烦。.NET对于邮件功能提供了System.Net.Mail用于创建邮件服务#xff0c;该基础服务提供邮件的基础操作#xff0c;并且使用也较为的简单。对于真正将该…       邮件服务是一般的系统都会拥有和需要的功能但是对于.NET项目来说邮件服务的创建和使用会较为的麻烦。.NET对于邮件功能提供了System.Net.Mail用于创建邮件服务该基础服务提供邮件的基础操作并且使用也较为的简单。对于真正将该功能使用于项目的人就会慢慢发现其中的优缺点甚至有些时候不能忍受其中的问题。在这里介绍一种微软用于替代System.Net.Mail的邮件服务组件MailKit和MimeKit官网地址http://www.mimekit.net/。GitHub地址https://github.com/jstedfast/MimeKit。下面就具体的介绍一下。  一.MailKit和MimeKit基础概述       MailKit组件的支持的客户端类型比较多例如SMTP客户端、POP3客户端、IMAP4客户端。该组件是一个跨平台的Email组件该组件支持.NET 4.0.NET 4.5Xamarin.AndroidXamarin.iOSWindows Phone 8.1等等平台。           MimeKit提供了一个MIME解析器组件具备的解析特性灵活、性能高、很好的处理各种各样的破碎的MIME格式化。MimeKit的性能实际上与GMime相当。      该组件在安全性的还是比较高的处理安全的方式较多SASL认证、支持S / MIME v3.2、支持OpenPGP、支持DKIM签名等等方式。Mailkit组件可以通过CancellationToken取消对应的操作CancellationToken传播应取消操作的通知一个的CancellationToken使线程线程池工作项目之间或取消合作任务的对象。过实例化CancellationTokenSource对象来创建取消令牌该对象管理从其CancellationTokenSource.Token属性检索的取消令牌。然后将取消令牌传递到应该收到取消通知的任意数量的线程任务或操作。令牌不能用于启动取消。     MailKit组件支持异步操作在内部编写的有关I/O异步操作的类。  二.创建基础邮件服务           介绍过MailKit和MimeKit组建的基础信息接下来就介绍一下如何使用两个组件的基本功能在这里我将基本操作做了一个简单的封装一般的项目可以直接引用封装好的类大家可以根据实际的情况对该组件进行扩展。          1.邮件发送基础服务API/// summary    /// 邮件服务API    /// /summary    public static class MailServiceApi    {        /// summary        /// 发送邮件        /// /summary        /// param namemailBodyEntity邮件基础信息/param        /// param namesendServerConfiguration发件人基础信息/param        public static SendResultEntity SendMail(MailBodyEntity mailBodyEntity,            SendServerConfigurationEntity sendServerConfiguration)        {            if (sendServerConfiguration null)            {                throw new ArgumentNullException();            }            if (sendServerConfiguration null)            {                throw new ArgumentNullException();            }            var sendResultEntity new SendResultEntity();            using (var client new SmtpClient(new ProtocolLogger(CreateMailLog())))            {                client.ServerCertificateValidationCallback (s, c, h, e) true;                Connection(mailBodyEntity, sendServerConfiguration, client, sendResultEntity);                if (sendResultEntity.ResultStatus false)                {                    return sendResultEntity;                }                SmtpClientBaseMessage(client);                Authenticate(mailBodyEntity, sendServerConfiguration, client, sendResultEntity);                if (sendResultEntity.ResultStatus false)                {                    return sendResultEntity;                }                Send(mailBodyEntity, sendServerConfiguration, client, sendResultEntity);                if (sendResultEntity.ResultStatus false)                {                    return sendResultEntity;                }                client.Disconnect(true);            }            return sendResultEntity;        }        /// summary        /// 连接服务器        /// /summary        /// param namemailBodyEntity邮件内容/param        /// param namesendServerConfiguration发送配置/param        /// param nameclient客户端对象/param        /// param namesendResultEntity发送结果/param        public static void Connection(MailBodyEntity mailBodyEntity, SendServerConfigurationEntity sendServerConfiguration,            SmtpClient client, SendResultEntity sendResultEntity)        {            try            {                client.Connect(sendServerConfiguration.SmtpHost, sendServerConfiguration.SmtpPort);            }            catch (SmtpCommandException ex)            {                sendResultEntity.ResultInformation $尝试连接时出错:{0} ex.Message;                sendResultEntity.ResultStatus false;            }            catch (SmtpProtocolException ex)            {                sendResultEntity.ResultInformation $尝试连接时的协议错误:{0} ex.Message;                sendResultEntity.ResultStatus false;            }            catch (Exception ex)            {                sendResultEntity.ResultInformation $服务器连接错误:{0} ex.Message;                sendResultEntity.ResultStatus false;            }        }        /// summary        /// 账户认证        /// /summary        /// param namemailBodyEntity邮件内容/param        /// param namesendServerConfiguration发送配置/param        /// param nameclient客户端对象/param        /// param namesendResultEntity发送结果/param        public static void Authenticate(MailBodyEntity mailBodyEntity, SendServerConfigurationEntity sendServerConfiguration,            SmtpClient client, SendResultEntity sendResultEntity)        {            try            {                client.Authenticate(sendServerConfiguration.SenderAccount, sendServerConfiguration.SenderPassword);            }            catch (AuthenticationException ex)            {                sendResultEntity.ResultInformation $无效的用户名或密码:{0} ex.Message;                sendResultEntity.ResultStatus false;            }            catch (SmtpCommandException ex)            {                sendResultEntity.ResultInformation $尝试验证错误:{0} ex.Message;                sendResultEntity.ResultStatus false;            }            catch (SmtpProtocolException ex)            {                sendResultEntity.ResultInformation $尝试验证时的协议错误:{0} ex.Message;                sendResultEntity.ResultStatus false;            }            catch (Exception ex)            {                sendResultEntity.ResultInformation $账户认证错误:{0} ex.Message;                sendResultEntity.ResultStatus false;            }        }        /// summary        /// 发送邮件        /// /summary        /// param namemailBodyEntity邮件内容/param        /// param namesendServerConfiguration发送配置/param        /// param nameclient客户端对象/param        /// param namesendResultEntity发送结果/param        public static void Send(MailBodyEntity mailBodyEntity, SendServerConfigurationEntity sendServerConfiguration,            SmtpClient client, SendResultEntity sendResultEntity)        {            try            {                client.Send(MailMessage.AssemblyMailMessage(mailBodyEntity));            }            catch (SmtpCommandException ex)            {                switch (ex.ErrorCode)                {                    case SmtpErrorCode.RecipientNotAccepted:                        sendResultEntity.ResultInformation $收件人未被接受:{ex.Message};                        break;                    case SmtpErrorCode.SenderNotAccepted:                        sendResultEntity.ResultInformation $发件人未被接受:{ex.Message};                        break;                    case SmtpErrorCode.MessageNotAccepted:                        sendResultEntity.ResultInformation $消息未被接受:{ex.Message};                        break;                }                sendResultEntity.ResultStatus false;            }            catch (SmtpProtocolException ex)            {                sendResultEntity.ResultInformation $发送消息时的协议错误:{ex.Message};                sendResultEntity.ResultStatus false;            }            catch (Exception ex)            {                sendResultEntity.ResultInformation $邮件接收失败:{ex.Message};                sendResultEntity.ResultStatus false;            }        }        /// summary        /// 获取SMTP基础信息        /// /summary        /// param nameclient客户端对象/param        /// returns/returns        public static MailServerInformation SmtpClientBaseMessage(SmtpClient client)        {            var mailServerInformation new MailServerInformation            {                Authentication client.Capabilities.HasFlag(SmtpCapabilities.Authentication),                BinaryMime client.Capabilities.HasFlag(SmtpCapabilities.BinaryMime),                Dsn client.Capabilities.HasFlag(SmtpCapabilities.Dsn),                EightBitMime client.Capabilities.HasFlag(SmtpCapabilities.EightBitMime),                Size client.MaxSize            };            return mailServerInformation;        }        /// summary        /// 创建邮件日志文件        /// /summary        /// returns/returns        public static string CreateMailLog()        {            var logPath AppDomain.CurrentDomain.BaseDirectory /DocumentLog/                 Guid.NewGuid() .txt;            if (File.Exists(logPath)) return logPath;            var fs File.Create(logPath);            fs.Close();            return logPath;        }    }   2.组装邮件消息/// summary    /// 邮件信息    /// /summary    public static class MailMessage    {        /// summary        /// 组装邮件文本/附件邮件信息        /// /summary        /// param namemailBodyEntity邮件消息实体/param        /// returns/returns        public static MimeMessage AssemblyMailMessage(MailBodyEntity mailBodyEntity)        {            if (mailBodyEntity null)            {                throw new ArgumentNullException(nameof(mailBodyEntity));            }            var message new MimeMessage();            //设置邮件基本信息            SetMailBaseMessage(message, mailBodyEntity);            var multipart new Multipart(mixed);            //插入文本消息            if (string.IsNullOrEmpty(mailBodyEntity.MailTextBody) false)            {                var alternative new MultipartAlternative                {                    AssemblyMailTextMessage(mailBodyEntity.MailTextBody, mailBodyEntity.MailBodyType)                 };                multipart.Add(alternative);            }            //插入附件            if (mailBodyEntity.MailFilePath ! null File.Exists(mailBodyEntity.MailFilePath) false)            {                var mimePart AssemblyMailAttachmentMessage(mailBodyEntity.MailFileType, mailBodyEntity.MailFileSubType,                     mailBodyEntity.MailFilePath);                multipart.Add(mimePart);            }            //组合邮件内容            message.Body multipart;            return message;        }        /// summary        /// 设置邮件基础信息        /// /summary        /// param nameminMessag/param        /// param namemailBodyEntity/param        /// returns/returns        public static MimeMessage SetMailBaseMessage(MimeMessage minMessag, MailBodyEntity mailBodyEntity)        {            if (minMessag null)            {                throw new ArgumentNullException();            }            if (mailBodyEntity null)            {                throw new ArgumentNullException();            }            //插入发件人            minMessag.From.Add(new MailboxAddress(mailBodyEntity.Sender, mailBodyEntity.SenderAddress));            //插入收件人            foreach (var recipients in mailBodyEntity.Recipients)            {                minMessag.To.Add(new MailboxAddress(recipients));            }            //插入抄送人            foreach (var cC in mailBodyEntity.Cc)            {                minMessag.Cc.Add(new MailboxAddress(cC));            }            //插入主题            minMessag.Subject mailBodyEntity.Subject;            return minMessag;        }        /// summary        /// 组装邮件文本信息        /// /summary        /// param namemailBody邮件文本内容/param        /// param nametextPartType邮件文本类型(plain,html,rtf,xml)/param        /// returns/returns        public static TextPart AssemblyMailTextMessage(string mailBody, string textPartType)        {            if (string.IsNullOrEmpty(mailBody))            {                throw new ArgumentNullException();            }            if (string.IsNullOrEmpty(textPartType))            {                throw new ArgumentNullException();            }            var textBody new TextPart(textPartType)            {                Text mailBody            };            return textBody;        }        /// summary        /// 组装邮件附件信息        /// /summary        /// param namefileAttachmentType附件类型(image,application)/param        /// param namefileAttachmentSubType附件子类型 /param        /// param namefileAttachmentPath附件路径/param        /// returns/returns        public static MimePart AssemblyMailAttachmentMessage(string fileAttachmentType, string fileAttachmentSubType, string fileAttachmentPath)        {            if (string.IsNullOrEmpty(fileAttachmentSubType))            {                throw new ArgumentNullException();            }            if (string.IsNullOrEmpty(fileAttachmentType))            {                throw new ArgumentNullException();            }            if (string.IsNullOrEmpty(fileAttachmentPath))            {                throw new ArgumentNullException();            }            var attachment new MimePart(fileAttachmentType, fileAttachmentSubType)            {                Content new MimeContent(File.OpenRead(fileAttachmentPath)),                ContentDisposition new ContentDisposition(ContentDisposition.Attachment),                ContentTransferEncoding ContentEncoding.Base64,                FileName Path.GetFileName(fileAttachmentPath)            };            return attachment;        }    }   3.邮件基础服务实体/// summary    /// 邮件内容实体    /// /summary    public class MailBodyEntity    {        /// summary        /// 邮件文本内容        /// /summary        public string MailTextBody { get; set; }        /// summary        /// 邮件内容类型        /// /summary        public string MailBodyType { get; set; }        /// summary        /// 邮件附件文件类型        /// /summary        public string MailFileType { get; set; }        /// summary        /// 邮件附件文件子类型        /// /summary        public string MailFileSubType { get; set; }        /// summary        /// 邮件附件文件路径        /// /summary        public string MailFilePath { get; set; }        /// summary        /// 收件人        /// /summary        public Liststring Recipients { get; set; }        /// summary        /// 抄送        /// /summary        public Liststring Cc { get; set; }        /// summary        /// 发件人        /// /summary        public string Sender { get; set; }        /// summary        /// 发件人地址        /// /summary        public string SenderAddress { get; set; }        /// summary        /// 邮件主题        /// /summary        public string Subject { get; set; }        /// summary        /// 邮件内容        /// /summary        public string Body { get; set; }    }    /// summary    /// 邮件服务器基础信息    /// /summary    public class MailServerInformation    {        /// summary        /// SMTP服务器支持SASL机制类型        /// /summary        public bool Authentication { get; set; }        /// summary        /// SMTP服务器对消息的大小        /// /summary        public uint Size { get; set; }        /// summary        /// SMTP服务器支持传递状态通知        /// /summary        public bool Dsn { get; set; }        /// summary        /// SMTP服务器支持Content-Transfer-Encoding        /// /summary        public bool EightBitMime { get; set; }        /// summary        /// SMTP服务器支持Content-Transfer-Encoding        /// /summary        public bool BinaryMime { get; set; }        /// summary        /// SMTP服务器在消息头中支持UTF-8        /// /summary        public string UTF8 { get; set; }    }    /// summary    /// 邮件发送结果    /// /summary    public class SendResultEntity    {        /// summary        /// 结果信息        /// /summary        public string ResultInformation { get; set; } 发送成功;        /// summary        /// 结果状态        /// /summary        public bool ResultStatus { get; set; } true;    }    /// summary    /// 邮件发送服务器配置    /// /summary    public class SendServerConfigurationEntity    {        /// summary        /// 邮箱SMTP服务器地址        /// /summary        public string SmtpHost { get; set; }        /// summary        /// 邮箱SMTP服务器端口        /// /summary        public int SmtpPort { get; set; }        /// summary        /// 是否启用IsSsl        /// /summary        public bool IsSsl { get; set; }        /// summary        /// 邮件编码        /// /summary        public string MailEncoding { get; set; }        /// summary        /// 发件人账号        /// /summary        public string SenderAccount { get; set; }        /// summary        /// 发件人密码        /// /summary        public string SenderPassword { get; set; }    }上面提供了借助MailKit组建创建发送邮件服务分别是创建邮件服务器连接组装邮件基础信息邮件基础实体。发送邮件的基础服务比较的多下面介绍一下邮件的接收。/// summary    /// 跟投邮件服务API    /// /summary    public static class ReceiveEmailServiceApi    {        /// summary        /// 设置发件人信息        /// /summary        /// returns/returns        public static SendServerConfigurationEntity SetSendMessage()        {            var sendServerConfiguration new SendServerConfigurationEntity            {                SmtpHost ConfigurationManager.AppSettings[SmtpServer],                SmtpPort int.Parse(ConfigurationManager.AppSettings[SmtpPort]),                IsSsl Convert.ToBoolean(ConfigurationManager.AppSettings[IsSsl]),                MailEncoding ConfigurationManager.AppSettings[MailEncoding],                SenderAccount ConfigurationManager.AppSettings[SenderAccount],                SenderPassword ConfigurationManager.AppSettings[SenderPassword]            };            return sendServerConfiguration;        }        /// summary        /// 接收邮件        /// /summary        public static void ReceiveEmail()        {            var sendServerConfiguration SetSendMessage();            if (sendServerConfiguration null)            {                throw new ArgumentNullException();            }            using (var client new ImapClient(new ProtocolLogger(CreateMailLog())))            {                client.Connect(sendServerConfiguration.SmtpHost, sendServerConfiguration.SmtpPort,                    SecureSocketOptions.SslOnConnect);                client.Authenticate(sendServerConfiguration.SenderAccount, sendServerConfiguration.SenderPassword);                client.Inbox.Open(FolderAccess.ReadOnly);                var uids client.Inbox.Search(SearchQuery.All);                foreach (var uid in uids)                {                    var message client.Inbox.GetMessage(uid);                    message.WriteTo(${uid}.eml);                }                client.Disconnect(true);            }        }        /// summary        /// 下载邮件内容        /// /summary        public static void DownloadBodyParts()        {            var sendServerConfiguration SetSendMessage();            using (var client new ImapClient())            {                client.Connect(sendServerConfiguration.SmtpHost, sendServerConfiguration.SmtpPort,                    SecureSocketOptions.SslOnConnect);                client.Authenticate(sendServerConfiguration.SenderAccount, sendServerConfiguration.SenderPassword);                client.Inbox.Open(FolderAccess.ReadOnly);                // 搜索Subject标题包含“MimeKit”或“MailKit”的邮件                var query SearchQuery.SubjectContains(MimeKit).Or(SearchQuery.SubjectContains(MailKit));                var uids client.Inbox.Search(query);                // 获取搜索结果的摘要信息我们需要UID和BODYSTRUCTURE每条消息以便我们可以提取文本正文和附件                var items client.Inbox.Fetch(uids, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);                foreach (var item in items)                {                    // 确定一个目录来保存内容                    var directory Path.Combine(AppDomain.CurrentDomain.BaseDirectory /MailBody, item.UniqueId.ToString());                    Directory.CreateDirectory(directory);                    // IMessageSummary.TextBody是一个便利的属性可以为我们找到“文本/纯文本”的正文部分                    var bodyPart item.TextBody;                    // 下载text / plain正文部分                    var body (TextPart) client.Inbox.GetBodyPart(item.UniqueId, bodyPart);                    // TextPart.Text是一个便利的属性它解码内容并将结果转换为我们的字符串                    var text body.Text;                    File.WriteAllText(Path.Combine(directory, body.txt), text);                    // 现在遍历所有附件并将其保存到磁盘                    foreach (var attachment in item.Attachments)                    {                        // 像我们对内容所做的那样下载附件                        var entity client.Inbox.GetBodyPart(item.UniqueId, attachment);                        // 附件可以是message / rfc822部件或常规MIME部件                        var messagePart entity as MessagePart;                        if (messagePart ! null)                        {                            var rfc822 messagePart;                            var path Path.Combine(directory, attachment.PartSpecifier .eml);                            rfc822.Message.WriteTo(path);                        }                        else                        {                            var part (MimePart) entity;                            // 注意这可能是空的但大多数会指定一个文件名                            var fileName part.FileName;                            var path Path.Combine(directory, fileName);                            // decode and save the content to a file                            using (var stream File.Create(path))                                part.Content.DecodeTo(stream);                        }                    }                }                client.Disconnect(true);            }        }        /// summary        /// 创建邮件日志文件        /// /summary        /// returns/returns        public static string CreateMailLog()        {            var logPath AppDomain.CurrentDomain.BaseDirectory /DocumentLog/                 DateTime.Now.ToUniversalTime().ToString(CultureInfo.InvariantCulture) .txt;            if (File.Exists(logPath)) return logPath;            var fs File.Create(logPath);            fs.Close();            return logPath;        }    }面只是简单的介绍了邮件的接收如果需要更加深入的了解功能可以进一步对组件源码进行解析该组件的文档为较为的丰富。  三.组件使用感悟            MailKit和MimeKit组件在项目的使用中较为的便捷基本包含了所有的基础邮件服务操作。组件提供的SmtpClient类提供的功能很丰富例如连接邮件服务器邮件账户认证组装邮件消息获取邮件服务器配置信息等等方法的提供可以让我们在项目中快速的获取邮件服务的所有信息。           使用过邮件功能的项目 都会有困扰客户端与邮件服务器的连接是否成功以及邮件是否发送成功状态没有办法很快的获取只能根据邮件服务器返回的一场状态进行判断。但是MailKit提供对应的方法和异常类对邮件服务器返回的异常信息进行解析客户端可以根据这些异常类获取邮件状态。           MailKit组件的提供了ProtocolLogger类该类用于记录SMTP操作基础信息该类作用为记录邮件服务日志。在邮件发送完毕后需要及时的关闭连接调用Disconnect(true)方法。原文https://www.cnblogs.com/pengze0902/p/8519715.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
http://www.yutouwan.com/news/285106/

相关文章:

  • 国内摄影作品网站网站建站前seo注意
  • 用.net core 做网站动画网站建设
  • 网站建设需要申请经营范围成都市建设学校网站
  • wordpress仿站教程百度云58徐州网站建设
  • 深圳开发网站的公司哪家好网站流量多少
  • 无锡建设主管部门网站嘉峪关建设厅官方网站
  • 兰州产品营销网站建设网站备案包括
  • ps 制作网站app编程入门教程
  • 哪些是 joomla做的网站定制网站建设服务公司
  • 做签名的网站广州营销优化
  • 怎么做外贸个人网站网络优化工程师为什么都说坑人
  • 长春企业网站模板建站承德市住房和城乡建设局网站
  • 网站建设公司厦门有哪些网站建设经营特色
  • 云主机建设网站网站建设管理指导意见
  • 网站部署到服务器学php搞网站开发
  • 做网站域名是赠送的吗深圳做微信网站设计
  • 视频网站亏钱为什么还要继续做湖南seo优化公司
  • 网站建设创作思路怎么写订阅号可以做网站吗
  • 物流网站建设 市场分析淄博微信小程序代理
  • 企业网站建立流程的第一步是什么中小企业网站建设济南兴田德润o厉害吗
  • pageadmin做的网站的域名必须要备案吗专业制作视频的软件
  • 手机网站建设文章深圳标本制作
  • 哪些行业没有做网站百度首页的ip地址
  • 沈阳做企业网站做一个小程序需要多少钱?
  • 色弱做网站黄骅港天气预报
  • 义乌高端网站设计品牌上海网站备案要求吗
  • 大学生网站设计论文3000字网址二维码在线生成
  • 营销软文范例大全300网站优化需要做什么
  • 可以做问卷调查的网站兰州网络推广方案
  • 谷歌搜索关键词排名wordpress cdn优化