代码之家  ›  专栏  ›  技术社区  ›  Steffen

通过C_发送邮件时如何实现发件人ID?

  •  6
  • Steffen  · 技术社区  · 15 年前

    我刚刚在他们83号的播客中听到Joel&Jeff谈论了发件人ID,我突然想到,这正是我工作的网站所需要的。

    大约90%的从服务器发送的电子邮件被退回或类似,可能是因为服务器没有“验证”。

    我为服务器准备了一个SPF记录,但这也差不多。

    所以,既然stackoverflow已经解决了这些问题,我想发送者ID一定是解决问题的方法。

    据我在维基百科上所知,它要求你在发送邮件时修改邮件头——我该如何从C开始呢?

    另外,我需要什么来设置dns-wise等才能使其工作?

    还是我走错了路?

    编辑:我正在使用C中的标准smtpclient类发送邮件,我确实包含了邮件正文的纯文本和HTML版本。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Joshua    15 年前

    如果您代表另一个用户发送邮件,并且希望它被接受,则可能需要执行以下操作:

    在邮件对象中:

    mail.To = new MailAddress("email@tosomeone.com", "To Someone");
    mail.From = new MailAddress("sendinguser@fromsomeone.com", "Sending User");
    mail.Sender = new MailAddress("serveraddress@your-domain-with-spf.com", "Your Server");
    mail.ReplyTo = new MailAddress("sendinguser@fromsomeone.com", "Sending User");
    

    这将生成SPF验证工作所需的适当头(假设服务器将其设置为默认值,则他们可以选择要验证的部分)。这将使电子邮件看起来像(在Outlook中)

    发件人:代表发送用户的服务器
    致:某人

    大多数SPF协议将验证 Sender: 头来确定发送域是否允许或拒绝它,因此无论您是从谁发送它,这都需要来自您的域。

    此外,您可能需要再次检查 your SPF records set up right 您的IP地址不在 blacklist 比如Spamhaus。检查呼叫的实际返回文本通常会告诉您为什么被5.something错误阻止。

        2
  •  2
  •   NetMage    15 年前

    我不明白为什么您需要对发送者ID/SPF进行任何头更改。在您的记录就位后,您只需确保传出的消息来自:一个在DNS中的SPF记录中具有匹配的已发布发送(公共)IP的域。

    但是,我认为您可以检查mailmessage.headers以查看正在发送(或向自己发送消息)的邮件头,以便根据您的SPF记录类型确定接收邮件服务器将如何计算域以匹配您的SPF记录。