首页 > 解决方案 > 使用 dotnetzip 库附加到电子邮件后无法打开 Zip 文件

问题描述

我能够将所有文件保存到一个 zip 文件中并正确下载它们。现在我需要使用该 zip 文件附加到电子邮件。我收到错误说它无法打开,如果我在记事本中打开它,它们是空白的。它们是pdf。

这是我下载它们的方式:

else if (radio[0] == "Email Statements")
{
    // Make array of emails into List for sending in email 
    if (emails.ToString() != "")
    {
        var allEmails = emails[0].Split(',');

        foreach (var email in allEmails)
        {
            if (emailValid.IsMatch(email))
            {
                everyEmail.Add(email);
            }
            else
            {
                return Json(new { success = false, message = $"* Not valid email address: {email}.\n\n * Please double check and try again." });
            }

            List<string> distinctFiles = allPaths
                .GroupBy(x => x.Split(new char[] { '\\' }).Last())
                .Select(x => x.First())
                .ToList();
            using (ZipFile zip = new ZipFile())
            {
                zip.AddFiles(distinctFiles, @"\");
                MemoryStream output = new MemoryStream();
                output.Position = 0;
                zip.Save(output);
                
                DBQueries.SendEmail(everyEmail, output, fromAddress, "Client Statement Reports", "Here are your requested Client Statements", true);

所以这个DBQueries.SendEmail函数会把我带到这个:

public static void SendEmail(List<string> recipients, MemoryStream output, string from, string subject, string htmlMessage, bool isHtml = true)
{
    var host = ConfigurationManager.AppSettings["emailHost"];
    
    try
    {
        MailMessage mail = new MailMessage();
        mail.From = new MailAddress(from);

        foreach (var r in recipients)
        {
            mail.To.Add(r);
        }
        
        mail.Subject = subject;
        mail.IsBodyHtml = isHtml;
        mail.Body = htmlMessage;
        //string result = System.Text.Encoding.UTF8.GetString(output.ToArray());

        SmtpClient SmtpServer = new SmtpClient(host);
        SmtpServer.Port = 25;
       
        mail.Attachments.Add(new Attachment(output, "Client Statments"));
        SmtpServer.Send(mail);
    }
    catch (Exception ex)
    {
       FMBUtilities.Logger.LogErrorToSql2012Prd("DBQueries", "SendEmail", ex);
    }
}

在此之后我无法阅读附件。我需要做什么才能使其可读?

标签: c#.netasp.net-mvcsmtpclientdotnetzip

解决方案


请在附件中使用正确的格式。你可以试试 mail.Attachments.Add(new Attachment(output, "Client Statments.zip"));


推荐阅读