C# 设置一个不同的";从「;使用C通过Gmail发送的邮件地址#

C# 设置一个不同的";从「;使用C通过Gmail发送的邮件地址#,c#,.net,email,gmail,C#,.net,Email,Gmail,我使用的是一个简单的邮件发送者类,它使用System.Net.mail。我需要更新我的应用程序,以便不同的用户可以通过它发送电子邮件(使用相同的smtp帐户),但“发件人”地址应该是导致发送电子邮件的用户的地址。我尝试设置MailMessage的From属性,并将From地址发送到MailMessage的构造函数中,但这些方法都有效。我确信我遗漏了一些简单的东西,或者不理解邮件API是如何工作的。有人能帮忙吗 这里是我的MailSender类,它基本上包装了MailMessage、Network

我使用的是一个简单的邮件发送者类,它使用
System.Net.mail
。我需要更新我的应用程序,以便不同的用户可以通过它发送电子邮件(使用相同的smtp帐户),但“发件人”地址应该是导致发送电子邮件的用户的地址。我尝试设置
MailMessage
From
属性,并将From地址发送到
MailMessage
的构造函数中,但这些方法都有效。我确信我遗漏了一些简单的东西,或者不理解邮件API是如何工作的。有人能帮忙吗

这里是我的MailSender类,它基本上包装了
MailMessage
NetworkCredential
SmtpClient
,以提供一个简单的邮件发送接口

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;
    }
}

我刚刚通过测试另一个SMTP服务器找到了答案。这实际上是由于GMail不允许任何其他发件人地址。这适用于其他SMTP服务器


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

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


mail.ReplyTo=新邮件地址(“SomeOtherAddress@mycompany.com");

这个线程有点老了,但我刚刚发现,要想使用Google服务器在“发件人”字段中使用不同的地址从脚本发送电子邮件,您必须将该地址添加到用于身份验证的Gmail帐户的“发送方式”列表中。 因此,请登录您用来对Google服务器进行身份验证的用户的Gmail帐户,进入配置、帐户,并按照提供的3个简单步骤将所需的发件人地址添加到发送方式列表中。 这解决了我的问题 希望它能帮助别人
Josu

IIRC,GMail会根据您的帐户设置对其进行修改。很可能谷歌不允许您从帐户发送邮件,除非您传递用于身份验证的凭据。@leppie和@Mikael Svenson:也使用了我们办公室的smtp。同样的结果。可能是谷歌和你的办公室SMTP都拒绝转发@Mikael Svenson、@leppie、@smirkingman:你是对的。GMail不允许设置任何其他发件人地址。如果您伪造发件人地址/使用该域不允许的服务器,则您的邮件可能会被封为垃圾邮件。@CodeInChaos:否。所有电子邮件都已发送并发送到我的收件箱(和其他收件箱)中。很好。他们的“发件人”地址与发送他们的GMail帐户相同,而不是我想要的地址。切换到另一个smtp服务器就解决了这个问题。当然,谷歌更改邮件来源的邮件是正常的,因为smtp服务器和电子邮件匹配。但是,如果您使用另一个smtp,则邮件中的邮件可能会被过滤。特别是如果
From
字段中的电子邮件域使用
SPF
@CodeInChaos:这不会发生,GMail不会将收到的实际发件人和发件人地址不同的任何邮件标记为垃圾邮件。至少不是因为我在测试时发送的邮件。无论如何,这与IMHO手头的问题无关。但是谢谢你的建议。