Php mail на MAMP
Мне нужно протестировать несколько script с помощью PHP-почты. Я бы хотел, чтобы наконец-то это работало локально. Я использую MAMP. Есть ли способ сделать это без установки стороннего программного обеспечения?
Я немного поработал над этим, но не нашел ничего привлекательного.
Спасибо
Ответы
Ответ 1
Вы специально пытаетесь проверить отправку почты или проверяете остальную часть кода?
В случае первого вам необходимо настроить:
SMTP = smtp.example.com
smtp_port = 25
sendmail_from = [email protected]
в вашем файле 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.
С.
Ответ 2
Возможно, вы захотите рассмотреть библиотеку Swift Mailer
http://swiftmailer.org/
Это делает работу с кодом PHP намного более надежной. Вы даже можете указать свою почтовую программу script на реальную службу SMTP. Это может устранить множество проблем, с которыми вы столкнулись при переходе от локальной к рабочей среде.
Использование быстрой почтовой программы так же просто, как использование одного включить в верхней части вашего PHP script и писать блок кода для отправки простого сообщения. И он полностью объектно ориентирован.
Ответ 3
Несколько месяцев назад у меня была аналогичная проблема при разработке на моей локальной машине приложения, которое включало отправку автоматических уведомлений по электронной почте. Я потерял довольно некоторое время, установив Sendmail на OSX, и в итоге я не смог заставить его работать правильно.
Мой подход состоял в том, чтобы использовать PEAR Mail в качестве временной замены для обычной почтовой функции php. В основном вы можете определить функцию, называемую send-mail (см. Код ниже), и после развертывания приложения на сервере вы можете заменить вызовы этой функции на вызовы mail().
<?php
require_once 'Mail.php';
function send_mail($recipient,$subject,$body){
$host = "yourmailserver.net";
$username = "[email protected]";
$password = "password";
$port = 25;
$headers = array ('From' => "Your agent <[email protected]>",
'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 (предупреждение: ужасный сайт!) и укажите реальный smtp-сервер, на котором у меня есть Счет. Поэтому я не использую mail(), но использую smtp. Таким образом, неважно, нахожусь ли я на локальном сервере или на реальном сервере. Но вам нужен рабочий smtp-доступ к этому почтовому серверу smtp. Лучше всего было бы использовать производственный почтовый сервер (тот, который будет использоваться вашим приложением, когда он будет жить). Таким образом, у вас не будет сюрпризов в последнюю минуту, когда вы обнаружите, что почтовый сервер испортил ответное поле и мелочи вроде этого.
Ответ 5
Вы можете использовать свою учетную запись gmail и отправлять тестовые электронные письма через SMTP-сервер gmail.
Для этого вы можете использовать класс phpmailer (http://phpmailer.worxware.com/). В примере/папке при загрузке этого класса есть основной пример gmail.
Ответ 6
Я думаю, что лучшим решением является запись всех сообщений в файл. Поэтому вам просто нужно создать собственный sendmail.
-
Добавьте в httpd.conf файл следующие строки:
php_admin_value sendmail_path
"/Applications/MAMP/somefolder/mysendmail.sh"
-
В файле mysendmail.sh добавьте следующее:
#!/Bin/bash
во время чтения строки
делать echo "$ line" → ../mail_log.txt
сделано
echo "------------- следующая почта ----------------" → ../mail_log.txt
выход 0
-
Не забудьте установить привилегии: chmod 755 mysendmail.sh