当前位置: 首页>>技术教程>>正文


如何让我的PHP发送邮件?

, ,

问题描述

我使用tasksel安装了Ubuntu 11.04,LAMP。

我发现PHP mail()不起作用。

我想我需要启用它或什么?我怎么做?

最佳解决思路

从php的邮件手册:

Requirements

For the mail functions to be available, PHP requires an installed and working email system. The program to be used is defined by the configuration settings in the php.ini file.

这意味着您必须安装某种邮件服务器并配置php才能使用它。通常这个邮件服务器是Ubuntu中的后缀。但是 – 如果您编写的php端最终将存储在托管服务端(例如xmission),则很可能已经在那里安装了邮件服务器。在这种情况下,只需在线测试您的网站而不是本地。

如果您需要在自己的系统上进行测试,或者意味着将其托管在您自己的home-server上,而不是继续:

后缀安装

安装:postfix /sudo apt-get install postfix在此过程中,系统将询问您要在哪种模式下安装postfix。有四种可能的模式:

php,mail,ubuntu

  • 互联网:您自己的mail-server。

  • 卫星:外部邮件提供商(例如Google)将用于发送和接收邮件。服务器不会收到任何邮件。

  • Smarthost:两者之间的混合。邮件存储在本地但通过外部邮件提供程序发送。

  • 仅限本地:不会关注您。这是一个系统实习邮件服务器。您只能在系统上将用户的邮件发送给用户。

其余安装选项取决于您对此常规配置的选择。

您很可能会选择卫星安装。这意味着将使用外部提供商发送邮件。作为smtp-server(外发邮件服务器),您必须指定您的提供程序smtp。其余的选项是自我解释的。

安装后配置

大多数smtp-servers需要密码验证才能发送邮件。所以postfix需要知道密码。还有一些事情需要考虑加密(你必须谷歌)。这是使用密码验证(sasl)配置postfix的方法:

  • 通过单击软件中心图标或从终端使用以下命令安装libsasl2-modulessasl2-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规避‘permission denied’ bug

这应该在大多数情况下这样做。然而,一些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应该能够立即发送外发电子邮件。

第三种解决思路

PHP需要SMTP客户端才能发送邮件。您可以安装full-featured邮件传输代理(MTA),如Postfix来提供此功能,但如果您只需要通过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

第四种思路

应该是一个简单的修复。您只需安装Postfix即可进行实际的电子邮件发送。

sudo apt-get install postfix

您想从终端(而不是软件中心)运行它,因为它需要向您询问一些设置问题。您应该会发现只接受所有默认值(local-only等)。

第五种思路

这是一个老问题,上面有值得回答,但我需要exim用于我的环境。另外,确认您首先安装了sendmail($ which sendmail – 应该返回类似/usr /sbin /sendmail的内容)。我在linode.com找到了一个很好的指南,但要点是:

apt-get install exim4-daemon-light mailutils

其次是:

dpkg-reconfigure exim4-config

这将使您进入交互式编辑器。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1056.html,未经允许,请勿转载。