如何让我的PHP发送邮件?

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

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

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

从php的邮件手册:

要求

为了使邮件function可用,PHP需要一个已安装且正常工作的电子邮件系统。 要使用的程序由php.ini文件中的配置设置定义。

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

如果您需要在自己的系统上进行测试,或者意味着将其托管在您自己的家庭服务器上,那么请继续:

后缀安装

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

  • Internet :您自己的邮件服务器。
  • 卫星 :外部邮件提供商(例如Google)将用于发送和接收邮件。 服务器不会收到任何邮件。
  • Smarthost :两者之间的混合。 邮件存储在本地但通过外部邮件提供程序发送。
  • 仅限本地 :不会关注您。 这是一个系统实习邮件服务器。 您只能在系统上将用户的邮件发送给用户。

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

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

安装后配置

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

  • 安装libsasl2-modules 安装libsasl2-modules 和sasl2-bin 安装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