发送保存在磁盘上的eml文件

UJ.*_*UJ. 9 c# email smtp eml

我正在创建eml并使用此处提到的过程将它们保存到目录中.我想知道如何发送这些eml文件?我尝试使用SMTPClient类的对象,但它将MailMessage对象作为其参数,我无法找到并使用这些保存的eml文件创建MailMessage类型的对象.

Mar*_*obr 7

正确加载EML文件并不像看起来那么容易.您可以在几天内编写一个在95%的情况下工作的实现.剩下的5%至少需要几个月;-).我知道,因为我参与了一个开发.

考虑以下困难:

  • unicode电子邮件
  • 从右到左的语言
  • 纠正由流行的邮件客户端和服务器中众所周知的错误导致的格式错误的EML文件
  • 处理S/MIME(加密和签名的电子邮件)
  • 正确处理几种编码附件的方法
  • 处理嵌入到HTML电子邮件中的内嵌图像和样式表
  • 确保它正确解析来自Mike Crispin(Mime和IMAP RFC的合着者)的MIME酷刑消息
  • 确保格式错误的消息不会导致缓冲区溢出或其他应用程序崩溃
  • 处理分层消息(带附加消息的消息)
  • 确保它正确处理非常大的电子邮件

这种解析器的成熟需要数年时间并且不断为用户提供反馈.现在,.NET Framework中没有包含此类解析器.在它改变之前,我会从已建立的供应商处获取第三方MIME解析器.

以下代码使用我们的Rebex安全邮件组件,但我确信类似的任务也可以使用其他供应商的组件轻松复制.

该代码基于邮件消息教程.

// create an instance of MailMessage 
MailMessage message = new MailMessage();

// load the message from a local disk file 
message.Load("c:\\message.eml");

// send message
Smtp.Send(message, "smtp.example.org");
Run Code Online (Sandbox Code Playgroud)

  • @Vikrant 代码运行得很好。它使用 Rebex.Mail.MailMessage 类,该类从 1.0 版本开始就有 Load 方法。代码上方的帖子中提到了这一点。也许您的意思是 System.Net.Mail.MailMessage 没有 Load 方法?我知道 - 这就是我的答案使用不同类别的确切原因。 (2认同)

HuB*_*eZa 6

使用EMLReader从.eml文件中检索数据.它包含创建MailMessage对象所需的所有数据,如From,To,Subject,Body等等.

FileStream fs = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite);
EMLReader reader = new EMLReader(fs);
fs.Close();

MailMessage message = new System.Net.Mail.MailMessage(reader.From, reader.To, reader.Subject, reader.Body);
Run Code Online (Sandbox Code Playgroud)

  • 提供的代码不处理替代视图或附件.链接的文章指定它已过时并链接到另一个(http://www.codeproject.com/KB/office/EML_ReaderEx.aspx)更好地处理备用视图和附件,但仍有一些问题(BCC看起来是作为"收件人"不正确地恢复 (2认同)
  • 是的我知道.当试图找到解决同一问题的解决方案时,只是试图帮助其他人(比如我自己).另见相关问题:http://stackoverflow.com/questions/936422/recommendations-on-parsing-eml-files-in-c (2认同)