Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用C语言将MSG电子邮件转换为PDF文件#_C#_Pdf_Msg_Gembox Document_Gembox Email - Fatal编程技术网

C# 用C语言将MSG电子邮件转换为PDF文件#

C# 用C语言将MSG电子邮件转换为PDF文件#,c#,pdf,msg,gembox-document,gembox-email,C#,Pdf,Msg,Gembox Document,Gembox Email,我正在使用和将电子邮件转换为PDF 这是我的代码: static void Main() { MailMessage=MailMessage.Load(“input.eml”); DocumentModel document=新的DocumentModel(); 如果(!string.IsNullOrEmpty(message.BodyHtml)) document.Content.LoadText(message.BodyHtml、LoadOptions.HtmlDefault); 其他的 d

我正在使用和将电子邮件转换为PDF

这是我的代码:

static void Main()
{
MailMessage=MailMessage.Load(“input.eml”);
DocumentModel document=新的DocumentModel();
如果(!string.IsNullOrEmpty(message.BodyHtml))
document.Content.LoadText(message.BodyHtml、LoadOptions.HtmlDefault);
其他的
document.Content.LoadText(message.BodyText、LoadOptions.TxtDefault);
document.Save(“output.pdf”);
}
该代码适用于EML文件,但不适用于MSG(无论是
MailMessage.BodyHtml
还是
MailMessage.BodyText
)都为空


如何使MSG也能使用此功能?

问题发生在特定的MSG文件中,这些文件在RTF正文中没有HTML内容,而是具有原始RTF正文

该类当前不公开RTF主体的API(仅公开普通和HTML主体)。不过,您可以将其作为命名的“Body.rtf”检索

另外,供参考,您还有一个问题,即电子邮件HTML正文中的图像没有内联,因此,在导出为PDF时,您将丢失这些图像

无论如何,请尝试使用以下方法:

static void Main()
{
//加载电子邮件(或使用POP或IMAP检索)。
MailMessage=MailMessage.Load(“input.msg”);
//创建一个新文档。
DocumentModel document=新的DocumentModel();
//将电子邮件的正文导入文档。
装载体(消息、文件);
//将文档另存为PDF。
document.Save(“output.pdf”);
}
静态void加载体(邮件消息、文档模型文档)
{
如果(!string.IsNullOrEmpty(message.BodyHtml))
{
var htmlOptions=LoadOptions.HtmlDefault;
//将附加的CID图像替换为内联数据URL。
var htmlBody=replaceMbeddedImages(message.BodyHtml、message.Attachments);
//将HTML正文加载到文档中。
document.Content.End.LoadText(htmlBody,htmlOptions);
}
else if(message.Attachments.Any(a=>a.FileName==“Body.rtf”))
{
var rtfAttachment=message.Attachments.First(a=>a.FileName==“Body.rtf”);
var rtfooptions=LoadOptions.RtfDefault;
//从附件中获取RTF正文。
var rtfBody=rtfooptions.Encoding.GetString(rtfAttachment.Data.ToArray());
//将RTF正文加载到文档中。
document.Content.End.LoadText(rtfBody,rtfOptions);
}
其他的
{
//将TXT正文加载到文档中。
document.Content.End.LoadText(message.BodyText、LoadOptions.TxtDefault);
}
}
静态字符串替换EmbeddedImages(字符串htmlBody、AttachmentCollection附件)
{
变量模式=

"(?MSG与EML和MS Outlook特定的文件格式不同。请检查GemBox是否确实可以处理它们。也许您需要告诉它,应该期望什么。Hmmm…说它们可以。这取决于文件扩展名。因此,您的代码应该可以正常工作。您能验证您的.MSG是否确实是有效的Outlook邮件文件并包含内容吗?您可以尝试另一个吗带有msg扩展名的文件?你能在outlook或“outlook msg reader”应用程序中打开吗?@Fildor根据他们的示例,它应该支持msg、EML和MHTML。是的,我也刚刚读过。因此,要么是有bug(我怀疑)或者您的MSG文件不是有效的ms outlook邮件文件。如果您运气不好,并且该文件是有效的,我会尝试另一个文件,并在联系他们的支持之前反复检查该文件。@nixonuposen我相信问题可能是特定于您的MSG文件的,所以请尝试Fildor的建议。如果问题仍然存在,您可以吗你把你的MSG文件上传到某个地方让我看一下?