使用 C 为通过 Gmail 发送的邮件设置不同的“发件人”地址#

Setting a different "From" address for mail sent via Gmail using C#

提问人:MAK 提问时间:11/22/2010 最后编辑:abatishchevMAK 更新时间:7/29/2019 访问量:4504

问:

我正在使用一个简单的邮件发件人类,该类使用 .我需要更新我的应用程序,以便不同的用户可以通过它发送电子邮件(使用相同的 smtp 帐户),但“发件人”地址应该是导致发送它的用户的地址。我尝试设置 的属性,并将 from 地址发送到 but nose 的构造函数中。我确定我遗漏了一些简单的东西,或者不了解邮件 API 的工作原理。谁能帮忙?System.Net.MailFromMailMessageMailMessage

在这里,我的 MailSender 类基本上包装了 ,并提供了一个简单的邮件发送接口。MailMessageNetworkCredentialSmtpClient

class MailSender
{
    private NetworkCredential credential;
    private String SenderAddress;
    private SmtpClient client;

    public MailSender(String ServerURL, String account, String password, String FromAddress = null, int port = -1, bool UseSSL = true)
    {
        if (port > 0)
        {
            client = new SmtpClient(ServerURL, port);
        }
        else
        {
            client = new SmtpClient(ServerURL);
        }
        credential = new NetworkCredential(account, password);
        client.UseDefaultCredentials = false;
        client.EnableSsl = UseSSL;
        client.Credentials = credential;

        if (FromAddress != null)
        {
            SenderAddress = FromAddress;
        }
        else
        {
            SenderAddress = account;
        }
    }

    public bool SendMessage(String to, String subject, String body)
    {
        try
        {
            MailMessage message = new MailMessage(SenderAddress, to, subject, body);
            message.From = new MailAddress(SenderAddress, "tester");

            message.IsBodyHtml = true;
            client.Send(message);
        }
        catch
        {
            return false;
        }
        return true;
    }
}
C# .net 电子邮件 gmail

评论

1赞 leppie 11/22/2010
IIRC,GMail会根据您的帐户设置对其进行修改。
2赞 Mikael Svenson 11/22/2010
很有可能,Google不允许您从您传递的用于身份验证的凭据以外的帐户发送邮件。
0赞 MAK 11/22/2010
@leppie 和 @Mikael Svenson:也用我们办公室的 smtp 尝试过。相同的结果。
0赞 smirkingman 11/22/2010
可能是 Google 和您的办公室 SMTP 都拒绝中继 en.wikipedia.org/wiki/Open_mail_relay
0赞 MAK 11/22/2010
@Mikael @leppie @smirkingman Svenson:你是对的。GMail 不允许设置任何其他发件人地址。

答:

4赞 MAK 11/22/2010 #1

我刚刚通过使用另一台SMTP服务器进行测试找到了答案。这实际上是由于 GMail 不允许任何其他来自地址引起的。这适用于其他 SMTP 服务器。

感谢 leppie、Mikael Svenson 和 smirkingman 的建议。

评论

1赞 CodesInChaos 11/22/2010
如果您伪造发件人地址/使用该域不允许的服务器,您的邮件可能会被阻止为垃圾邮件。
0赞 MAK 11/22/2010
@CodeInChaos:没有。所有电子邮件都已发送并顺利进入我的收件箱(和其他收件箱)。他们只是拥有与用于发送它们的 GMail 帐户相同的“发件人”地址,而不是我希望它拥有的地址。切换到另一台 smtp 服务器解决了该问题。
0赞 CodesInChaos 11/23/2010
当然,谷歌更改“发件人”的邮件是可以的,因为 smtp 服务器和电子邮件匹配。但是,如果您使用另一个不这样做的 smtp,则可能会过滤来自邮件的邮件。特别是,如果字段中电子邮件的域使用 .FromSPF
0赞 MAK 11/23/2010
@CodeInChaos:这没有发生,GMail不会将实际发件人和发件人地址不同的任何收到的邮件标记为垃圾邮件。至少对于我在测试时发送的邮件不是。无论如何,恕我直言,这与手头的问题无关。但谢谢你的建议。
2赞 Yuval 6/21/2016 #2

Gmail 不允许任何其他发件人地址。 它可能会对您有所帮助,您可以通过以下方式更改重播:

邮件。ReplyTo = 新 MailAddress ( “[email protected]");

2赞 Josu Lekaroz 7/29/2019 #3

这个线程有点旧,但我刚刚发现,为了能够在使用 Google 服务器从脚本发送电子邮件的 from 字段中拥有不同的地址,您必须将该地址添加到用于身份验证的 Gmail 帐户中的“代理发送”列表中。 因此,登录到您用于对 Google 服务器进行身份验证的用户的 Gmail 帐户,转到“配置”、“帐户”,然后按照提供的 3 个简单步骤将所需的发件人地址添加到“代理发送”列表中。 这解决了我的问题 希望它对某人有所帮助 乔苏