【问题标题】:How can I know if my sent email was successful [duplicate]我怎么知道我发送的电子邮件是否成功[重复]
【发布时间】:2018-07-18 16:28:06
【问题描述】:

我正在尝试开发一个向多个收件人发送电子邮件的应用程序。

我正在逐行读取文本文件中的所有邮件地址。但我想知道..例如,我的列表中有 50 个邮件地址,而数字 45 出了点问题。

我如何告知用户这件事,是否可以发送列表的其余部分?

private void Senmail(IEnumerable<string> list)
{
    var mes = new MailMessage {From = new MailAddress(_uname.Trim())};
    var col = new MailAddressCollection();
    foreach (string adres in list)
    {
        col.Add(adres);
    }

    for (int i = 0; i < GetList().Count(); i++)
    {
        mes.To.Add(col[i].Address);
    }
    mes.Subject = txtbody.Text;
    mes.Body = txtmail.Text;
    mes.Attachments.Add(new Attachment(_filename));

    var client = new SmtpClient
    {
        Port = 587,
        Host = "smtp.gmail.com",
        EnableSsl = true,
        Timeout = 5000,
        UseDefaultCredentials = false,
        Credentials = new NetworkCredential(_uname, _pass),
    };
    object userState = mes;
   client.SendAsync(mes,userState);
   client.SendCompleted += client_SendCompleted;

    MessageBox.Show("ok");
}

void client_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
    if (e.Error!=null)
    {
      //
    }
}

【问题讨论】:

  • 在此上下文中定义“成功”。
  • 如果邮件发送到 SMTP 没有错误,那么它被成功发送到 SMTP。在那之后,它就不在你的手中了。
  • 唯一可以合理确定的方法是通过与目标域 DNS MX 记录中的指定 SMTP 服务器对话来“手动”传递消息,而不是使用第 3 方为您中继。跨度>

标签: c#


【解决方案1】:

由于您使用的是 Gmail,因此您的选择非常有限。如果无法访问 SMTP 主机,充其量您会得到一个例外,但如果您收到 200 响应,那么您在技术上已经完成了交付合同,并且任何后续响应都将在事后交付(电子邮件不存在,因为示例)。

您可能会在 MailMessage 的 DeliveryNotificationOptions 属性下找到一些额外的选项并处理异常,但这些选项是有限的,实际上并不能提供我认为您正在寻找的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-27
    • 2012-01-18
    • 2016-06-24
    • 2013-06-03
    • 2017-03-26
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    相关资源
    最近更新 更多