如何使用 Aspose.Email 从电子邮件中正确删除附件
How to properly remove an attachment from an email using Aspose.Email
在我的应用程序中,用户可以将电子邮件上传到文件服务器,然后应删除这些电子邮件的附件并转换为 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;
}
我已经尝试了此代码的多种排列,但 none 奏效了。
另外,我正在关注这个主题的 official Aspose documentation,但我没有看到我在做什么不同/错误的事情。
原来我对我的流做了一些奇怪的事情,我不得不在返回之前保存没有附件的电子邮件,这是我修改后的代码:
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;
}
它现在很有魅力
在我的应用程序中,用户可以将电子邮件上传到文件服务器,然后应删除这些电子邮件的附件并转换为 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;
}
我已经尝试了此代码的多种排列,但 none 奏效了。
另外,我正在关注这个主题的 official Aspose documentation,但我没有看到我在做什么不同/错误的事情。
原来我对我的流做了一些奇怪的事情,我不得不在返回之前保存没有附件的电子邮件,这是我修改后的代码:
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;
}
它现在很有魅力