Отправка тестовой почты из PHP в Mac OS X
Опубликовал Александр Шабуневич — 11 Февраль 2012, 19:15
Если вы разрабатываете сайты локально на своем маке (например, используя MAMP) и хотите проверить как работает отправка почты из PHP-скриптов, то можете столкнуться с определенными трудностями. В частности, в поисках решения, вы можете наткнуться на примеры, в которых авторы рекомендуют ставить корневые сертификаты, покупать какой-то загадочный Postfix enabler и совершать прочие шаманства. Кроме того, конечно, можно купить MAMP Pro, который, в отличие от бесплатного варианта, позволяет посылать почту.
Можно, конечно, сделать и так, но если у вас нет потребности отсылать настоящую почту на настоящие же адреса, то вполне может подойти более простое решение: эмуляция отсылки с записью писем в файл + автоматическое открытие их в почтовом клиенте.
Делается это очень просто. Создаете где-нибудь (например в ~/Sites
) папку smtp
. В этой папке создаете файл send.php
:
#!/usr/bin/php
<?php
# create a filename for the emlx file
list($ms, $time) = explode(' ', microtime());
$filename = dirname(__FILE__).'/'.date('Y-m-d h.i.s,', $time).substr($ms,2,3).'.emlx';
# write the email contents to the file
$email_contents = fopen('php://stdin', 'r');
$fstat = fstat($email_contents);
file_put_contents($filename, $fstat['size']."\n");
file_put_contents($filename, $email_contents, FILE_APPEND);
# open up the emlx file (using Apple Mail)
exec('open '.escapeshellarg($filename));
Назначаете ему права на исполнение. Затем открываете ваш php.ini
(у меня: /Applications/MAMP/bin/php/php5.3.6/conf/php.ini
) и меняете параметр sendmail_path
на такой:
sendmail_path = sudo -u <username> /Users/<username>/Sites/smtp/send.php
В оригинале статьи еще советуют добавить пользователя в sudoers, но мне это не понадобилось.
Где <username>
— ваш логин в системе, конечно.
Затем перезагружаете Apache и — готово. Теперь при отправке почты из скриптов будет открываться окно Apple Mail, содержащее текст письма. Сами же письма складываются в ту самую папку, где вы создали скрипт send.php. Очень просто и удобно.
Решение подсмотрено в блоге Adam Royle за что ему отдельное спасибо.