如何在使用Gmail SMTP服务器时更改发件人地址

29

我想通过gmail从A发送一封带有HEADERCONTENT的电子邮件给B

如何使用PHP实现?

我已经指定了FROM (from@example.com),但当我收到邮件时,仍然是从我的gmail账户(abc@gmail.com)发出的。

$mail->From = "from@example.com";
$mail->FromName = "Mailer";
$mail->AddAddress("abc12@163.example", "Josh Adams");// name is optional
$mail->AddReplyTo("abc12@qq.example", "Information");

如何更改FROM部分?


如果您可以访问“from@example.com”电子邮件,您可以在Gmail帐户中设置该地址并使用它发送电子邮件。但它会向该地址发送激活代码,如果您无法访问该地址,则无法设置。 - sarkiroka
6个回答

61
短答案是 - 你不能。
Google在通过其SMTP服务发送的邮件中重写发件人和回复地址的标头,使其与您的gmail帐户相关。
gmail的SMTP功能并不旨在成为开放或中继服务。如果它允许任何From标头的值,那么将显着削弱Google在垃圾邮件服务中的地位,因为没有办法验证发件人的凭据。
您需要考虑替代方案。当您完成脚本/应用程序/网站的托管时,您打算如何托管:几乎所有的托管解决方案(共享/ vps /专用服务器)都将预先配置电子邮件传输解决方案:无论是在*nix上的sendmail或postfix,还是在Windows上的IIS。
如果您坚持使用gmail,则可以:
- 设置一个专用的myapp@gmail.com帐户 - 如果您拥有所谓发送者的域名,请使用免费的Gmail for Domains,并设置一个myapp@mydomain.example帐户。

====

2015年6月编辑

有人建议GMail允许通过不同地址发送邮件。据我所知,这是通过GMail网络应用程序发送邮件,并利用您现有的外部SMTP服务器,与原问题无关。

====

2013年11月编辑

由于这篇文章仍然有一些投票,因此需要快速更新。

谷歌已经取消了他们的免费GMail域名服务。现在有很多其他的免费服务可供选择。其中一个值得注意的是Mandrill - 一个用于事务性邮件(例如电子商务订单等)的一对一电子邮件服务。它由MailChimp运营,他们几乎知道有关大量发送电子邮件的所有信息。他们还提供每月12k免费额度,非常好用。


2
其他第三方邮件传输代理(MTA)如Gmail都是可以接受的。由于Gmail存在一些限制,您能否推荐另一个MTA? - omg
我来晚了,但我正在尝试类似这样的东西,你能帮我回答我的问题吗?http://stackoverflow.com/questions/31173078/send-emails-with-a-new-domain - Gocht
可以的!看看@casaram的回答。 - evilReiko
如果您将其他发件人地址添加到您的帐户中,那么您就可以这样做。 - rustyx

10

以下是需要翻译的内容:

这个问题和正确答案可能与以下内容相关:

在使用 Gmail 作为 SMTP 时,您可以设置不同的“发件人”地址吗?

Gmail 要求您在将邮件发送为该电子邮件地址之前验证发件人地址。因此,您需要在个人 Gmail 帐户中添加一个新的发件人并进行验证。

这样做将允许您使用youremail@gmail.com进行身份验证并从from@example.com发送电子邮件。


这只是要求我为我的另一个电子邮件地址插入新的SMTP详细信息 :( - Phil

1

与其他人不同,我将冒险假设您所说的字母是指电子邮件...

但是当您提到应该包括“标题和内容”时,我不确定您的意思。您想转发电子邮件吗?您希望在标题中看到来自A的电子邮件似乎来自B的Gmail帐户吗?您正在构建某种Gmail客户端吗?

使用PHP发送电子邮件的最简单方法是使用mail函数。此示例直接来自他们的文档:

$to      = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);

如果你想要从A的 Gmail 显示邮件头,而不仅仅是改变发件人/回复地址部分,你需要使用 Gmail 作为 SMTP 服务器。我不知道是否可以在脚本级别设置。


我只是使用本地的 PHP 邮件函数和我答案中的代码。我将其复制并将 "nobody@example.com" 更改为您的电子邮件地址。您使用哪个版本的 PHP? - Anthony
其他第三方邮件传输代理,如Gmail都是可以接受的。你知道哪个公共MTA没有这样的限制吗? - omg
不想听起来卑鄙,但如果您能给我的回答点个赞,那么这一个小时的交流就会更有价值。 - Anthony
1
好的,我已经给你投票了 :) 但是你没有理解我的意思。 我不想从我的托管环境发送... - omg
是的,我想要一个公共且免费的SMTP服务器,我不想自己设置它。 - omg
显示剩余18条评论

1
上面的答案不太正确。
只要您拥有其他电子邮件地址,您绝对可以指定任何发件人。
正如帮助页面所解释的那样:
  1. 在计算机上打开Gmail
  2. 在右上角,单击设置
  3. 单击帐户和导入帐户选项卡。
  4. 在“发送邮件”部分,单击添加另一个电子邮件地址
  5. 输入您的姓名和要发送的地址。
  6. 单击下一步,然后单击发送验证
  7. 对于学校或工作帐户,请输入SMTP服务器(例如smtp.gmail.com或smtp.yourschool.edu)以及该帐户上的用户名和密码。
  8. 单击添加帐户
一旦成功添加了该电子邮件, 您就可以代表新电子邮件地址在Gmail中发送电子邮件。

当您通过Google SMTP发送电子邮件时,Google不会以这种方式重写您的发件人电子邮件。


1
你需要进入GMAIL设置并添加新的别名。
你将被要求提供SMTP信息,这基本上是无用的,因为您使用SMTP发送电子邮件,但问题在于,如果您的别名位于Google Suite域中,则只需进行简单的电子邮件确认即可添加别名!
一旦您有了别名,就可以更改SMTP电子邮件中的“发件人”头。

注意:你无法更改“发件人”地址为whatever@dude.example,这是 Gmail 的工作方式,并且也是为什么它值得信赖的原因。


0

如果您想使用Gmail的原因是因为您不想设置MTA(根据this答案评论中所述的原因),您有两个选择:

  1. 如果Web服务器在您的家庭/工作场所,请使用您的ISP的SMTP服务器
  2. 如果Web服务器位于专用托管中心,请询问他们要使用哪个SMTP服务器。

不,一个公共且免费的MTA更好: - omg
更好在哪方面?为什么您不想使用ISP的SMTP服务器? - Espo
我不想额外支付费用 :) - omg
1
你用的是哪个网络服务提供商?我从来没有听说过有一个会收费让你使用他们的SMTP服务器的。 - Espo
重点在于漫游的自由——通常,在客户漫游时,许多ISP不允许来自其他网络的SMTP访问。此外,许多ISP不允许设置自定义“发件人:”地址。而且,许多廉价的ISP根本不提供SMTP服务,或者需要额外收费。 - Alexander Shcheblikin
@AlexanderShcheblikin 很可能他不得不转向一些企业合同或类似的方式,以获得访问ISP SMTP的权限。 - peterh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接