我使用 taskel 安装了 Ubuntu 11.04,LAMP。
我发现 PHPmail()
不起作用。
我想我需要启用它或做其他什么?我该怎么做?
答案1
正如前面提到的,如果您只需要在家用计算机上开发应用程序时从 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 现在应该能够发送外发电子邮件。
答案2
来自php的邮件手册:
要求
要使用邮件功能,PHP 需要安装并运行电子邮件系统。要使用的程序由 php.ini 文件中的配置设置定义。
这意味着您必须安装某种邮件服务器并配置 php 才能使用它。通常,此邮件服务器是 Ubuntu 中的 postfix。但是 - 如果您正在编码的 php 端最终将存储在托管服务端(例如 xmission),则邮件服务器很可能已经安装在那里。在这种情况下,只需在线测试您的网站,而不是本地测试。
如果您需要在自己的系统上测试它或打算将其托管在自己的家庭服务器上,请继续:
Postfix 安装
安装:后缀 /sudo apt-get install postfix
在此过程中,系统会询问您希望以哪种模式安装 Postfix。有四种可能的模式:
- 互联网:您自己的邮件服务器。
- 卫星:将使用外部邮件提供商(例如 Google)来发送和接收邮件。服务器将不会接收任何邮件。
- 智能主机:两者的混合。邮件存储在本地,但通过外部邮件提供商发送。
- 仅限本地: 不会打扰你。这是一个系统内部邮件服务器。你只能在系统上从一个用户向另一个用户发送邮件。
其余安装选项取决于您对此常规配置的选择。
您很可能会选择卫星安装。这意味着将使用外部提供商发送邮件。作为 smtp 服务器(外发邮件服务器),您必须指定提供商 smtp。其余选项不言自明。
安装后配置
大多数 smtp 服务器都需要密码验证才能发送邮件。因此,postfix 需要知道该密码。此外,还需要考虑加密等问题(您必须谷歌搜索)。这是使用密码验证 (sasl) 配置 postfix 的方法:
安装 libsasl2 模块 和 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 [email protected]: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::邮件界面可能也会引起您的兴趣。
Gmail(或许还有其他服务)可能不喜欢您尝试以这种方式发送邮件,因为根据他们的标准,这种方式可能被视为不安全,并且会阻止您的尝试,即屏幕上不会出现任何内容,或者整个过程的某个地方会阻止您的身份验证。此外,您的 POP3 必须启用。
要解决这个问题,请参见此处。(如果您想安全起见,请创建一个虚拟 Gmail 帐户)
答案3
PHP 需要 SMTP 客户端来发送邮件。您可以安装功能齐全的邮件传输代理 (MTA),例如后缀提供此功能,但如果您只需要通过 PHP 发送邮件,那就太过分了。相反,安装邮件传输协议。它重量轻,配置起来也简单得多。
安装 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 <[email protected]>
password <password>
from <[email protected]>
syslog LOG_MAIL
您需要替换“<”和“>”(包括这些,请删除)内所有内容所代表的配置数据。对于主机/用户名/密码,请使用您通过邮件提供商发送邮件的正常凭据。
告诉 PHP 使用它
sudo vi /etc/php5/apache2/php.ini
添加以下一行:
sendmail_path = /usr/bin/msmtp -t
答案4
这是一个老问题,上面有值得回答的问题,但我需要exim
我的环境。另外,首先确认您已安装 sendmail($ which sendmail
-- 应该返回类似 /usr/sbin/sendmail 的内容)。我找到了一个很好的指南linode.com,但要点是:
apt-get install exim4-daemon-light mailutils
其次是:
dpkg-reconfigure exim4-config
它将带你进入一个交互式编辑器。