【问题标题】:How to send email from localhost using PHP on Linux如何在 Linux 上使用 PHP 从本地主机发送电子邮件
【发布时间】:2011-08-03 08:13:42
【问题描述】:

我知道要在 Windows 上从 localhost 发送电子邮件,您需要在 php.ini 中更改 SMTP 服务器,但这仅在 Windows 上有效:

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25

那么我应该怎么做才能从 Linux 操作系统发送电子邮件?

【问题讨论】:

  • 在 linux 中,默认情况下它们不需要配置来发送邮件。 php邮件功能的输出是什么?在终端上尝试邮件命令并检查邮件是否正确配置linux.about.com/od/commands/l/blcmdl1_Mail.htm
  • AFAIK,邮件命令以与 Outlook 相同的方式发送接收电子邮件,它不是电子邮件服务器
  • @nidhin 邮件($to,$subject,$message,$headers);没有给出任何错误,但如果 $send = mail($to,$subject,$message,$headers);并回显$发送;它又什么也没显示,所以这意味着它是 FALSE
  • @templar 你需要安装像 sendmail 或 exim 这样的邮件服务器
  • 我想这会帮助您更好地使用您的 gmail 凭据发送电子邮件。 kvcodes.com/2016/03/send-e-mail-localhost-ubuntu-php

标签: php linux email smtp localhost


【解决方案1】:

我建议安装ssmtp 而不是安装完整的邮件服务器,如 postfix。如果这只是一个本地测试环境,您可能不需要完整的 MTA。 ssmtp 很容易设置——您只需提供远程服务器的 smtp 凭据。有教程here

【讨论】:

  • ssmtp 未维护/已弃用。请改用msmtp
【解决方案2】:

这适用于我在 Linux Mint 17 上从本地主机发送电子邮件:

sudo apt-get install sendmail

【讨论】:

    【解决方案3】:

    您的 php.ini 文件中应该已经有一个存根,例如:

    ; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
    sendmail_path = /usr/sbin/sendmail -t -i
    

    检查您的文件系统上是否存在指定的命令,并且您已正确(安装和)配置了 MTA。

    如果您还没有设置 MTA,有可用于 Linux 系统的 lots of MTAs,我建议您使用 sendmail(配置复杂/难以配置,但性能出色且灵活性惊人)或 postfix(更易于配置,开箱即用的良好安全性)。

    了解如何使用“邮件”cli 客户端或在服务器上运行不同的 MUA 以将 MTA 配置与 PHP 集成分开。

    【讨论】:

      【解决方案4】:

      要从本地主机(WAMP、XAMP 或 LAMP)发送邮件,您可以使用 PHPMailer 包(从here 下载 PHPMailer)。

      首先,您必须编辑“php.ini” 要找到此文件,请使用 WAMP 服务器中的以下代码显示 phpinfo。创建一个 php 文件并添加此内容。

      <?php
           echo phpinfo();
      ?>
      

      在那里搜索“加载的配置文件”这将是你的 php.ini 的路径。

      在此文件中,删除指定给 extension=php_openssl.dll 的 ;(分号)。

      下载PHPMailerX.X.X包后

      提取->将整个文件夹复制到您的项目文件夹中。

      在 test 文件夹中有一个名为 testemail.php 的文件。

      根据需要更改参数。 (示例如下)。

      然后在浏览器中输入 127.0.0.1/PHPMailer/test/testemail.php。

      然后如果发送电子邮件将显示成功消息,否则将给出错误消息。 示例:

      //add these codes if not written
      
      $mail->IsSMTP();
      $mail->SMTPAuth   = true;                  // enable SMTP authentication
      $mail->SMTPSecure = "ssl";                 // sets the prefix to the servier
      $mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
      $mail->Port       = 465; 
      
      //You have to change these parameters to your requirements.
      //…….code….
      
      $mail->Username = “abc@gmail.com”; // GMAIL username
      $mail->Password = “abcdefgh”; // GMAIL password
      //……..code….. There are many other functions to attach file etc.. For that refer doc file.
      $mail->AddAddress(“destination@gmail.com”,”Nick name”);
      //…….code…..
      

      【讨论】:

      • 干得好。但是phpmailer链接坏了。谢谢!
      • 请在php.ini文件中提供【邮件功能】的完整配置。
      • extention=php_openssl.dll 不在我的 php.ini 文件中。
      【解决方案5】:

      你需要安装一个 MTA,比如 sendmail(有些发行版比如 Debian 似乎更喜欢 exim,或者可能是 postfix)。

      使用 PHP 的 SMTP 实现是个坏主意,因为它不遵守 RFC5321 "4.5.4.1 的重试要求。发送策略:mail that 不能立即传输 必须排队并定期 发件人重试。”

      这种违反 RFC“必须”要求的行为通常会降低稳健性,并且在大多数情况下会干扰正确的互操作。这就是您需要使用本地 MTA(在 Linux 或 Windows 下)的原因。理想情况下,您需要一种非 SMTP 机制来向 MTA 提交消息,这就是 PHP 应该执行“sendmail”来发送邮件的原因。如果安装了 MTA,它往往会默认执行此操作。

      【讨论】:

        【解决方案6】:

        如果您正在运行 Debian 及其变体(*buntu 等),您可以通过运行 sudo tasksel install mail-server 来安装邮件服务器,这应该会为您设置基本的电子邮件功能。您可以通过在命令行中运行 echo 'body' | sendmail recipient@example.net 来测试它,或者像其他人提到的那样,在 PHP 中运行 mail($to, $subj, $msg)

        【讨论】:

        • 我在安装时错误选择了无配置,如何更改配置?也许你可以提供我应该选择哪一个
        • 我知道如何更改设置,但我的邮件仅在 2 天内送达,可能是我设置错误,您能帮帮我吗?
        • 我不确定,有很多,还是要我重新设置它们再告诉你?
        【解决方案7】:

        设置 sendmail 或 exim。在您的包管理器中搜索任一选项并安装它们。 Senmail 很常见,设置它应该可以完成这项工作。 linux上的mail命令是一个MUA或邮件用户代理,一个邮件用户代理(MUA)是一个用于发送和接收电子邮件的应用程序,更多的是一个客户端。而邮件传输代理使用客户端-服务器应用架构将电子邮件从一台计算机传输到另一台计算机。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-02
          • 2012-03-17
          • 2015-01-03
          • 2016-07-22
          • 2015-04-15
          相关资源
          最近更新 更多