【发布时间】:2013-05-08 13:37:07
【问题描述】:
我有一个名为 SchedulerService 的类,其中有一个 SendMail 函数,当需要在某个时间发送电子邮件时调用该函数。当我调用 SendMail 函数时,我传入一个对象,该对象包含有关向谁发送电子邮件以及电子邮件来自谁的信息。现在,我添加了一个 SendCompleted 处理程序,以便我可以重新发送电子邮件,以防万一发生导致它无法发送的情况。我有这个发送邮件的代码:
var recipients = EmailTo.Split(',').ToList();
if (String.IsNullOrEmpty(EmailFrom))
EmailFrom = recipients[0];
using (MailMessage message = new MailMessage())
{
message.From = new MailAddress(EmailFrom);
recipients.ForEach(a => message.To.Add(new MailAddress(a)));
message.Attachments.Add(new Attachment(LocationOfResults));
message.Subject = String.Format("{0:MM-dd-yyyy} Results for task: {1}.", DateTime.Now, Description);
message.Body = "Attached is the results file specified for the task: " + Description;
smtpClient.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
smtpClient.UseDefaultCredentials = true;
smtpClient.SendAsync(message, null);
}
这是事件处理程序
private void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
if (e.Cancelled)
{
MailMessage mail = (MailMessage)e.UserState;
using (mail)
{
smtpClient.Send(mail);
}
}
if (e.Error != null)
{
Log(e.Error.ToString() + " in SendCompletedHandlerEvent", EventLogEntryType.Error);
}
}
问题是,我发现这样做不起作用,因为 To 和 From 字段为空,这会在发送电子邮件时导致错误。我应该如何从未能发送的电子邮件中回收收件人/发件人字段?
【问题讨论】:
-
从我看到的地方我会说问题出在您的 UserState 属性中,因为这是您从中加载邮件的地方,但您没有提供足够的代码来查看问题的确切位置。 ..
-
哦,对不起。我刚刚添加了用于发送电子邮件的代码。我希望这会有所帮助。
-
你不能从不同的线程同步发送吗?
-
所以,最初我试图进行修复,因为数据库锁定导致电子邮件无法发送。但是,我不确定这是否是解决问题的合适方法。
-
不幸的是,您这样做的方式非常错误。只是为了说明 - 如果它第二次失败怎么办?即使您修复了错误,从通知您邮件发送完成的事件发送另一封邮件的完整机制也是错误的。
标签: c#