winform 使用SMTP发送带附件的邮件,发送成功后附件提示正在被使用

原始牛 2014-04-21 04:18:55
大家好,最近我在改一个自动发邮件的程序,本以为很快就能做好,直到测试的时候才发现有个问题。邮件在发送成功后,双击附件时就提示 文件正在被另外一个程序占用。
下面是我发送邮件的代码:


//MailQueue 是我做的一个队列 里面包含发送邮件所需要的 收件人 CC 主题 邮件内容 以及附件所在的位置。
MailQueue mlq = mlqueue.GetMailQueue();
//while mail recipients is blank , we will execute this job.
try
{
if (mlq.Mail_to != "")
{
//MailAddress mailto;
//MailAddress mailcc;

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(strMailserver);
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential(strMailaddress, strMailpwd);
client.DeliveryMethod = SmtpDeliveryMethod.Network;

System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
if (!File.Exists(mlq.Mail_attach))
{
message.To.Add(new MailAddress(mlq.Mail_admin));
mlq.Mail_subject = mlq.Mail_taskname + " 未发现邮件附件。";
}
else
{
//我的邮件接收人是以;隔开的
string[] mailtoarr;
mailtoarr = mlq.Mail_to.Split(';');
for (int i = 0; i < mailtoarr.Length; i++)
{
if (mailtoarr[i] != "")
message.To.Add(new MailAddress(mailtoarr[i]));
}

string[] mailccarr;
mailccarr = mlq.Mail_cc.Split(';');
for (int i = 0; i < mailccarr.Length; i++)
{
if (mailccarr[i] != "")
message.CC.Add(new MailAddress(mailccarr[i]));
}

}
MailAddress from = new MailAddress(strMailaddress, "ReportMachine/ISD");
message.Priority = MailPriority.Normal;
message.From = from;
message.Subject = mlq.Mail_subject;
message.Body = mlq.Mail_body;
message.IsBodyHtml = true;

System.Net.Mail.Attachment attachment = new System.Net.Mail.Attachment(mlq.Mail_attach);
message.Attachments.Add(attachment);
message.BodyEncoding = System.Text.Encoding.UTF8;
message.IsBodyHtml = true;
client.Send(message);

writelog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 邮件发送成功!任务名称:" + mlq.Mail_taskname);
//Thread.Sleep(5000);
//if (File.Exists(mlq.Mail_attach))
// File.Delete(mlq.Mail_attach);
}
}
catch (Exception err)
{
writelog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 邮件发送失败!任务名称:" + mlq.Mail_taskname + " [错误代码]" + err.Message);
}


还烦请大家帮忙,很是郁闷啊。我以前也是这么写的也没有过这个问题
...全文
420 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 楼主 lnx_cheung 的回复:
邮件在发送成功后,双击附件时就提示 文件正在被另外一个程序占用。
附件应该在copy文件上处理!
ysd_xwl 2014-04-21
  • 打赏
  • 举报
回复
学习了,没遇到过这种情况
原始牛 2014-04-21
  • 打赏
  • 举报
回复
attachment 需要 dispose 晕啊!
原始牛 2014-04-21
  • 打赏
  • 举报
回复
还有就是 当我关闭发送邮件的程序 打开EXCEL的时候就是正常的 。
原始牛 2014-04-21
  • 打赏
  • 举报
回复
我的流程是 1.在配置文件里设置好生成报表的程序运行时间 以及 发送邮件的时间 。 当时间吻合的时候 生成报表 , 然后再发送邮件。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧