如何让我的PHP发送邮件?
我使用tasksel安装了Ubuntu 11.04,LAMP。
我发现PHP mail()
不起作用。
我想我需要启用它或什么? 我怎么做?
从php的邮件手册:
要求
为了使邮件function可用,PHP需要一个已安装且正常工作的电子邮件系统。 要使用的程序由php.ini文件中的配置设置定义。
这意味着您必须安装某种邮件服务器并配置php才能使用它。 通常这个邮件服务器是Ubuntu中的后缀。 但是 – 如果您编写的php端最终将存储在托管服务端(例如xmission),则很可能已经安装了邮件服务器。 在这种情况下,只需在线测试您的网站而不是本地。
如果您需要在自己的系统上进行测试,或者意味着将其托管在您自己的家庭服务器上,那么请继续:
后缀安装
安装: 后缀 / sudo apt-get install postfix
在此过程中,系统会询问您要在哪种模式下安装postfix。 有四种可能的模式:
- Internet :您自己的邮件服务器。
- 卫星 :外部邮件提供商(例如Google)将用于发送和接收邮件。 服务器不会收到任何邮件。
- Smarthost :两者之间的混合。 邮件存储在本地但通过外部邮件提供程序发送。
- 仅限本地 :不会关注您。 这是一个系统实习邮件服务器。 您只能在系统上将用户的邮件发送给用户。
其余安装选项取决于您对此常规配置的选择。
您很可能会选择卫星安装。 这意味着将使用外部提供商发送邮件。 作为smtp-server(传出邮件服务器),您必须指定提供者smtp。 其余的选项是自我解释的。
安装后配置
大多数smtp服务器需要密码validation才能发送邮件。 所以postfix需要知道密码。 还有一些事情需要考虑加密(你必须谷歌)。 这是使用密码validation(sasl)配置postfix的方法:
-
安装libsasl2-modules 和sasl2-bin 通过单击软件中心图标或从终端使用:
sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
-
通过将这些行添加到
/etc/postfix/main.cf
来启用sasl-auth# add to /etc/postfix/main.cf smtp_sasl_auth_enable = yes smtp_sasl_security_options = noplaintext noanonymous smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
-
使用如下行创建文件
/etc/postfix/sasl_password
:smtp.gmail.com USERNAME@gmail.com:USERPASSWORD
替换实际的密码,用户名和smtp-address。
-
更新后缀:
sudo chmod 600 /etc/postfix/sasl_password # for safety of your smtp password sudo postmap hash:/etc/postfix/sasl_password sudo postmap /etc/postfix/sender_canonical sudo /etc/init.d/postfix restart
您可能必须事先通过
chown postfix:postfix /etc/postfix
来规避“许可被拒绝”错误 。
这应该在大多数情况下这样做。 然而,一些smtp提供商需要特定地址作为发送者或加密。
相关: PEAR :: Mail界面也可能是您感兴趣的。
Gmail(可能还有其他服务)可能不喜欢你试图以这种方式发送邮件,因为它可能被认为是不安全的标准,并会阻止你的尝试,即屏幕上不会发生任何事情或整个过程的某个地方会阻止你的身份validation 还必须启用POP3。
为了反击那里看到的。 (如果您想要安全起见,请创建虚拟Gmail帐户)
如前所述,如果您只是需要在家庭计算机上开发应用程序时从php发送电子邮件,那么postfix将是一种过度杀伤。
我个人使用非常简单和轻量级的ssmtp包。 它将使用任何smtp服务器发送出站电子邮件。 通过运行安装它:
sudo apt-get install ssmtp
然后编辑/etc/ssmtp/ssmtp.conf
文件,注释掉现有的mailhub行并添加以下行(此示例适用于gmail smtp服务器):
mailhub=smtp.gmail.com:587 UseSTARTTLS=YES AuthUser=@gmail.com AuthPass=
(提供您的Gmail用户名和密码。当然您可以使用任何其他SMTP服务器)。
现在确保你的php.ini有正确的sendmail_path
。 它应该是:
sendmail_path = /usr/sbin/sendmail -t
( 来自@ dima-l和@ omar-sabic的评论 :你不必在这里指定ssmtp
,因为安装应该为/usr/sbin/sendmail
创建一个符号链接,它正确指向ssmtp
。否则你必须指定sendmail_path = /usr/sbin/ssmtp -t
)
重新加载apache和你的php应该能够立即发送外发电子邮件。
PHP需要SMTP客户端才能发送邮件。 您可以安装像Postfix这样的全function邮件传输代理(MTA)来提供此function,但如果您只需要通过PHP发送邮件就太过分了。 而是安装msmtp 。 它重量轻,配置简单得多。
安装msmtp
sudo apt-get install msmtp-mta ca-certificates
配置它
创建一个新的配置文件:
sudo vi /etc/msmtprc
…具有以下配置信息:
# Set defaults. defaults # Enable or disable TLS/SSL encryption. tls on tls_starttls on tls_trust_file /etc/ssl/certs/ca-certificates.crt # Set up a default account's settings. account default host port 587 auth on user password from syslog LOG_MAIL
您需要替换“<”和“>”(包括,删除这些)中所有内容所代表的配置数据。 对于主机/用户名/密码,请使用您的普通凭据通过邮件提供商发送邮件。
告诉PHP使用它
sudo vi /etc/php5/apache2/php.ini
添加此单行:
sendmail_path = /usr/bin/msmtp -t
应该是一个简单的修复。 您只需安装Postfix即可进行实际的电子邮件发送。
sudo apt-get install postfix
您想从终端(而不是软件中心)运行它,因为它需要向您询问一些设置问题。 您应该发现只接受所有默认值(仅限本地等)。
这是一个古老的问题,上面有一些值得回答的问题,但我需要我的环境。 另外,确认你已经安装了sendmail( $ which sendmail
– 应该返回类似/ usr / sbin / sendmail的东西)。 我在linode.com找到了一个很好的指南,但要点是:
apt-get install exim4-daemon-light mailutils
其次是:
dpkg-reconfigure exim4-config
这将使您进入交互式编辑器。
很好的答案 ,con-f-use。
关于“虚拟gmail帐户”,我有一件事要补充:
强烈建议您这样做,因为您必须配置您的Gmail帐户以允许安全性较低的应用程序: https : //www.google.com/settings/u/0/security/lesssecureapps否则您将收到“请使用您的网络浏览器登录”然后再次尝试“ /var/log/mail.log
文件中的错误。
我发现我收到超时错误,除非我发送gmail smtp服务器我的根证书。 去做这个:
sudo nano /etc/postfix/main.cf
将以下内容添加到文件的底部
smtp_tls_CAfile = /etc/postfix/cacert.pem
然后将thawte root证书复制到cacert.pem
文件:
cat /etc/ssl/certs/thawte_Primary_Root_CA.pem | sudo tee -a /etc/postfix/cacert.pem
以下是我使用的链接: 在Ubuntu上配置Postfix以使用Gmail SMTP EasyEngine
希望这可以节省一些毛囊…
我发现Dima L.提供的解决方案是最简单的方法和轻量级系统。
只是添加了一些,以便更清晰地设置。 您应该在/etc/ssmtp/ssmtp.conf
文件中注释hostname
。 示例ssmtp.conf
文件如下:
# # Config file for sSMTP sendmail # # The person who gets all mail for userids < 1000 # Make this empty to disable rewriting. root=postmaster # The place where the mail goes. The actual machine name is required no # MX records are consulted. Commonly mailhosts are named mail.domain.com mailhub=smtp.yourdomain.com UseSTARTTLS=YES AuthUser=mail@yourdomain.com AuthPass=YOUREMAILPASSWORD # Where will the mail seem to come from? #rewriteDomain= # The full hostname #hostname= # Are users allowed to set their own From: address? # YES - Allow the user to specify their own From: address # NO - Use the system generated From: address FromLineOverride=YES