php mail на MAMP - PullRequest
       32

php mail на MAMP

18 голосов
/ 04 августа 2009

Мне нужно протестировать скрипт, используя почту PHP. Я хотел бы иметь возможность, наконец, заставить это работать на месте. Я использую MAMP. Есть ли способ сделать это без установки какого-либо стороннего программного обеспечения?

Я провел некоторые поиски по этому вопросу, но не нашел ничего привлекательного.

Спасибо

Ответы [ 6 ]

4 голосов
/ 08 февраля 2010

Вы специально пытаетесь проверить отправку почты или тестируете остальную часть кода?

В случае с первым, вам необходимо настроить:

 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.

С

2 голосов
/ 04 августа 2009

Возможно, вы захотите рассмотреть библиотеку Swift Mailer

http://swiftmailer.org/

Это делает работу с почтой из кода PHP намного более надежной. Вы даже можете указать свой почтовый скрипт на реальный SMTP сервис. Это может устранить множество проблем, с которыми вы можете столкнуться при переходе от локальной к рабочей среде.

Использование swift mailer так же просто, как использование одного включения в верхней части PHP-скрипта и написание блока кода для отправки простого сообщения. И это полностью объектно-ориентированный.

1 голос
/ 04 августа 2009

я использую класс phpmailer (предупреждение: ужасный веб-сайт!) И указываю настоящий SMTP-сервер, на котором у меня есть учетная запись. Так что я не использую mail (), но использую smtp. Таким образом, не имеет значения, нахожусь ли я на моем локальном сервере или на реальном сервере. Но вам нужен рабочий доступ SMTP к этому серверу SMTP. Лучше всего использовать рабочий почтовый сервер (тот, который будет использоваться вашим приложением при запуске). Таким образом, у вас не будет сюрпризов в последнюю минуту, когда вы обнаружите, что почтовый сервер испортил поле ответа и такие мелочи.

1 голос
/ 04 августа 2009

Несколько месяцев назад у меня была похожая проблема при разработке приложения на моей локальной машине, которое включало автоматическую отправку уведомлений по электронной почте. Я потерял довольно много времени на установку Sendmail на OSX и в итоге не смог заставить его работать правильно ..

Мой подход состоял в том, чтобы использовать 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);
       }
    ?>    
0 голосов
/ 21 марта 2016

Я думаю, что лучшее решение - записать все сообщения в файл. Так что вам просто нужно сделать собственный sendmail.

  1. добавить в файл httpd.conf следующие строки:

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

  2. В файле mysendmail.sh добавить следующее:

    #! / Bin / Баш

    во время чтения строки делать echo "$ line" >> ../mail_log.txt сделано

    echo "------------- следующая почта ----------------" >> ../mail_log.txt

    выход 0

  3. Не забудьте установить привилегии: chmod 755 mysendmail.sh

0 голосов
/ 07 марта 2010

Вы можете использовать свою учетную запись gmail и отправлять тестовые сообщения через SMTP-сервер gmail.

Вы можете использовать класс phpmailer (http://phpmailer.worxware.com/) для этого. При загрузке этого класса в папке examples / есть основной пример gmail.

...