【问题标题】:php mail on MAMPMAMP 上的 php 邮件
【发布时间】:2010-11-16 14:42:13
【问题描述】:

我需要使用 PHP 的邮件测试一些脚本。我希望最终能够在本地工作。我正在使用 MAMP。有没有办法在不安装任何第三方软件的情况下做到这一点?

我已经对此进行了一些搜索,但没有发现任何吸引人的东西。

谢谢

【问题讨论】:

  • 这些对你有用吗?
  • @Kirk - 最好的选择是使用 SMTP。

标签: php email testing mamp


【解决方案1】:

您是专门尝试测试邮件的发送,还是测试其余代码?

如果是前者,则需要配置:

 SMTP = smtp.example.com
 smtp_port = 25
 sendmail_from = me@example.com

在您的 php.ini 文件中(使用 phpinfo() 检查它的位置),替换为适当的值。

要测试发送邮件过程以外的代码,我建议创建2个包含文件:

<?php
// for live usage/mail send testing
function ori_mail()
{
   return call_user_func_array('mail',func_get_args());
}

以及用于测试其他代码

function ori_mail()
{
   file_put_contents('debug_mail_scripts.txt'
       ,date('r') . ':' . var_export(func_get_args(), true)
       , FILE_APPEND);
}

并在您的测试中包含相关的内容。

请注意,测试与 SMTP 服务器的集成以及测试代码的可交付性相当复杂,但应该独立于测试 PHP 来完成。

C.

【讨论】:

    【解决方案2】:

    您可能需要考虑使用 Swift Mailer 库

    http://swiftmailer.org/

    它使从 PHP 代码发送电子邮件更加可靠。您甚至可以将您的邮件脚本指向一个真正的 SMTP 服务。这可以消除您在从本地环境迁移到生产环境时遇到的许多问题。

    使用 swift mailer 就像在 PHP 脚本顶部使用单个包含并编写代码块来发送简单消息一样简单。而且它是完全面向对象的。

    【讨论】:

      【解决方案3】:

      几个月前,我在本地机器上开发一个涉及发送自动电子邮件通知的应用程序时遇到了类似的问题。我在 OSX 上安装 Sendmail 已经浪费了很多时间,最终我无法让它正常工作..

      我的方法是使用 PEAR Mail 作为 php 原生邮件功能的临时替代品。基本上,您可以定义一个名为 send-mail 的函数(参见下面的代码),并且一旦您将应用程序部署到服务器上,您就可以将对该函数的调用替换为对 mail() 的调用。

           <?php
           require_once 'Mail.php';
           function send_mail($recipient,$subject,$body){
      
                  $host = "yourmailserver.net"; 
                  $username = "you@yourmailserver.net";
                  $password = "password";
                  $port = 25; 
      
                  $headers = array ('From' => "Your agent <noreply@yoursite.net>",
                    'To' => $recipient,
                    'Subject' => $subject
                  );  
      
                  $smtp = Mail::factory(
                   'smtp',
                    array ('host' => $host,
                      'auth' => true,
                      'port' => $port,
                      'username' => $username,
                      'password' => $password)
                  );  
                  $smtp->send($recipient, $headers, $body);
             }
          ?>    
      

      【讨论】:

        【解决方案4】:

        我所做的是我使用phpmailer class(警告:可怕的网站!)并指定一个我有帐户的真实 smtp 服务器。所以我不使用mail(),而是使用smtp。这样,我是在本地服务器上还是在真实服务器上都没有关系。但是您确实需要对该 smtp 邮件服务器进行有效的 smtp 访问。最好的办法是实际使用生产邮件服务器(应用程序上线时将使用的服务器)。这样,当您发现邮件服务器弄乱了回复字段之类的小事时,您就不会在最后一刻感到惊讶。

        【讨论】:

        • OP 声明他正在使用 MAMP,其中 PHP 没有本地 MTA 的概念,并且邮件始终通过 SMTP 发送到配置的服务器。 phpmailer 确实添加了许多与 PHP 邮件相比的其他功能,但与原始问题无关。
        • 它确实让使用 smtp 变得超级简单,因此我的建议是。
        【解决方案5】:

        您可以使用您的 gmail 帐户并通过 gmail 的 SMTP 服务器发送您的测试电子邮件。

        您可以使用 phpmailer 类 (http://phpmailer.worxware.com/) 来执行此操作。下载此类时,examples/ 文件夹中有一个基本的 gmail 示例。

        【讨论】:

          【解决方案6】:

          我认为最好的解决方案是将所有消息写入文件。所以你只需要制作自己的sendmail。

          1. 将此字符串添加到 httpd.conf 文件:

            php_admin_value 发送邮件路径
            “/Applications/MAMP/somefolder/mysendmail.sh”

          2. 在文件 mysendmail.sh 中添加以下内容:

            #!/bin/bash

            同时读取行 做 echo "$line" >> ../mail_log.txt 完成

            echo "------------- 下一封邮件----------------" >> ../mail_log.txt

            退出 0

          3. 别忘了设置权限:chmod 755 mysendmail.sh

          【讨论】:

            猜你喜欢
            • 2013-02-25
            • 2016-03-04
            • 2013-03-28
            • 1970-01-01
            • 2011-10-07
            • 1970-01-01
            • 2022-06-22
            • 2016-11-03
            • 2013-10-21
            相关资源
            最近更新 更多