如何让我的PHP发送邮件?

分享于 

11分钟阅读

ubuntu

  繁體

问题:

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

我发现 PHP mail() 不工作。

我想我需要启用它? 我该怎么做?


回答 1:

从php的邮件手册中:

需求

为了使邮件功能可用,PHP需要安装和工作的电子邮件系统。 要使用的程序由 php.ini 文件中的配置设置定义。

这意味着你必须安装一些mailserver并配置php来使用它。 通常mailserver在Ubuntu中是后缀。 但是,如果你正在编码的php端最终将被存储在服务端( 比如。 xmission ),邮件服务器很可能已经安装在那里。 在这种情况下,只在线测试你的站点而不是本地测试。

如果你需要在自己的系统上测试它,或者在你自己的家庭服务器上将它的承载,请执行以下操作:

后缀安装

安装:后缀Install postfix / sudo apt-get install postfix 在这个过程中,你将被询问你希望安装postfix的模式。 有四种可能的模式:

  • Internet: 你的邮件服务器。
  • 卫星: 外部邮件提供程序( 比如。 Google ) 将用于发送和接收邮件。 服务器将不接收任何邮件。
  • Smarthost: 两者之间的混合。 邮件存储在本地,但通过外部邮件提供程序发送。
  • 本地 : 不考虑你。 那是个系统实习生 mailserver。 你只能从系统上的用户向用户发送邮件。

安装选项的其余部分取决于你对这个通用配置的选择。

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

后安装配置

大多数smtp服务器都需要使用密码身份验证来发送邮件。 所以postfix需要知道密码。 还有一些类似加密的东西来考虑( 你必须得在谷歌)。 以下是使用密码身份验证( sasl ) 配置后缀的方式:

  • 安装 libsasl2-modulesInstall libsasl2-modulessasl2-binInstall sasl2-bin 通过点击软件中心图标或者从终端使用:

    
    sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
    
    
    
    
  • 通过将这些行添加到 /etc/postfix/main.cf 来启用sasl身份验证

    
     # 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 
    
    
    
    

    你可能必须预先绕过 '权限被拒绝'Bug

这在大多数情况下都应该这样做。 然而,有些smtp提供者需要一个特定的地址作为发送者或者加密。

相关: PEAR::Mail 命令行接口可能对你也有意义。

Gmail ( 还有其他的服务) 可以能不喜欢这样发送邮件,因为标准不安全,并且将阻止你的换句话说,在屏幕或者某个地方发生。 也必须启用你的POP3。

在这里看到。 ( 如果你想在安全的地方,那么创建一个虚拟的Gmail帐户)


回答 2:

如前所述,如果你只需在你的家庭计算机开发应用程序时发送电子邮件,后缀将是。

我个人使用非常简单和轻量级的软件包 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现在应该能够发送出发邮件了。


回答 3:

PHP要求SMTP客户端发送邮件。 如果你只需要通过PHP发送邮件,就可以安装一个完整功能的邮件传输代理( MTA ),比如后缀插件,但如果你只需要发送邮件。 相反,安装 msmtp插件。 它是轻量级的,而且配置简单。

安装 msmtp


sudo apt-get install msmtp-mta ca-certificates



配置 it

创建新的配置 file:


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



你需要替换"<"和">"( 包括,中的所有内容) 所表示的配置数据。 对于 host/username/password,,请使用普通凭据通过邮件提供程序发送邮件。

告诉PHP使用它


sudo vi/etc/php5/apache2/php.ini



添加此行:


sendmail_path =/usr/bin/msmtp -t




回答 4:

应该是一个简单的修复。 你只需要安装一个可以发送实际邮件的Postfix。


sudo apt-get install postfix



因为它需要向你询问一些设置问题,所以你需要从终端( 而不是软件中心) 运行它。 你应该发现只接受所有默认的( 本地,等)。


回答 5:

这是一个旧问题,上面有值得回答的答案,但我的环境需要 exim。 同时,确认你已经安装了 sendmail ( $ which sendmail --应该返回类似/usr/sbin/sendmail).,我在 linode.com 找到了一个好指南,但要点如下:


apt-get install exim4-daemon-light mailutils



接着是:


dpkg-reconfigure exim4-config



它会让你进入一个互动的编辑。


回答 6:

很好的回答,。

关于"虚拟gmail帐户",我有一件事情要补充:

这是强烈建议的,因为你必须配置gmail帐户以允许更少的安全应用程序: 否则,你将在你的/var/log/mail.log 文件中出现一个"请使用你的网络浏览器登录,然后重试"错误。

此外,我发现我收到了超时错误,除非我发送 root 电子邮件服务器我的证书。 要执行这里操作:


sudo nano/etc/postfix/main.cf



将以下内容添加到文件的底部


smtp_tls_CAfile =/etc/postfix/cacert.pem



将 thawte root 证书复制到 cacert.pem file:


cat/etc/ssl/certs/thawte_Primary_Root_CA.pem | sudo tee -a/etc/postfix/cacert.pem



以下是我使用的链接: 配置后缀在 Ubuntu | EasyEngine 使用 Gmail SMTP

希望这会节省一些人的毛囊。


回答 7:

我找到了 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





PHP  发送  mail  
相关文章