0

我对 smtp 没有什么疑问

如果主机是 gmail,我使用此代码发送邮件,那么它的行为不同:

foreach (string host in hosts)
{
    SmtpClient sc = null;
    try
    {
        if (emailDomain.ToLower() == "gmail.com")
        {
            MailSend.MailSendApp.EventLog.WriteEntry("mail to gmail.com");

            sc = new SmtpClient("smtp.gmail.com", 587);
            sc.UseDefaultCredentials = false;
            sc.DeliveryMethod = SmtpDeliveryMethod.Network;
            sc.Credentials = new NetworkCredential("UID@gmail.com", "PWD");
            sc.EnableSsl = true;
        }                                    }
        else
        {
            sc = new SmtpClient(host);

            sc.Send(mailMessage);

            break;

        }

是否可以从 smtp 获得答复:1. 电子邮件已到达 2. 如果邮件存在

谢谢

4

2 回答 2

1

如果您想收到电子邮件已到达的通知,您需要发送带有送达通知选项的电子邮件。

mailMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;

如果该电子邮件不存在,您将收到一封返回到您的发件人地址的电子邮件,而不是您的 SMTP 类。

简而言之,单纯从 SMTP 类的角度来确定这两件事并不容易。

于 2012-04-04T07:24:30.513 回答
0

过去,您可以直接查询电子邮件地址是否存在于给定服务器上(VRFY userSMTP 命令)。然后,垃圾邮件诞生了,几乎所有的电子邮件服务器都删除了该功能,因为垃圾邮件发送者会使用机器人来查询每个邮件服务器上可能的电子邮件收件人以构建垃圾邮件列表。

您仍然会收到一份普通的退回报告(电子邮件返回到回复地址,表明交付失败)。我使用一个名为Boogie Tools的工具来自动处理退回邮件。

由于类似的原因,Gmail 不提供投递或已读回执(尽管某些电子邮件服务器仍可选择允许)……滥用可能性太大。

于 2012-04-04T07:23:38.040 回答