我在工作中创建了一个应用程序,它从一些数据库数据生成exel文件。生成文件后,它们会自动发送给相关客户。我的问题是,当我运行已发布的应用程序时,它工作正常。但是一些用户在运行应用程序时,文件生成完美,因为它们保存在硬盘上,我可以看到它们。但是当它们附加到MailMessage对象时,它们就会被破坏。这是损坏文件的图像。这些文件应该是Excel文件。
这是我发送包含附件的邮件的代码:
public void SendMailedFilesDK()
{
string[] sentFiles = Directory.GetFiles(sentFilesDK);
if (sentFiles.Count() > 0)
{
using (System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("ares"))
{
using (System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage())
{
msg.From = new MailAddress("system@mail.dk");
msg.To.Add(new MailAddress("operation@mail.dk"));
msg.To.Add(new MailAddress("bl@mail.dk"));
msg.CC.Add("lmy@mail.dk");
msg.CC.Add("ltr@mail.dk");
msg.Subject = "IBM PUDO";
msg.Body = sentFiles.Count() + " attached file(s) has been sent to the customer(s) in question ";
msg.IsBodyHtml = true;
foreach (string file in sentFiles)
{
Attachment attachment = new Attachment(file);
msg.Attachments.Add(attachment);
}
client.Send(msg);
}
}
}
}
为什么其他人运行应用程序时文件会被破坏?我们都在使用office 2010。
答案 0 :(得分:1)
您应该确保将附件的内容类型设置为适当的值。
xlsx文件的 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
或
application/vnd.ms-excel
用于xls文件。
例如,你的循环看起来应该是这样的。
ContentType xlsxContent = new ContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
foreach (string file in sentFiles)
{
Attachment attachment = new Attachment(file, xlsxContent);
msg.Attachments.Add(attachment);
}
答案 1 :(得分:1)
我们在附件构造函数中使用它,并且没有附加Excel和PDF的问题。
附件数据=新附件(sFileName,MediaTypeNames.Application.Octet);
同时检查运行此用户的用户是否有权访问 sentFilesDK 指定的任何位置的文件。
答案 2 :(得分:0)
您可能希望指定mimetype,它是Attachment类中其中一个构造函数的一部分。
public Attachment(string fileName,ContentType contentType);
您还可以在memorystream中读取该文件,并将其作为以下构造函数的一部分传递。
public Attachment(Stream contentStream,string name,string mediaType);