Невозможно отправить почту через php и ssmtp

В моем коде нет ошибок из того, что я могу найти, мой локальный клиент ssmpt настроен, и я могу отправлять почту через командную строку. Но никакая почта и никакая ошибка не прибывают из php вообще. Как будто php никогда не попадает в эту локальную почтовую программу. У меня 'do' есть мой путь sendmail, установленный в моем php.ini и перезапущенный apache. Я не знаю, что еще это может быть?

<?php
require_once('config.php');
$attrs = array(PDO::ATTR_PERSISTENT => true);
$pdo = new PDO("mysql:host=localhost;dbname=".$dbname, $db_username, $db_password, $attrs);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$custlist = $pdo->prepare("SELECT customer_list.sms_num, carriers.carrieraddr, customer_list.contact_first,  customer_list.contact_last
    FROM carriers, customer_list
    WHERE send_id=send_code
    ORDER BY customer_list.sms_num");
#$carrierlist = $pdo->prepare("SELECT * FROM carriers");
if (isset($_POST['body'], $custlist)) {
    $custlist->execute();
    #var_dump($custlist);
    #var_dump($_POST['body']);
    while ($row = $custlist->fetch(PDO::FETCH_ASSOC)) {
        #$prefix = $row['sms_num'];
        #$suffix = $row['carrieraddr'];
        $to = 'brads@telecomm.com';
        $subject = 'the subject';
        $message = 'hello';
        $headers = 'From: admin@telecomm.com' . "\r\n" .
            'Reply-To: admin@telecomm.com' . "\r\n" .
            'X-Mailer: PHP/' . phpversion();

        mail($to, $subject, $message, $headers);
        #$body = $_POST['body'];

        #var_dump($prefix);
        #var_dump($suffix);
        #var_dump($_POST['body']);
    }
}

//$products = array();
$smscustobject = new ArrayObject($custlist);
#$smsarrayobject = new ArrayObject($carrierlist);

$pdo = null;
?>
<form action="" method="POST">
    Your Message Body <input name="body" type="text" />
    <input type="submit">
</form>

3 ответа

Решение

У меня возникла та же проблема, и я обнаружил, что после запуска сценария PHP для тестирования портов мне нужно было настроить linux (в моем случае Centos), чтобы разрешить httpd доступ к портам TCP с помощью следующей команды в командной строке:

setsebool httpd_can_network_connect = 1

или навсегда

setsebool -P httpd_can_network_connect=1

Примечание: использование опции -P на моей машине заняло более 2 минут, так что наберитесь терпения

Вуаля! моя почтовая команда сработала.

Моя ситуация заключалась в том, что я мог отправлять почту на SMTP-сервер моего провайдера, т.е. mail.optusnet.com.au, порт 25 из командной строки, но не использовал сценарии PHP, запущенные в моем браузере.

Кроме того, убедитесь, что ваш брандмауэр не мешает PHP, запустив сеанс Telnet с вашим SMTP-хостом.

например, $telnet mail.optusnet.com.au 25

В вашем случае я подозреваю, что нет, поскольку вы можете отправлять электронные письма из командной строки.

Надеюсь, это поможет

Удалите путь sendmail и разрешите системе использовать настройки по умолчанию.

Лично я бы пошел на что-то вроде SwiftMailer - он регулярно обновляется и относительно прост в использовании http://swiftmailer.org/

Другие вопросы по тегам