首页 > 解决方案 > 电子邮件附件作为文件而不是 zip 文件发送

问题描述

因此,我正在尝试将 pdf 的 zip 文件附加到电子邮件中,它以文件而不是 zip 的形式出现。我可以在记事本中打开它,但它只是一堆随机字符。

这是我发送电子邮件的方法:

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;
        

        Attachment myZip = new Attachment(output, "Client Statement");
        mail.Attachments.Add(myZip);
        SmtpServer.Send(mail);
    }
    catch (Exception ex)
    {
       FMBUtilities.Logger.LogErrorToSql2012PrdAndEmailTeam("DBQueries", "SendEmail", ex);
    }
}

我在这里从我的控制器调用它:

// 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." });
        }
        MemoryStream output = new MemoryStream();

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

        }

我有另一种用于下载 zip 文件的控制器方法,因此我知道它正在正确下载并且一切正常。我似乎无法弄清楚如何将此 zip 附加到电子邮件中。

编辑:

这是来自附件的文件的图像。[![在此处输入图像描述][1]][1]

标签: c#asp.net-mvcsmtpclientdotnetzip

解决方案


该文件以“PK”开头 - 它是一个 zip,但是因为您是从内存流中制作的并且似乎没有指定文件名,所以它只会像默认名称一样通过

查看ContentDisposition附件的FileName属性及其上的属性,例如

myZip.ContentDisposition.FileName = "myFile.zip";

推荐阅读