C# 中的多个附件



>我在程序中发送多个附件时遇到问题。

在尝试添加多个附件之前,我没有任何问题。所以我改了一点代码,它停止了工作。

创建附件:没有添加所有代码以使其更可见。

Attachment attachment = getAttachment(bodyFile, "Formulier" + counter + ".doc");
attachments.Add(attachment);
//attachment.Dispose();
if (attachments != null)
{
  foreach (Attachment attachment in attachments)
  {
    email.Attachments.Add(attachment);
  }
}    

获取附件

private Attachment getAttachment(string bodyFile, string title)
{
  return createDocument(bodyFile, title);
}

创建文件

private Attachment createDocument(string bodyFile, string title) 
{
  string activeDir = HttpContext.Current.Server.MapPath("/Tools");
  string newPath = Path.Combine(activeDir, "Documents");
  Directory.CreateDirectory(newPath);
  newPath = Path.Combine(newPath, title);
  FileStream fs = File.Create(newPath);
  fs.Close();
  File.WriteAllText(newPath, bodyFile);
  var fstemp = new FileStream(newPath, FileMode.Open, FileAccess.Read);
  return new Attachment(fstemp, title, MediaTypeNames.Application.Octet);
}

我在记录器中遇到的错误

2012-07-04 15:45:26,149 [19] ERROR Mvc - System.Net.Mail.SmtpException: Failure sending mail. ---> System.ObjectDisposedException: Cannot access a closed file.
   at System.IO.__Error.FileNotOpen()
   at System.IO.FileStream.Read(Byte[] array, Int32 offset, Int32 count)
   at System.Net.Mime.MimePart.Send(BaseWriter writer)
   at System.Net.Mime.MimeMultiPart.Send(BaseWriter writer)
   at System.Net.Mail.Message.Send(BaseWriter writer, Boolean sendEnvelope)
   at System.Net.Mail.SmtpClient.Send(MailMessage message)
   --- End of inner exception stack trace ---
   at System.Net.Mail.SmtpClient.Send(MailMessage message)
   at ARTex.Tools.Mailer.Send(SmtpClient smtpClient, List`1 receivers, String subject, String body, List`1 attachments, String cc) in C:ProjectsKTN.Web.ARTexARTexARTexToolsMailer.cs:line 262

编辑

我摆脱了.处置方法和更改var fstemp = new FileStream(newPath ...现在我可以发送多个附件。但是现在他们随机给出错误或不随机给出错误。 4 次中有 5 次有效。第 4 次它再次给出无法打开文件的错误。第五次它又神奇地工作了。

编辑:解决方案

我使用了一个使用块和两个答案。这奏效了。Tnx 至 @HatSoft 和 @Aghilas Yakoub

尝试使用这些行(在您的CreateDocument方法中):

var fstemp = new FileStream(newPath, FileMode.Open, FileAccess.Read);
return new Attachment(fstemp, title, MediaTypeNames.Application.Octet);

第 3 行在代码中做什么?

attachment.Dispose(); 

看起来在将其添加到"邮件"之前,您正在处理该文件。 因此,在附件完成之前可能会关闭文件。

看起来FileStream fs = File.Create(newPath)中的newPath不正确,没有文件被创建,查看您的代码,newPath将以"Documents"结尾,并且带有扩展名的File.Create文件名,因此它们不会附加任何内容。

相关内容

  • 没有找到相关文章

最新更新