首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步发送邮件时出错

异步发送邮件时出错
EN

Stack Overflow用户
提问于 2009-06-04 01:29:55
回答 2查看 995关注 0票数 0

我正在尝试使用.Net的SMPTClient类异步发送带有附件的电子邮件:

代码语言:javascript
复制
SmtpClient smtp = new SmtpClient(MailServer);

                smtp.SendAsync(mailMsg, ""); 

                smtp.SendCompleted += new SendCompletedEventHandler(MailSentCallback);

                mailMsg.Dispose();

一旦邮件成功发送,我需要从我的服务器中删除附件文件。

代码语言:javascript
复制
  private static void MailSentCallback(object sender, AsyncCompletedEventArgs e)
        {
           File.Delete(myAttachment);
        }

但是当这个方法被调用时,我得到了一个错误:“进程无法访问文件'myAttachment‘,因为它正被另一个进程使用。”此外,邮件没有被发送我使用delivered.If方法而不是SendAsync,那么邮件传递是有效的。

这里我漏掉了什么?

感谢您的阅读!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-06-04 01:51:08

好的,首先,正如mundeep所说,在SendAsync调用之前连接事件处理程序。

此外,不要在你发送的地方发送消息,因为在这一点上,它可能还没有‘Dispose()’……当SmtpClient试图处理消息时,您基本上是在潜在地破坏消息。

现在,对于您的实际问题,我也遇到了同样的问题,并且在回调期间,文件仍然由SmtpClient保留在内存中,所以您确实不能删除它。我认为在文件系统中附加一个文件是最好的,只有当它是一个持久文件时才是最好的。

如果您正在尝试发送临时文件,请将其加载到MemoryStream中,并从中创建一个Attachment

我突然想到,也许你可以解决附件删除问题,方法是先在回调处理程序中处理Attachment对象,然后再尝试删除文件……虽然我会非常仔细地测试这不会引起其他副作用。

票数 1
EN

Stack Overflow用户

发布于 2009-06-04 01:41:03

首先,您应该在执行SendAsync之前连接好SendCompletedEventHandler。即:

代码语言:javascript
复制
//Wire up SendCompetedEventHandler
smtp.SendCompleted += new SendCompletedEventHandler(MailSentCallback);
//Send the Message
smtp.SendAsync(mailMsg, ""); 

其次,在哪里声明了myAttachment?它的范围是什么?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/948176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档