Answers:
从php的邮件手册中:
要求
为了使邮件功能可用,PHP需要已安装且可以运行的电子邮件系统。使用的程序由php.ini文件中的配置设置定义。
这意味着您必须安装某种邮件服务器并配置php才能使用它。通常,此邮件服务器在Ubuntu中是后缀。但是-如果您正在编码的php端最终将存储在托管服务端(例如xmission),则很可能已经在该位置安装了邮件服务器。在这种情况下,只需在线(而不是本地)测试您的网站即可。
如果您需要在自己的系统上对其进行测试,或者打算将其托管在自己的主服务器上,则可以继续进行以下操作:
安装:postfix / sudo apt-get install postfix
在此过程中,系统将询问您要哪种方式安装postfix。有四种可能的模式:
其余的安装选项取决于您对此常规配置的选择。
您很可能会选择卫星安装。这意味着将使用外部提供程序发送邮件。然后,作为smtp服务器(外发邮件服务器),您必须指定您的提供商smtp。其余选项不言自明。
大多数smtp服务器需要密码验证才能发送邮件。因此,后缀将需要知道该密码。另外,还需要考虑加密等问题(您必须向Google询问)。这是您使用密码验证(sasl)配置后缀的方式:
通过单击软件中心图标或使用以下命令从终端安装 libsasl2-modules 和 sasl2-bin :
sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
通过添加以下行来启用sasl-auth /etc/postfix/main.cf
# 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地址。
更新后缀:
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(可能还有其他服务)可能不喜欢您尝试以这种方式发送邮件,因为按照他们的标准,它可能被认为是不安全的,并且会阻止您的尝试,即在屏幕上什么也不会发生,或者整个过程的某处都会被阻止您的身份验证。另外,必须启用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=<YOUR-EMAIL>@gmail.com
AuthPass=<YOUR-PASSWORD>
(提供您的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现在应该可以发送传出电子邮件了。
sendmail_path = /usr/sbin/ssmtp -t
。这很有用,谢谢
/usr/sbin/sendmail
,该链接正确指向ssmtp。因此,使用也sendmail_path = /usr/sbin/sendmail -t
应该有效
ssmtp
(找到了一些有用的注释):如何在Debian中设置PHP邮件 -这个问题+此链接有助于设置程序。
FromLineOverride=YES
为了避免出现以下错误:550 5.7.60 SMTP; Client does not have permissions to send as this sender
PHP需要SMTP客户端发送邮件。您可以安装诸如Postfix之类的功能齐全的邮件传输代理(MTA)来实现此功能,但是如果只需要通过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 <smtp.example.net>
port 587
auth on
user <username@example.net>
password <password>
from <address-to-receive-bounces@example.net>
syslog LOG_MAIL
您需要替换“ <”和“>”中的所有内容所代表的配置数据(包括删除这些内容)。对于主机/用户名/密码,请使用常规凭据通过邮件提供商发送邮件。
告诉PHP使用它
sudo vi /etc/php5/apache2/php.ini
添加以下一行:
sendmail_path = /usr/bin/msmtp -t
cat <<EOF | msmtp <receiver@test.com> Subject: test This is a test! EOF
这是一个古老的问题,上面还有一些有价值的答案,但是我需要exim
我的环境。另外,请确认您首先安装了sendmail($ which sendmail
-应该返回/ usr / sbin / sendmail之类的信息)。我在linode.com上找到了一个很好的指南,但是要点是:
apt-get install exim4-daemon-light mailutils
其次是:
dpkg-reconfigure exim4-config
这将带您进入交互式编辑器。
很好的答案,继续使用。
我要添加关于“虚拟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根证书复制到cacert.pem
文件中:
cat /etc/ssl/certs/thawte_Primary_Root_CA.pem | sudo tee -a /etc/postfix/cacert.pem
这是我使用的链接:将Postfix配置为在Ubuntu上使用Gmail SMTP | 易引擎
希望这可以节省一些毛囊。
我发现Dima L.提供的解决方案是最简单,最轻巧的系统解决方案。
只是一些补充,可以使设置更加清晰。您应该hostname
在/etc/ssmtp/ssmtp.conf
文件中评论。示例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