• C#读取邮件附件的方法


    基于需求需要从邮件里读取附件,从网络搜索整理如下:

    1 使用 Spire.Email

     从官网下载安装并引用,地址:https://www.e-iceblue.com/Download/email-for-net.html 

     获取附件代码如下:

    using System.IO;
    using Spire.Email.Pop3;  //添加命名空间
    
    // Create a POP3 client and connect.
    Pop3Client client = new Pop3Client();
    client.Host = Host;
    client.Username = Username;
    client.Password = Password;
    client.Port = 110;
    client.EnableSsl = false;
    
    client.Connect();
    
    Spire.Email.MailMessage message = client.GetMessage(1);
    //下载附件
    foreach (Spire.Email.Attachment attach in message.Attachments)
    {
    // To get and save the attachment
    string filePath = "d:\"+ + attach.ContentType.Name;
    if (File.Exists(filePath))
    {
      File.Delete(filePath);
    }
      //FileStream fs = File.Create(filePath);
      CopyStream(attach.Data, filePath);
    }
    
    private void CopyStream(Stream input, string filePath)
    {
      FileStream fs = null;
      try
      {
    fs = File.Create(filePath);
    byte[] buffer = new byte[8 * 1024];
    int len;
    while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
    {
    fs.Write(buffer, 0, len);
    }
      fs.Close();
    }
    catch (Exception)
    {
    if (fs != null)
    {
      fs.Close();
    }
      throw;
    }
    }

    当做成服务循环执行的时候发现过段时间就报一次错,不知道是不是因为付费的原因,所以弃用寻找下一个库

    2 使用 LumiSoft.Net

    下载地址:http://www.lumisoft.ee/lswww/download/downloads/ 或者通过 NuGet程序包搜索下载

    获取附件代码如下:

     1 using System.IO;
     2 using LumiSoft.Net;
     3 using LumiSoft.Net.Log;
     4 using LumiSoft.Net.POP3.Client;
     5 using LumiSoft.Net.MIME;
     6 using LumiSoft.Net.Mail;
     7 
     8 
     9             POP3_Client pop3 = new POP3_Client();
    11             pop3.Connect(Host, Port, false);
    12             pop3.Login(UserName, Pwd);//两个参数,前者为Email的账号,后者为Email的密码
    15             POP3_ClientMessageCollection messages = pop3.Messages;
    17             if (messages.Count <= 0)
    18             {
    19                 return;
    20             }
    21                 POP3_ClientMessage message = messages[0];//转化为POP3
    22 
    23                 byte[] messageBytes = message.MessageToByte();
    24                 Mail_Message mime_message = Mail_Message.ParseFromByte(messageBytes);
    25 
    26                 MIME_Entity[] attachments = mime_message.GetAttachments(true, true);
    27 
    28                 foreach (MIME_Entity entity in attachments)
    29                 {
    30                     if (entity.ContentDisposition != null)
    31                     {
    32                         string fileName = entity.ContentDisposition.Param_FileName;
    33                         if (!string.IsNullOrEmpty(fileName))
    34                         {
    35                             DirectoryInfo dir = new DirectoryInfo(@"D:email");
    36                             if (!dir.Exists) dir.Create();
    37 
    38                             string path = Path.Combine(dir.FullName, fileName);
    39                             MIME_b_SinglepartBase byteObj = (MIME_b_SinglepartBase)entity.Body;
    40                             Stream decodedDataStream = byteObj.GetDataStream();
    41                             using (FileStream fs = new FileStream(path, FileMode.Create))
    42                             {
    43                                 LumiSoft.Net.Net_Utils.StreamCopy(decodedDataStream, fs, 4000);
    44                             }46                         }
    47                     }
    48                 }
    49                 message.MarkForDeletion();
    52                 pop3.Disconnect();

    还有其它的库没用过不做记录

    记录供日后参考

  • 相关阅读:
    正则表达式
    正则表达式-量词
    正则表达式-字符组
    6月学习总结
    利用Magick和gs实现pdf到jpg的转换
    NGS Antenna Calibrations
    VS2017运行旧版本下的C程序工程
    C#.NET SQLite自适应32位/64位系统
    RAID1环境下外挂第三块硬盘
    修复 Fontconfig Error
  • 原文地址:https://www.cnblogs.com/kenjiang/p/11726070.html
Copyright © 2020-2023  润新知