【发布时间】:2014-11-12 17:43:58
【问题描述】:
当我的应用程序崩溃并附带描述问题的附件时,我正在尝试发送电子邮件(从数据库收集错误详细信息)。我尝试在不将其附加到电子邮件的情况下创建文件,并且它工作正常(使用从数据库收集的数据)。这是一个非常接近我所拥有的示例:
MailMessage mailMessage = new MailMessage();
mailMessage.To.Add("Address1@test.com");
mailMessage.From = new MailAddress("Address2@test.com");
mailMessage.Subject = "Subject";
mailMessage.Body = "Body";
FileStream fs = new FileStream("Test.txt", FileMode.Create, FileAccess.ReadWrite);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("Text");
Attachment attach = new Attachment(fs, "Test.txt", "Text/Plain");
mailMessage.Attachments.Add(attach);
SmtpClient smtp = new SmtpClient();
try
{
smtp.Send(mailMessage);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message + Environment.NewLine + ex.InnerException);
}
sw.Close();
我也试过了:
MailMessage mailMessage = new MailMessage();
mailMessage.To.Add("Address1@test.com");
mailMessage.From = new MailAddress("Address2@test.com");
mailMessage.Subject = "Subject";
mailMessage.Body = "Body";
using (FileStream fs = new FileStream("Test.txt", FileMode.Create, FileAccess.ReadWrite))
{
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("Text");
Attachment attach = new Attachment(fs, "Test.txt", "Text/Plain");
mailMessage.Attachments.Add(attach);
SmtpClient smtp = new SmtpClient();
try
{
smtp.Send(mailMessage);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + Environment.NewLine + ex.InnerException);
}
}
文件附加到电子邮件中,有大小,但为空。我做错了什么?
提前致谢。
【问题讨论】:
-
在附加文件之前尝试完成写入文件(关闭 sw)。
-
你检查你的路径是否正确,请提供catch()产生的错误输出
-
感谢 cmets。 jac,在附加之前无法关闭文件,否则会崩溃,说明文件已关闭。 esunic,没有产生错误。该文件创建时没有错误,但为空。
-
如果你在
smtp.Send()之前这样做sw.Close()它应该可以工作。正如@esunic 所说,StreamWriter执行刷新,但仅在关闭时执行。 -
如果您将
sw.Close()放在smtp.Send()之前,您的原始代码将起作用
标签: c# email smtp attachment