我需要使用 PHP 的邮件测试一些脚本。我希望最终能够在本地工作。我正在使用 MAMP。有没有办法在不安装任何第三方软件的情况下做到这一点?
我已经对此进行了一些搜索,但没有发现任何吸引人的地方。
谢谢
您是专门尝试测试邮件的发送,还是测试其余代码?
如果是前者,则需要配置:
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。
您可能需要考虑 Swift Mailer 库
它使从 PHP 代码发送电子邮件更加可靠。您甚至可以将您的邮件脚本指向一个真正的 SMTP 服务。这可以消除从本地环境迁移到生产环境时会遇到的许多问题。
使用 swift mailer 就像在 PHP 脚本顶部使用单个包含并编写代码块来发送简单消息一样简单。它是完全面向对象的。
几个月前,我在本地机器上开发一个涉及发送自动电子邮件通知的应用程序时遇到了类似的问题。我在 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);
}
?>
我所做的是我使用phpmailer 类(警告:可怕的网站!)并指定一个我有帐户的真实 smtp 服务器。所以我不使用mail(),而是使用smtp。这样,我是在本地服务器上还是在真实服务器上都没有关系。但是您确实需要对该 smtp 邮件服务器进行有效的 smtp 访问。最好的办法是实际使用生产邮件服务器(应用程序上线时将使用的服务器)。通过这种方式,当您发现邮件服务器弄乱了回复字段和类似的小事情时,您不会在最后一刻感到惊讶。
您可以使用您的 gmail 帐户并通过 gmail 的 SMTP 服务器发送您的测试电子邮件。
您可以使用 phpmailer 类 ( http://phpmailer.worxware.com/ ) 来执行此操作。下载此类时,examples/ 文件夹中有一个基本的 gmail 示例。
我认为最好的解决方案是将所有消息写入文件。所以你只需要制作自己的sendmail。
将此字符串添加到 httpd.conf 文件:
php_admin_value sendmail_path
"/Applications/MAMP/somefolder/mysendmail.sh"
在文件 mysendmail.sh 中添加以下内容:
while read line do echo "$line" >> ../mail_log.txt done
echo "------------- 下一封邮件----" >> ../mail_log.txt
出口 0
不要忘记设置权限:chmod 755 mysendmail.sh