【问题标题】:How to properly remove an attachment from an email using Aspose.Email如何使用 Aspose.Email 从电子邮件中正确删除附件
【发布时间】:2020-03-18 17:19:19
【问题描述】:

在我的应用程序中,用户可以将电子邮件上传到文件服务器,然后应将这些电子邮件的附件剥离并转换为 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,我看不出我在做什么不同/错误。

【问题讨论】:

    标签: c# aspose


    【解决方案1】:

    事实证明我对我的流做了一些时髦的事情,我必须在返回之前保存没有附件的电子邮件,这是我修改后的代码:

    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;
    }
    

    它现在就像一个魅力

    【讨论】:

      猜你喜欢
      • 2010-09-27
      • 2014-08-01
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多