C# 电子邮件附件将作为文件而不是zip文件发送
所以我尝试将PDF的zip文件附加到电子邮件中,它以文件的形式而不是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
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格式发送。