MAMP上的PHP邮件发送问题

18

我需要使用PHP的邮件功能测试一些脚本,希望最终能在本地进行测试。我正在使用MAMP。有没有不安装任何第三方软件就可以实现这一点的方法?

我已经搜索了一些资料,但还没有找到令人满意的解决方案。

谢谢!


这些中有哪些对你有用? - Kirk Strobeck
@Kirk - 最好的选择是使用SMTP。 - cnotethegr8
6个回答

5

您是想测试邮件发送,还是测试代码的其他部分?

如果是前者,您需要进行以下配置:

 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());
}

and for testing other code

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

And include the relevant one to your testing.

Note that testing integration with the SMTP server, and testing deliverbility of your code is rather complex but should be done independently of testing your PHP.

C.


2
你可能想考虑使用 Swift Mailer 库。

http://swiftmailer.org/

它使得从PHP代码发送电子邮件更加可靠。你甚至可以将你的邮件脚本指向一个真正的SMTP服务。这可以消除当从本地环境移动到生产环境时会遇到的许多问题。
使用Swift Mailer就像在你的PHP脚本顶部包含单个文件并编写一个代码块来发送简单消息一样简单。而且它是完全面向对象的。

1
几个月前,我在本地机器上开发一个涉及发送自动邮件通知的应用程序时遇到了类似的问题。我花费了相当多的时间在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);
       }
    ?>    

1
我所做的是使用phpmailer类(警告:糟糕的网站!),并指定一个真实的SMTP服务器,我在该服务器上拥有一个帐户。因此,我不使用mail()函数,而是使用SMTP。这样,无论我是在本地服务器还是在真实服务器上,都没有关系。但您需要访问那个SMTP邮件服务器的工作SMTP访问权限。最好实际使用生产邮件服务器(应用程序上线时将使用的邮件服务器)。通过这种方式,当您发现邮件服务器搞乱了回复字段和其他小事情时,您就不会有最后一分钟的惊喜了。

1
OP已经说明他正在使用MAMP,其中PHP没有本地MTA的概念,邮件始终通过SMTP发送到配置的服务器。与PHP的邮件相比,phpmailer添加了许多其他功能,但与原始问题无关。 - symcbean
它确实使使用SMTP非常容易,因此这是我的建议。 - pixeline

0

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

  1. 在httpd.conf文件中添加以下字符串:

    php_admin_value sendmail_path
    "/Applications/MAMP/somefolder/mysendmail.sh"

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

    #!/bin/bash

    while read line do echo "$line" >> ../mail_log.txt done

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

    exit 0

  3. 不要忘记设置权限:chmod 755 mysendmail.sh


0

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

您可以使用phpmailer类(http://phpmailer.worxware.com/)来实现此功能。当您下载此类时,在examples/文件夹中有一个基本的Gmail示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接