Перейти к навигации · Перейти к содержимому

Отправка тестовой почты из PHP в Mac OS X

Теги

Если вы разрабатываете сайты локально на своем маке (например, используя 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 за что ему отдельное спасибо.