7

我正在尝试使用以下代码在 C# 中使用 gmail SMTP 发送电子邮件

MailMessage message = new MailMessage();
message.To.Add("my email");
message.Subject = "subject";
message.From = new MailAddress("any email");
message.Body = "body";

message.Attachments.Add(new System.Net.Mail.Attachment(path));
SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
smtp.EnableSsl = true;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.UseDefaultCredentials = false;
smtp.Credentials = new System.Net.NetworkCredential("my user", "my pass");

smtp.Send(message);

当我收到电子邮件时,FROM字段已填充my user。我正在使用UseDefaultCredentialsas false。当我查看结果时,FROM字段填充有my user. FROM字段不应该填写any email吗?如何使用any email发件人发送电子邮件?

4

2 回答 2

5

我使用同样的方式使用 GMail 作为服务发送电子邮件。我最初将该.From属性设置为“noreply@mydomain.com”,但电子邮件仍然到达时将 From 标头设置为用于身份验证的帐户。

面对这个问题,我使用了属性ReplyToList.ReplyToList.Add(MailAddress))

编辑:

有关详细信息,请参阅Google Groups 上的此线程。此外,有关 Stack Overflow 的相关答案

于 2012-10-08T17:11:38.720 回答
4

运行您的代码片段后,我得到:

Return-Path: <my user>
Received: from Psi ([80.92.234.64])
        by mx.google.com with ESMTPS id f1sm20531634wiy.2.2012.10.08.10.07.49
        (version=TLSv1/SSLv3 cipher=OTHER);
        Mon, 08 Oct 2012 10:07:49 -0700 (PDT)
Message-ID: <50730865.2152b40a.13ea.28ec@mx.google.com>
Sender: Roman R. <my user>
MIME-Version: 1.0
From: any email
To: my email
Date: Mon, 08 Oct 2012 10:07:49 -0700 (PDT)
Subject: Subject
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable

Body

Sender是用于通过 Google Mail 进行身份验证的电子邮件地址。From是代码中提供的“来自”。接收应用程序可能会混淆两者,其余的看起来就像预期的一样。一些邮件客户端将 From+Sender(当它们不同时)显示为“由 Sender 代表 From 发送”。

您可能会担心 Google Mail 仍会通过Sender字段显示发送电子邮件的帐户,但这就是它的工作原理。您确实从该帐户发送。

而且,另一个可能的原因是From邮件地址本身。如果您将其作为您自己的地址之一添加到您的 Google Mail 帐户(并通过带有链接的测试电子邮件确认),那么 Google Mail 将允许将其放入From字段中。否则它可能会丢弃它并用Sender.

于 2012-10-08T17:15:51.383 回答