在我的应用程序中,用户可以将电子邮件上传到文件服务器,然后应删除这些电子邮件的附件,并将其转换为PDF以单独保存。但是我无法从电子邮件中正确删除附件。
当我转换电子邮件并将其与附件一起保存时,它可以正常工作,但是当我先删除附件然后将其保存时,它会以某种方式破坏生成的PDF文件,使其看起来像this(这只是一个由4行电子邮件生成的4页)。谁能解释我在做什么错?
这是我从电子邮件中删除附件的代码:
public static List<(string FileName, Stream Content)> GetEmailAndAttachmentsFromEmail(Stream emailContent)
{
var email = MailMessage.Load(emailContent);
var retval = new List<(string, Stream)>
{
($"{email.Subject}.msg", emailContent)
};
var attachmentsToRemove = new List<Attachment>();
foreach (var attachment in email.Attachments)
{
retval.Add((attachment.Name, attachment.ContentStream));
attachmentsToRemove.Add(attachment);
}
foreach (var attachment in attachmentsToRemove)
{
email.Attachments.Remove(attachment);
}
return retval;
}
我已经尝试了此代码的多个排列,但没有一个起作用。
另外,我正在关注official Aspose documentation,但我看不出自己在做什么/做错了。
答案 0 :(得分:0)
事实证明,我对流进行了一些时髦处理,在返回之前必须保存没有附件的电子邮件,这是我的修改后的代码:
public static List<(string FileName, Stream Content)> GetEmailAndAttachmentsFromEmail(Stream emailContent)
{
var email = MailMessage.Load(emailContent);
// I removed the prepending of the email here and moved it to the end
var retval = new List<(string, Stream)>();
var attachmentsToRemove = new List<Attachment>();
foreach (var attachment in email.Attachments)
{
retval.Add((attachment.Name, attachment.ContentStream));
attachmentsToRemove.Add(attachment);
}
foreach (var attachment in attachmentsToRemove)
{
email.Attachments.Remove(attachment);
}
// This part is new
var newEmailContent = new MemoryStream();
email.Save(newEmailContent);
newEmailContent.Seek(0, SeekOrigin.Begin);
retval = retval.Prepend(($"{email.Subject}.msg", newEmailContent)).ToList();
return retval;
}
它现在就像一种魅力