使用核心PHP mail()通过Gmail SMTP发送邮件

17

在不使用任何外部类的情况下,能否通过Gmail SMTP在核心PHP中发送邮件?


1
更好的问题是为什么你想要这样做呢? :) - MetalFrog
2
您需要使用外部类OpenSSL扩展。这是因为Gmail 要求 SSL/TLS,而您无法使用PHP核心完成此操作。 - DaveRandom
1
两个评论都是不正确的。我同意只说 mail() 而不是包含一个 600 行的库是理想的。 - gavanon
3
更好的问题是,为什么你要以那种态度去做任何事情。我经常访问论坛通过搜索来解决晦涩难懂的问题,而第一个回答总是像你这样的人,一直在问“为什么”。为什么不能呢?也许这是我们的工作,也许是我们为了朋友在做某件事情,也许只是想知道是否可能。为什么不停止问为什么呢?如果你真的知道答案,那就帮忙做出贡献 - Ayelis
@Ayelis 常常情况下,仅通过文字表达讽刺是很困难的,虽然我希望一个笑脸就足够了——这在过去三年里确实有效。这是一种简洁的方式来表达:“有更好的选择,你已经有一个更好的解决方案在等待着你,只需要深入挖掘一下。”如果你对此感到冒犯,那么说明你还没有深入挖掘。 - MetalFrog
显示剩余4条评论
6个回答

24

关于这个问题存在很多误解。使用PHP的简单“mail()”命令可以完全通过gmail发送电子邮件。而且这是非常容易的。

安装SSMTP:

sudo apt-get install ssmtp

编辑其设置文件:

sudo nano /etc/ssmtp/ssmtp.conf

在内部,让它类似于这个样子,但使用您自己的凭证:

mailhub=smtp.gmail.com:587
AuthUser=youremail@gmail.com
AuthPass=password
UseSTARTTLS=YES

# You can only do this if you've verified your domain with Gmail.
# If you haven't, delete, or add a # before this
hostname=yourwebsite.com

FromLineOverride=YES

最后,打开您的php.ini文件,搜索"sendmail_path"关键字,并使用以下值:
sendmail_path = /usr/sbin/ssmtp -t

就是这样!在您的PHP中测试它,使用简单的1行邮件函数:

mail('to@address.com', 'Subject', 'Message', 'From: Your name <youremail@gmail.com>');

Gmail安全性更新

Gmail现在默认已经将此功能阻止。您仍然可以通过访问以下链接执行此操作:http://www.google.com/settings/security/lesssecureapps

请将此功能打开


这句话的意思是:只有在你已经通过 Gmail 验证了你的域名之后,你才能进行此操作。这与 Gmail 有关,你需要在 Gmail 上验证你的域名才能进行相应的操作。 - VSB
1
这是一个非常棒且直接的解决方案 :) 我花了很长时间来克服这种情况,但幸运的是这种方法完全没有问题。 - VSB
2
感谢您的反馈!很遗憾所选答案是错误的。至于使用已验证的域名,这仅适用于您希望发件人地址与您的 Gmail 地址不同的情况,例如如果您拥有一个网站并希望拥有专业的发件人地址。但是,您不能使用任何发件人地址,例如 bill@microsoft.com,除非您可以证明您已经可以访问此电子邮件。如何通过 Gmail 验证此电子邮件: 登录 Gmail,在“设置”>“帐户”部分中,单击“添加您拥有的另一个电子邮件地址”。输入您的电子邮件地址,Google 将发送一封带有确认链接的验证电子邮件。 - gavanon
1
仍然可以这样做。 Gmail 最近默认禁用了此功能,现在需要您启用“不安全应用程序”。您可以在此处执行:http://www.google.com/settings/security/lesssecureapps。 - gavanon
1
可以确认这仍然有效。我知道这非常古老,但这只是太棒了 :) 尝试配置PHP发送邮件一直是噩梦,而这真的很容易/美妙。 - Frank H
显示剩余2条评论

5

2
完全有可能。请看我的回答。;) - gavanon

4

虽然需要修改php.ini设置,但是可以实现,详见PHP手册。你可以使用ini_set在运行时修改php.ini设置。


0
如果您可以访问并编辑php.ini文件,那么您可以像这样操作:
[mail function]
SMTP = ssl://smtp.gmail.com
smtp_port = 465
username = info@Mmydomainname.com
password = myemailpassword
sendmail_from = info@mydomainname.com

或者你可以这样做:

<?php
ini_set( 'smtp_port', 465 );
//etc

1
这样行不通。Gmail只接受在SSL端口465上的连接。而且,我不知道你如何执行认证过程。 - Pierre-Olivier
加上,是的,我刚刚测试了我的代码,你不能使用原生的mail()函数进行身份验证...你需要使用第三方选项,如PEAR或PHPMailer才能使其正常工作...或者使用fsockopen实现自己的身份验证(虽然有点繁琐)。 - Dave Goodchild

0

核心PHP的邮件()函数不支持此功能。

您需要使用PHPMailer来解决此问题。


-2

你可以通过PHPmailer库来实现这一点,它已经有了gmail.php文件。

只需打开并在该文件中放置您的详细信息,您也可以在您的文件中使用类似的代码。

您必须在您的Gmail帐户设置中进行设置,以允许SMTP邮件发送。


1
OP想要简单地使用核心PHP mail()函数,而不是任何外部库。 - FreeKrishna

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