我正在使用这里提到的方法创建 eml 文件并将它们保存到目录中。 我想知道如何发送这些 eml 文件? 我尝试使用 SMTPClient 类的对象,但它需要 MailMessage 对象作为参数,我找不到一种方法来使用已保存的 eml 文件创建 MailMessage 类型的对象。
这样的解析器需要经过多年的发展和不断的用户反馈才能成熟。目前.NET Framework中没有这样的解析器。在它改变之前,我建议从已知供应商那里获取第三方MIME解析器。
以下代码使用我们的Rebex Secure Mail组件,但我相信其他供应商的组件也可以轻松复制类似的任务。
该代码基于Mail Message教程。
// 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");
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);
正如其他人所展示的,EML并不是序列化邮件消息的好方法。您最好将邮件保存为另一种格式。虽然.Net框架中有几个序列化引擎可以序列化任何对象,但您也可以考虑仅在自己设计的Xml文件中保存邮件的组件,例如地址、正文、以base64形式附加的文件。
以下是一个示例,可帮助您入门:
<?xml version="1.0" encoding="utf-8"?>
<mail>
<to display="Thomas Edison" address="tedison@domain.com" />
<body>
Hi Thomas,
How are you doing?
Bye
</body>
<attachment name="MaryLamb.wav">
cmF0aWUgYWFuIGluIFBERi1mb3JtYWF0LiBEZSBmYWN0dXVyIGlzIGVlbiBvZmZpY2ll
ZWwgZ2VzaWduZWVyZA0KZG9jdW1lbnQgdmFuIEV1cm9maW5zIE9tZWdhbSBCVi4gRGUg
c2lnbmF0dXJlIGt1bnQgdSB2ZXJpZmnDq3Jlbi4NCg0KVm9vciBoZXQgdmVyaWZpw6ty
...
</attachment>
</mail>
另一个优点是,与创建EML不同,您无需使用smtpClient来构建邮件文件。
在C#中,创建和解析XML非常容易。
如果长期归档是目标,您没有说明保存EML的原理。在这种情况下,XML可能具有优势。
To: email@address.com
如果需要,您可以进一步操纵邮件头。
做我所做的...放弃吧。
构建MailMessage对象似乎是我的焦点,我在这里也有类似的问题未解决... 当我已经将电子邮件作为字符串时,如何发送电子邮件?
从我所见,最简单的方法是使用原始套接字将整个.eml文件内容转储到邮件服务器上,并让邮件服务器通过使用其引擎解析电子邮件来找出难点,例如发件人、收件人主题等。
唯一的问题是...RFC 821...非常繁琐,我正在尝试找出一种干净的方法来快速读取已经在邮箱中的邮件。
编辑:
我找到了一个干净的解决方案,并在我的帖子中介绍了它:)
记录一下:
在Nuget Packager控制台中输入:
Install-Package LumiSoft.Net.dll
然后在你的代码中:
using (FileStream fs = new FileStream( cacheFileName, FileMode.Open, FileAccess.Read ))
using (LumiSoft.Net.SMTP.Client.SMTP_Client client =
new LumiSoft.Net.SMTP.Client.SMTP_Client())
{
client.SendMessage( fs );
}