zoukankan      html  css  js  c++  java
  • mailkit库收发邮件

    mailkit库用于收发邮件.这个库可以替代C#自带的发邮件库

    环境  W10 / VS2017CMMT / MailKit version="2.0.3" "net46"  / MimeKit version="2.0.3" "net46"

    mailkit使用nuget下载或者到GIT  https://github.com/jstedfast/MailKit

    邮件收发是与邮件服务器交互,原理参考 https://www.cnblogs.com/ysocean/p/7652934.html

    帮助类参考部份mailkit源码.可简单实现发邮件与收邮件.在处理大附件,草稿保存,时未找到解决办法

    发送邮件

    MyMailKit mymail = new MyMailKit();
    // 设置发件人
    mymail.CfgSendEmail(1);
    // 添加1个或多个收件人
    mymail.AddTo("xxx@qq.com", "收件人XXX");
    mymail.AddTo("yyy@163.com");
    // 添加1个或多个附件
    MemoryStream ms = new MemoryStream();
    using (FileStream fs = new FileStream("123.doc", FileMode.Open))
    {
        fs.CopyTo(ms);
    }
    mymail.AddAttachment(ms, "123.doc", ms.Length);
    // 发送邮件
    mymail.SendEmail();
    

    接收邮件

    // 查看一个文件夹的邮件
    MyMailKit mymail = new MyMailKit();
    // 收邮件配置
    mymail.CfgIMAP(1);
    // 获取文件夹的所有邮件(3个月内的)
    var list = mymail.GetEmailByFolder(folder);
    if (list == null)
    {
       // 没找到邮件出错信息提示
       mymail.ErrMsg;
       return;
    }
    foreach (var item in list)
    {
       // 收件人
       StringBuilder tolist = new StringBuilder();
       foreach (var to in item.ToList)
       { 
          tolist.Append($"{to.Name}<{to.Address}>,");
       }
       //
       item.UniqueId; // 邮件标识
       item.IsRead;// 是否已读
       item.Count;// 附件数
       item.IsAnswered;// 是否回复
       item.Name;// 发件人
       item.Address;// 发件人邮箱
       item.Subject;// 标题
       item.Date.ToString("yyyy-MM-dd");// 日期
    }
    // 显示邮件详细
    var emdetail = mymail.GetEmailByUniqueId(uint.Parse(id), folder);
    // 设置删除邮件
    List uids = new List();
    uids.Add(id);
    mymail.SetFlag(uids, 8, folder);
    
      1  public class MyMailKit
      2     {
      3         #region 属性 账户配置信息等
      4         /// <summary>
      5         ///  发件人邮箱地址
      6         /// </summary>
      7         private string fromEmail = null;
      8         /// <summary>
      9         ///  发件人别名
     10         /// </summary>
     11         private string fromAlias = null;
     12         /// <summary>
     13         /// 发件人邮箱密码(或授权码)
     14         /// </summary>
     15         private string fromPwd = null;
     16         /// <summary>
     17         /// SMTP服务器地址
     18         /// </summary>
     19         private string serverSMTP = null;
     20         private int portSMTP = 0;
     21         /// <summary>
     22         /// IMAP服务器地址
     23         /// </summary>
     24         private string serverIMAP = null;
     25         private int portIMAP = 0;
     26         /// <summary>
     27         /// POP服务器地址
     28         /// </summary>
     29         private string serverPOP = null;
     30         private int portPOP = 0;
     31         /// <summary>
     32         /// 邮件账户(收邮件时登录账户)
     33         /// </summary>
     34         private string account = null;
     35         /// <summary>
     36         /// 邮件账户密码(收邮件时登录密码)
     37         /// </summary>
     38         private string pwd = null;
     39         #endregion
     40 
     41         #region 属性 邮件主体内容 内容块容器
     42 
     43         /// <summary>
     44         /// 邮件对象
     45         /// </summary>
     46         private MimeMessage message = null;
     47         /// <summary>
     48         /// 邮件内容块的容器 放置邮件正文,附件等内容块
     49         /// </summary>
     50         private Multipart mimeparts = null;
     51         /// <summary>
     52         /// 收件人列表
     53         /// </summary>
     54         private List<MailboxAddress> toList = null;
     55         /// <summary>
     56         /// 附件列表
     57         /// </summary>
     58         private List<MimePart> attaList = null;
     59         #endregion
     60 
     61         /// <summary>
     62         /// 操作异常信息
     63         /// </summary>
     64         public string ErrMsg { get; private set; }
     65 
     66         #region 制作与发送邮件
     67 
     68         /// <summary>
     69         /// 添加一个收件人
     70         /// 在制作邮件方法之前调用
     71         /// </summary>
     72         /// <param name="address">收件人地址</param>
     73         /// <param name="name"></param>
     74         public void AddTo(string address, string name = null)
     75         {
     76             if (this.toList == null)
     77                 this.toList = new List<MailboxAddress>();
     78             if (string.IsNullOrWhiteSpace(name))
     79                 name = address.Substring(0, address.IndexOf('@'));
     80             this.toList.Add(new MailboxAddress(name, address));
     81         }
     82 
     83         /// <summary>
     84         /// 添加一个附件
     85         /// 在制作邮件方法之前调用
     86         /// </summary>
     87         /// <param name="atta">附件流</param>
     88         /// <param name="name">附件名字</param>
     89         /// <param name="size">附件大小(K)</param>
     90         public void AddAttachment(Stream atta, string name, long size = 0)
     91         {
     92             try
     93             {
     94                 if (this.attaList == null)
     95                     this.attaList = new List<MimePart>();
     96                 // 附件内容块
     97                 MimePart attapart = new MimePart();
     98                 attapart.Content = new MimeContent(atta);
     99 
    100                 // 内容描述为附件
    101                 attapart.ContentDisposition = new ContentDisposition(ContentDisposition.Attachment);
    102 
    103                 // 附件名字设置,如果名字有中文也没关系
    104                 attapart.ContentDisposition.FileName = name;
    105                 // 大小设置
    106                 if (size > 0)
    107                     attapart.ContentDisposition.Size = size;
    108 
    109                 // 采用base64编码传输
    110                 attapart.ContentTransferEncoding = ContentEncoding.Base64;
    111 
    112                 //
    113                 this.attaList.Add(attapart);
    114             }
    115             catch (Exception e)
    116             {
    117                 ErrMsg = $"添加附件异常:{e.ToString()} [{e.Message}]";
    118             }
    119         }
    120 
    121         /// <summary>
    122         /// 制作一封邮件
    123         /// 调用此方法之前,先调用邮件配置初始化方法和添加收件人,添加附件方法
    124         /// </summary>
    125         /// <param name="subject">邮件主题(标题)</param>
    126         /// <param name="body">邮件正文(内容)</param>
    127         /// <param name="ishtml">正文是否为HTML格式,纯文本格式=false</param>
    128         public void MakeEmail(string subject, string body, bool ishtml = true)
    129         {
    130             try
    131             {
    132                 // 邮件类新实例
    133                 message = new MimeMessage();
    134 
    135                 // 设置邮件主题
    136                 message.Subject = subject;
    137 
    138                 // 设置发件人信息
    139                 message.From.Add(new MailboxAddress(fromAlias, fromEmail));
    140 
    141                 // 设置收件人信息
    142                 message.To.AddRange(this.toList);
    143 
    144                 // 设置邮件正文
    145                 var content = new TextPart(ishtml ? "html" : "plain");
    146                 content.SetText(Encoding.UTF8, body);
    147 
    148                 // 建立内容块容器,将内容或附件等添加到其中 MimeEntity是各种类型内容的基类
    149                 mimeparts = new Multipart("mixed");
    150                 mimeparts.Add(content);
    151                 // 附件
    152                 if (this.attaList != null)
    153                 {
    154                     foreach (var atta in this.attaList)
    155                     {
    156                         mimeparts.Add(atta);
    157                     }
    158                 }
    159 
    160                 // 将内容块容器设置到邮件的内容.到此已经填好邮件实体的主要属性
    161                 message.Body = mimeparts;
    162             }
    163             catch (Exception e)
    164             {
    165                 ErrMsg = $"制作邮件异常:{e.ToString()} [{e.Message}]";
    166             }
    167         }
    168 
    169         /// <summary>
    170         /// 设置此邮件是对指定邮件的回复(这是一封回复邮件)
    171         /// 在调用制作邮件方法之后调用,在发送前调用.需要调用收件配置方法CfgIMAP()
    172         /// </summary>
    173         /// <param name="uniqueid">被回复邮件唯一标识</param>
    174         /// <param name="folderName">被回复邮件文件夹</param>
    175         public void SetReplyTo(uint uniqueid, string folderName = null)
    176         {
    177             try
    178             {
    179                 // 被回复的邮件
    180                 MimeMessage remail;
    181                 // 查找这个被回复的邮件,设置回复状态
    182                 using (var client = ConnectIMAP())
    183                 {
    184                     if (folderName == null)
    185                         folderName = client.Inbox.Name;
    186                     var emailUniqueId = new UniqueId(uniqueid);
    187                     var folder = client.GetFolder(folderName);
    188                     folder.Open(FolderAccess.ReadWrite);
    189 
    190                     remail = folder.GetMessage(emailUniqueId);
    191                     folder.AddFlags(emailUniqueId, MessageFlags.Answered, true);
    192                     folder.Close();
    193                     client.Disconnect(true);
    194                 }
    195                 // construct the In-Reply-To and References headers
    196                 if (!string.IsNullOrEmpty(remail.MessageId))
    197                 {
    198                     // 设置此邮件是对这个MESSAGEID的邮件的回复
    199                     message.InReplyTo = remail.MessageId;
    200                     // 此邮件的"对其它消息"的引用属性设为这个邮件的引用属性
    201                     foreach (var id in remail.References)
    202                         message.References.Add(id);
    203                     message.References.Add(remail.MessageId);
    204                 }
    205                 // 回复邮件主题前面加RE:
    206                 if (!message.Subject.StartsWith("RE:", StringComparison.OrdinalIgnoreCase))
    207                     message.Subject = "RE:" + message.Subject;
    208             }
    209             catch (Exception e)
    210             {
    211                 ErrMsg = $"设置为回复邮件异常:{e.ToString()} [{e.Message}]";
    212             }
    213         }
    214 
    215         /// <summary>
    216         /// 设置
    217         /// </summary>
    218         /// <param name="uniqueid"></param>
    219         /// <param name="folderName"></param>
    220         //public void SetForWard(uint uniqueid, string folderName = null)
    221         //{
    222 
    223         //}
    224 
    225         /// <summary>
    226         /// 发送一个邮件
    227         /// 调用此方法之前,请先调用建立邮件的方法MakeMessage()
    228         /// </summary>
    229         public bool SendEmail()
    230         {
    231             try
    232             {
    233                 // 建立发件服务客户端
    234                 using (var client = new SmtpClient())
    235                 {
    236                     // SMTP服务器
    237                     client.Connect(serverSMTP, portSMTP);
    238 
    239                     // 登录
    240                     client.Authenticate(fromEmail, fromPwd);
    241 
    242                     // 发邮件
    243                     client.Send(message);
    244 
    245                     // 关闭连接
    246                     client.Disconnect(true);
    247                     return true;
    248                 }
    249             }
    250             catch (Exception e)
    251             {
    252                 ErrMsg = $"发送邮件异常:{e.ToString()} [{e.Message}]";
    253                 return false;
    254             }
    255         }
    256 
    257         #endregion
    258 
    259         #region 接收与处理邮件
    260 
    261         /// <summary>
    262         /// 连接到IMAP服务器        
    263         /// </summary>
    264         private ImapClient ConnectIMAP()
    265         {
    266             try
    267             {
    268                 ImapClient client = new ImapClient();
    269                 client.Connect(serverIMAP, portIMAP);
    270                 client.Authenticate(account, pwd);
    271 
    272                 /**********************************************************************/
    273                 // 网易126 163相关邮箱时,要用这两句话,表明客户端身份.在连接后调用.否则无法登录邮箱.
    274                 var clientImplementation = new ImapImplementation
    275                 {
    276                     Name = "MeSince",
    277                     Version = "2.0"
    278                 };
    279                 var serverImplementation = client.Identify(clientImplementation);
    280                 /*********************************************************************/
    281 
    282                 return client;
    283             }
    284             catch (Exception e)
    285             {
    286                 ErrMsg = $"连接到IMAP服务器异常:{e.ToString()} [{e.Message}]";
    287                 return null;
    288             }
    289         }
    290 
    291         /// <summary>
    292         /// 获取邮箱的所有文件夹列表
    293         /// 调用前先调用配置方法CfgIMAP()
    294         /// </summary>
    295         public EmailViewM GetFolders()
    296         {
    297             try
    298             {
    299                 using (var client = ConnectIMAP())
    300                 {
    301                     List<IMailFolder> mailFolderList = client.GetFolders(client.PersonalNamespaces[0]).ToList();
    302                     var entity = FillEntity(null, null, mailFolderList.ToArray());
    303                     client.Disconnect(true);
    304                     //
    305                     return entity;
    306                 }
    307             }
    308             catch (Exception e)
    309             {
    310                 ErrMsg = $"获取邮箱的所有文件夹异常:{e.ToString()} [{e.Message}]";
    311                 return null;
    312             }
    313         }
    314 
    315         /// <summary>
    316         /// 根据唯一标识和文件夹名,获取单个邮件
    317         /// </summary>
    318         /// <param name="folderName"></param>
    319         /// <returns></returns>
    320         public EmailViewM GetEmailByUid(uint uniqueid, string folderName = null)
    321         {
    322             try
    323             {
    324                 using (ImapClient client = ConnectIMAP())
    325                 {
    326                     if (folderName == null)
    327                         folderName = client.Inbox.Name;
    328                     IMailFolder folder = client.GetFolder(folderName);
    329                     folder.Open(FolderAccess.ReadOnly);
    330                     var email = folder.GetMessage(new UniqueId(uniqueid));
    331                     var entity = FillEntity(null, email);
    332                     //
    333                     folder.Close();
    334                     client.Disconnect(true);
    335                     // 
    336                     return entity;
    337                 }
    338             }
    339             catch (Exception e)
    340             {
    341                 ErrMsg = $"获取单个邮件异常:{e.ToString()} [{e.Message}]";
    342                 return null;
    343             }
    344         }
    345 
    346         /// <summary>
    347         /// 获取一个文件夹的邮件 返回一个列表,包含摘要信息.收件/发件人,有几个附件,时间和标题,是否已读
    348         /// 默认只获取3个月内的邮件
    349         /// 调用前先调用配置方法CfgIMAP()
    350         /// </summary>
    351         public List<EmailViewM> GetEmailByFolder(string folderName = null)
    352         {
    353             try
    354             {
    355                 using (ImapClient client = ConnectIMAP())
    356                 {
    357                     IMailFolder folder;
    358                     // 默认是收件箱
    359                     if (folderName == null||folderName.ToLower()=="inbox")
    360                     {
    361                         folder=client.GetFolder(client.Inbox.Name);
    362                     }
    363                     else {
    364                         // 其它特定的文件夹
    365                         string dirK = folderName.ToLower();
    366                         Dictionary<string, SpecialFolder> fdict = new Dictionary<string, SpecialFolder>();
    367                         fdict.Add("archive", SpecialFolder.Archive);
    368                         fdict.Add("drafts", SpecialFolder.Drafts);
    369                         fdict.Add("flagged", SpecialFolder.Flagged);
    370                         fdict.Add("sent", SpecialFolder.Sent);
    371                         fdict.Add("junk", SpecialFolder.Junk);
    372                         fdict.Add("trash", SpecialFolder.Trash);
    373                         if (fdict.ContainsKey(dirK))
    374                             folder = client.GetFolder(fdict[dirK]);
    375                         else
    376                         {
    377                             // 否则是自定义的文件夹,或者是邮件服务商的特别文件夹
    378                             folder = client.GetFolder(folderName);
    379                         }
    380                     }
    381                         
    382                     folder.Open(FolderAccess.ReadOnly);
    383 
    384                     // 获取所有邮件的唯一标识列表
    385                     SearchQuery sq = SearchQuery.DeliveredAfter(DateTime.Today.AddMonths(-3));
    386                     var emailUids = folder.Search(sq);
    387 
    388                     // 获取这些邮件的摘要信息(MessageSummaryItems.BodyStructure这个项可以知道是否带附件)
    389                     var mails = folder.Fetch(emailUids, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure | MessageSummaryItems.Full);
    390                     List<EmailViewM> entityls = new List<EmailViewM>();
    391                     foreach (var emhead in mails)
    392                     {
    393                         var entity = FillEntity(emhead, null, folder);
    394                         entityls.Add(entity);
    395                     }
    396                     //
    397                     folder.Close();
    398                     client.Disconnect(true);
    399                     //
    400                     return entityls;
    401                 }
    402             }
    403             catch (Exception e)
    404             {
    405                 ErrMsg = $"获取一个文件夹的邮件异常:{e.ToString()} [{e.Message}]";
    406                 return null;
    407             }
    408         }
    409 
    410         /// <summary>
    411         /// 使用唯一ID获取一封完整邮件
    412         /// 调用前先调用配置方法CfgIMAP()
    413         /// </summary>
    414         /// <param name="folder">文件夹名,默认是收件箱</param>
    415         /// <param name="uniqueid">邮件唯一编号</param>
    416         public EmailViewM GetEmailByUniqueId(uint uniqueid, string folderName = null)
    417         {
    418             try
    419             {
    420                 using (ImapClient client = ConnectIMAP())
    421                 {
    422                     if (folderName == null)
    423                         folderName = client.Inbox.Name;
    424                     IMailFolder folder = client.GetFolder(folderName);
    425                     folder.Open(FolderAccess.ReadWrite);
    426                     UniqueId emailUniqueId = new UniqueId(uniqueid);
    427 
    428                     // 获取这些邮件的摘要信息
    429                     List<UniqueId> uids = new List<UniqueId>();
    430                     uids.Add(emailUniqueId);
    431                     var emaills = folder.Fetch(uids, MessageSummaryItems.UniqueId | MessageSummaryItems.Envelope);
    432                     var emhead = emaills[0];
    433 
    434                     // 获取邮件含正文部分,然后设置为已读.
    435                     MimeMessage embody = folder.GetMessage(emailUniqueId);
    436                     folder.AddFlags(emailUniqueId, MessageFlags.Seen, true);
    437 
    438                     /*赋值到实体类*/
    439                     var entity = FillEntity(emhead, embody, folder);
    440                     //
    441                     folder.Close();
    442                     client.Disconnect(true);
    443                     //
    444                     return entity;
    445                 }
    446             }
    447             catch (Exception e)
    448             {
    449                 ErrMsg = $"获取单个完整邮件异常:{e.ToString()} [{e.Message}]";
    450                 return null;
    451             }
    452         }
    453 
    454         /// <summary>
    455         /// 邮件添加标识(已读,已回复,已删除等等).参数值参考EmailViewM实体同名属性
    456         /// 调用前先调用配置方法CfgIMAP()
    457         /// </summary>
    458         /// <param name="uniqueIdls">同一文件夹下的邮件唯一标识列表</param>
    459         /// <param name="flag">标识代码 1=已读 2=已回复 8=删除</param>
    460         /// <param name="folderType">文件夹名</param>
    461         public void SetFlag(List<uint> uniqueIdls, int flag, string folderType = null)
    462         {
    463             try
    464             {
    465                 using (ImapClient client = ConnectIMAP())
    466                 {
    467                     List<UniqueId> uniqueids = uniqueIdls.Select(o => new UniqueId(o)).ToList();
    468                     MessageFlags messageFlags = (MessageFlags)flag;
    469                     if (folderType == null)
    470                         folderType = client.Inbox.Name;
    471                     IMailFolder folder = client.GetFolder(folderType);
    472                     folder.Open(FolderAccess.ReadWrite);
    473                     folder.AddFlags(uniqueids, messageFlags, true);
    474                     //
    475                     folder.Close();
    476                     client.Disconnect(true);
    477                 }
    478             }
    479             catch (Exception e)
    480             {
    481                 ErrMsg = $"邮件添加标识时异常:{e.ToString()} [{e.Message}]";
    482             }
    483         }
    484 
    485         /// <summary>
    486         /// 将邮件保存到草稿箱 返回邮件的唯一标识
    487         /// 调用前先调用配置方法CfgIMAP(),调用制做邮件方法
    488         /// </summary>
    489         public int SaveDrafts(int uniqueId = -1)
    490         {
    491             try
    492             {
    493                 using (ImapClient client = ConnectIMAP())
    494                 {
    495                     // 打开草稿箱,添加邮件
    496                     IMailFolder folder = client.GetFolder(SpecialFolder.Drafts);
    497                     folder.Open(FolderAccess.ReadWrite);
    498 
    499                     // 如果保存的是已经有的草稿邮件,则删除它再保存新的草稿.(没找到保存已有草稿的办法)
    500                     if (uniqueId > -1)
    501                     {
    502                         List<UniqueId> uidls = new List<UniqueId>();
    503                         uidls.Add(new UniqueId((uint)uniqueId));
    504                         folder.SetFlags(uidls, MessageFlags.Seen | MessageFlags.Deleted, true);
    505                         folder.Expunge(uidls);
    506                     }
    507 
    508                     UniqueId? uid = folder.Append(this.message, MessageFlags.Seen | MessageFlags.Draft);
    509                     //
    510                     folder.Close();
    511                     client.Disconnect(true);
    512                     return uid.HasValue ? (int)uid.Value.Id : -1;
    513                 }
    514             }
    515             catch (Exception e)
    516             {
    517                 ErrMsg = $"邮件保存草稿时异常:{e.ToString()} [{e.Message}]";
    518                 return -1;
    519             }
    520         }
    521         #endregion
    522 
    523         /// <summary>
    524         /// 将邮件相关信息填充到实体对象
    525         /// </summary>
    526         /// <param name="emhead">邮件基本信息</param>
    527         /// <param name="embody">邮件详细信息</param>
    528         /// <param name="folders">邮箱文件夹</param>
    529         /// <returns></returns>
    530         private EmailViewM FillEntity(IMessageSummary emhead = null, MimeMessage embody = null, params IMailFolder[] folders)
    531         {
    532             try
    533             {
    534                 // 邮件基本信息 主题(标题),发件人名,地址,日期,状态等
    535                 EmailViewM entity = new EmailViewM();
    536                 if (emhead != null)
    537                 {
    538                     entity.UniqueId = emhead.UniqueId.Id;
    539                     if (emhead.Envelope.From.Count > 0)
    540                     {
    541                         entity.Name = emhead.Envelope.From.Mailboxes.ElementAt(0).Name;
    542                         entity.Address = emhead.Envelope.From.Mailboxes.ElementAt(0).Address;
    543                     }
    544                     entity.Date = emhead.Envelope.Date.Value.DateTime;
    545                     entity.Subject = emhead.Envelope.Subject;
    546                     if (folders.Length > 0)
    547                     {
    548                         entity.FolderType = folders[0].Name;
    549                     }
    550                     // 收件人可能有多个
    551                     entity.ToList = new List<EmailViewM>();
    552                     foreach (var to in emhead.Envelope.To.Mailboxes)
    553                     {
    554                         entity.ToList.Add(new EmailViewM { Name = to.Name, Address = to.Address });
    555                     }
    556                     // 邮件状态,已读未读等等
    557                     if (emhead.Flags.HasValue)
    558                     {
    559                         entity.IsRead = emhead.Flags.Value.HasFlag(MessageFlags.Seen);
    560                         entity.IsAnswered = emhead.Flags.Value.HasFlag(MessageFlags.Answered);
    561                     }
    562                     // 附件个数(只传emhead时)
    563                     entity.Count = emhead.Attachments.Count();
    564                 }
    565 
    566                 // 正文 附件
    567                 if (embody != null)
    568                 {
    569                     // 正文
    570                     entity.BodyText = embody.TextBody;
    571                     entity.BodyHTML = embody.HtmlBody;
    572 
    573                     // 附件
    574                     // 附件个数(传embody时,包含有附件完整信息)
    575                     entity.Count = embody.Attachments.Count();
    576                     // 附件信息
    577                     if (entity.Count > 0)
    578                     {
    579                         entity.AttaList = new List<EmailViewM>();
    580                         // 这里要转成mimepart类型
    581                         foreach (MimePart attachment in embody.Attachments)
    582                         {
    583                             var atta = new EmailViewM();
    584                             atta.Name = attachment.ContentDisposition.FileName;
    585                             atta.AttaStream = new MemoryStream();
    586                             attachment.Content.DecodeTo(atta.AttaStream);
    587                             atta.Size = Math.Round((double)atta.AttaStream.Length / 1024, 1).ToString();
    588                             entity.AttaList.Add(atta);
    589                         }
    590                     }
    591                 }
    592                 // 邮箱文件夹
    593                 if (folders.Length > 0)
    594                 {
    595                     entity.FolderList = new List<EmailViewM>();
    596                     foreach (var item in folders)
    597                     {
    598                         entity.FolderList.Add(new EmailViewM()
    599                         {
    600                             Name = item.Name,
    601                             FolderType = item.Attributes.ToString(),
    602                             Count = item.Count
    603                         });
    604                     }
    605                 }
    606                 return entity;
    607             }
    608             catch (Exception e)
    609             {
    610                 ErrMsg = $"邮件填充到实体时异常:{e.ToString()} [{e.Message}]";
    611                 return null;
    612             }
    613         }
    614 
    615         #region 配置账号密码方法
    616 
    617         /// <summary>
    618         /// 初始化一个发件人的配置,发件箱,发件箱密码,SMTP服务器
    619         /// </summary>
    620         /// <param name="emailCode"></param>
    621         public void CfgSendEmail(int emailCode)
    622         {
    623             switch (emailCode)
    624             {
    625                 default:
    626                     fromAlias = "发件人名称";
    627                     fromEmail = "发件人地址";
    628                     fromPwd = "授权码或密码";
    629                     serverSMTP = "smtp服务器地址";
    630                     portSMTP = 25;
    631                     break;
    632             }
    633         }
    634 
    635         /// <summary>
    636         /// 初始化一个接收邮件的配置 登录名和密码,IMAP服务器,
    637         /// </summary>
    638         /// <param name="accountCode"></param>
    639         public void CfgIMAP(int accountCode)
    640         {
    641             switch (accountCode)
    642             {
    643                    default:
    644                     account = "邮件地址";
    645                     pwd = "邮件密码或者授权码";//"";
    646                     serverIMAP = "IMAP服务器地址";
    647                     portIMAP = 143;
    648                     //serverPOP = "POP3服务器地址";
    649                     //portPOP = 110;
    650                     break;
    651             }
    652         }
    653 
    654         #endregion
    655     }        
    public class EmailViewM
        {
            /// <summary>
            /// 1.从服务器上获取的邮件的UniqueId
            /// </summary>
            public uint UniqueId { get; set; }
            /// <summary>
            /// 1.发件人名字,这个名字可能为null.因为发件人可以不设名字
            /// 2.收件人名(只在ToList里的对象有值)
            /// 3.附件名(只在AttaList里的对象有值)
            /// 4.文件夹名字(只在FolderList里的对象有值)
            /// </summary>
            public string Name { get; set; }
            /// <summary>
            /// 1.发件人地址
            /// 2.收件人地址(只在ToList里的对象有值)
            /// </summary>
            public string Address { get; set; }
            /// <summary>
            /// 发件人邮箱授权码
            /// </summary>
            public string AuthCode { get; set; }
            /// <summary>
            /// 收件人列表
            /// </summary>
            public List<EmailViewM> ToList { get; set; }
            /// <summary>
            /// 邮件主题(标题)
            /// </summary>
            public string Subject { get; set; }
            /// <summary>
            /// 邮件时间
            /// </summary>
            public DateTime Date { get; set; }
            /// <summary>
            /// 1.附件个数
            /// 2.文件夹内邮件个数(只在FolderList里的对象有值)
            /// </summary>
            public int Count { get; set; }
            /// <summary>
            /// 附件标识ID在保存附件在本地时设置(只在AttaList里的对象有值)
            /// 当附件从邮件服务器下载到本地后,需要向客户端提供下载时,用这个ID找到该附件.
            /// </summary>
            public string AttaGuid { get; set; }
            /// <summary>
            /// 附件大小(只在AttaList里的对象有值)
            /// </summary>
            public string Size { get; set; }
            /// <summary>
            /// 附件流(只在AttaList里的对象有值)
            /// </summary>
            public Stream AttaStream { get; set; }
            /// <summary>
            /// 附件列表
            /// </summary>
            public List<EmailViewM> AttaList { get; set; }
            /// <summary>
            /// 是否已经读
            /// </summary>
            public bool IsRead { get; set; }
            /// <summary>
            /// 是否已经回复
            /// </summary>
            public bool IsAnswered { get; set; }
            /// <summary>
            /// 邮件正文的纯文本形式
            /// </summary>
            public string BodyText { get; set; }
            /// <summary>
            /// 邮件正文的HTML形式.
            /// </summary>
            public string BodyHTML { get; set; }
    
            /// <summary>
            /// 邮箱的文件夹列表
            /// </summary>
            public List<EmailViewM> FolderList { get; set; }
            /// <summary>
            /// 文件夹类型名
            /// 1.表示当前邮件所处文件夹名字
            /// 2.在FolderList里的对象,表示文件夹名字
            ///inbox(收件箱),
            ///archive(档案箱),
            ///drafts(草稿箱),
            ///flagged(标记的),
            ///junk(垃圾箱),
            ///sent(发件箱),
            ///trash(回收箱)
            /// </summary>
            public string FolderType { get; set; }
            /// <summary>
            /// 邮件标识,需要修改邮件标识时,传入此值
            /// 1=Seen(设为已读),
            /// 2=Answered(设为已经回复),
            /// 8=Deleted(设为删除),
            /// </summary>
            public int Flag { get; set; }
        }       
  • 相关阅读:
    目录结构
    RabbitMQ 将监听的IP从localhost修改为指定IP
    概念
    RabbitMQ 基础概念
    修改shell提示符的显示格式
    VIM常用设置
    RabbitMQ 开启WEB管理
    用pecl/pear独立编译PHP扩展 vs. 把扩展编译到PHP内核中
    安装composer
    安装php-amqplib(RabbitMQ的phpAPI)
  • 原文地址:https://www.cnblogs.com/mirrortom/p/9131134.html
Copyright © 2011-2022 走看看