Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 电子邮件附件将作为文件而不是zip文件发送_C#_Asp.net Mvc_Smtpclient_Dotnetzip - Fatal编程技术网

C# 电子邮件附件将作为文件而不是zip文件发送

C# 电子邮件附件将作为文件而不是zip文件发送,c#,asp.net-mvc,smtpclient,dotnetzip,C#,Asp.net Mvc,Smtpclient,Dotnetzip,所以我尝试将PDF的zip文件附加到电子邮件中,它以文件的形式而不是zip。我可以用记事本打开它,但它只是一堆随机字符 以下是我发送电子邮件的方法: public static void SendEmail(List<string> recipients, MemoryStream output, string from, string subject, string htmlMessage, bool isHtml = true) { var host = Configur

所以我尝试将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);
    }
}
public static void sendmail(列出收件人、MemoryStream输出、字符串发件人、字符串主题、字符串htmlMessage、bool isHtml=true)
{
var host=ConfigurationManager.AppSettings[“emailHost”];
尝试
{
MailMessage mail=新的MailMessage();
mail.From=新邮件地址(From);
foreach(收件人中的var r)
{
邮寄至地址(r);
}
mail.Subject=主题;
mail.IsBodyHtml=isHtml;
mail.Body=htmlMessage;
//字符串结果=System.Text.Encoding.UTF8.GetString(output.ToArray());
SmtpClient SmtpServer=新的SmtpClient(主机);
SmtpServer.Port=25;
附件myZip=新附件(输出,“客户声明”);
mail.Attachments.Add(myZip);
发送(邮件);
}
捕获(例外情况除外)
{
FMBUtilities.Logger.LogErrorToSql2012PrandeMailTeam(“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);

        }
//将电子邮件数组放入列表中以便发送电子邮件
如果(emails.ToString()!=“”)
{
var allEmails=电子邮件[0]。拆分(',');
foreach(电子邮件中的var电子邮件)
{
if(emailValid.IsMatch(电子邮件))
{
添加(电子邮件);
}
其他的
{
返回Json(新的{success=false,message=$”*无效的电子邮件地址:{email}。\n\n*请仔细检查并重试。“});
}
MemoryStream输出=新的MemoryStream();
列表distinctFiles=所有路径
.GroupBy(x=>x.Split(新字符[]{'\\'}).Last())
.Select(x=>x.First())
.ToList();
使用(ZipFile zip=new ZipFile())
{
zip.AddFiles(distinctFiles,@“\”;
压缩保存(输出);
输出位置=0;
dbquerys.sendmail(everymail,output,fromAddress,“客户声明报告”,“这是您请求的客户声明”,true);
}
我有另一个控制器方法,我用它来下载zip文件,所以我知道它正在正确下载,一切都很好。我似乎不知道如何将此zip附加到电子邮件

编辑:

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

该文件以“PK”开头-它是一个zip文件,但由于您是从内存流创建的,并且似乎没有指定文件名,因此它将以默认名称通过

查看附件的
ContentDisposition
属性和该属性上的
FileName
属性,例如

myZip.ContentDisposition.FileName = "myFile.zip";
该文件以“PK”开头-它是一个zip文件,但由于您是从内存流创建的,并且似乎没有指定文件名,因此它将以默认名称通过

查看附件的
ContentDisposition
属性和该属性上的
FileName
属性,例如

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

看起来它实际上是一个zip文件。但是没有扩展名.zip。我想有一种方法可以手动命名该文件,以提供扩展名为.zip的名称(例如test.zip)

看起来它实际上是一个zip文件。但是没有扩展名.zip。我想有一种方法可以手动命名该文件,以提供扩展名为.zip的名称(例如test.zip)

zip也只是一个文件。你试过将结果重命名为.zip并打开它吗?可能只是名称没有被传输。怎么办“文件不是zip文件”的意思是?为什么“zip文件”不是“文件”的子集?最重要的是,请在十六进制编辑器中打开一个附加文件的屏幕截图。我想看看其中的字节文件以“PK”开头"-这是一个ZIP文件,名为Franzsurmised@FranzGleichmann在编辑了我的第一个回复后,我尝试将其重命名为.zip。我打开了它,我的所有文件都在那里!!!见鬼!太棒了!现在我只需要确保它以zip的形式发送。简单的方法是这样做吗?如果你写了一篇回复文章,我很乐意接受它并给你分数。T非常感谢!@CaiusJard是的,我重命名了文件,一切都很完美!!现在我只需要弄清楚如何确保它以zip的形式发送。zip也只是一个文件。你是否尝试过将结果重命名为.zip并打开它?可能只是名称没有被传输。“文件不是zip文件”是什么意思?zip文件是什么意思不是“文件”的子集?最重要的是,请显示一个你最终看到的附加文件的屏幕截图,在十六进制编辑器中打开。我想看看其中的字节文件以“PK”开头-这是一个ZIP文件,名为Franzsurmised@FranzGleichmann在编辑了我的第一个回复后,我尝试将其重命名为.zip。我打开了它,我的所有文件都在那里!!!见鬼!太棒了!现在我只需要确保它以zip的形式发送。简单的方法是这样做吗?如果你写了一篇回复文章,我很乐意接受它并给你分数。T太感谢你了!@CaiusJard是的,我重命名了文件,一切都很完美!!现在我只需要弄清楚如何确保它以zip格式发送。