【问题标题】:Send Email from Alias Address using SMTP使用 SMTP 从别名地址发送电子邮件
【发布时间】:2020-01-10 10:00:03
【问题描述】:

这个问题已经被问过很多次了,但我仍然在努力寻找一个可行的解决方案。

请考虑以下代码:

    SmtpClient mailClient = new SmtpClient("outlook.office365.com");
    MailMessage msgMail = new MailMessage();
    msgMail.From = new MailAddress("validUser@domain.com", "displayName@aliasDomain.com");
    mailClient.UseDefaultCredentials = false;
    mailClient.Credentials = new NetworkCredential("validUser@domain.com", "password");
    mailClient.EnableSsl = true;
    MailAddress sendMailTo = new MailAddress("someValidUser@someValidDomain.com", "Mark Twain")
    msgMail.To.Add(sendMailTo);
    msgMail.Subject = "Test Subject";

    msgMail.Body = "Email content";
    msgMail.IsBodyHtml = true;

    mailClient.Send(msgMail);
    msgMail.Dispose();

someValidUser(收件人)收到电子邮件时,我希望它显示显示名称:displayName@aliasDomain.com,而不是注册到validUser@domain.com 帐户的用户名。

我怎样才能做到这一点?

【问题讨论】:

    标签: c# smtp


    【解决方案1】:

    尝试将显示名称添加到邮件标题:

    msgMail.Headers.Add("Sender", "displayName@aliasDomain.com");
    

    我希望这会有所帮助。

    【讨论】:

    • 这可能与您的问题有关吗? stackoverflow.com/questions/6209163/…
    • 是的,这正是我想要实现的,但我没有使用 Gmail,而是使用 Outlook 的 SMTP 服务器。同样适用吗?
    【解决方案2】:

    如果您重置 MailMessage 对象中的发件人地址,您应该能够从别名电子邮件地址发送。完整代码见下文。

    var fromAddress = new MailAddress("root@bobloblaw.com", "Root");
    var toAddress = new MailAddress("plaintiff@gmail.com", "Plaintiff");
    string fromPassword = "password";
    string subject = "Your Lawsuit";
    string body = "I regret to inform you...";
    
    var smtp = new SmtpClient
    {
        Host = "smtp.gmail.com",
        Port = 587, 
        EnableSsl = true,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        UseDefaultCredentials = false,
        Credentials = new NetworkCredential(fromAddress.Address, fromPassword),
        Timeout = 20000
    };
    using (var message = new MailMessage(fromAddress, toAddress) 
        {
            Subject = subject, 
            Body = body, 
            From = new MailAddress("bob@bobloblaw.com", "Bob Lob") 
        })
    { 
        smtp.Send(message); 
    }
    

    【讨论】:

    • @GekaP 你能分享更多信息吗?我认为这取决于您的 smtp 服务器。例如,上面的方法对我有用,而 gmail 没有问题。
    • 我使用 Office 365 邮件服务。他们的 smtp 服务器不关心您在 MailMessage 类中提供的 DisplayName - 它总是被您的 365 邮件帐户上配置的 Display Name 覆盖。我尝试了很多不同的东西,但不幸的是,对此无能为力。我正在考虑转移到另一个支持此选项的邮件服务。
    【解决方案3】:

    如果您只是将别名添加到 Office 365 邮箱,这可以工作。然后使用 From 字段中的 Alias 和 Credentials 的原始用户名+密码。

    收件人将看到您在“发件人”字段中指定的名称+别名,而不是帐户的用户名。刚刚使用 PowerShell Send-MailMessage 和 C# 尝试过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-05
      • 2013-02-16
      • 2023-03-16
      • 2011-09-06
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      • 2016-04-17
      相关资源
      最近更新 更多