Используйте PHP почту для отправки через smtp - PullRequest
3 голосов
/ 01 декабря 2009

Кто-нибудь знает, можно ли настроить php команду mail (), чтобы она использовала только SMTP-сервер, а не локальный sendmail? У нас проблемы с тем, что письма помечаются как спам.

На нашем сервере запущена RedHat 5 Enterprise.

Мне известны различные библиотеки PHP, которые действуют как SMTP-клиенты, но я бы лучше настроил PHP, чтобы mail () напрямую использовал SMTP-сервер.

Ответы [ 5 ]

1 голос
/ 01 декабря 2009

Согласно этой странице руководства , это возможно только в Windows.

0 голосов
/ 13 июня 2012

Вы можете отправить по SMTP напрямую, используя пакет PEAR Mail . Вам также понадобится Net_SMTP для работы почты SMTP. На многих серверах они установлены по умолчанию. Вы также можете загрузить копии этих библиотек локально и загрузить их в каталог своего сайта или указать путь к нему. Это не идеальное решение, но оно функциональное.

Если вы ищете замену для старой функции mail(), но которая отправляет через SMTP вместо PHP по умолчанию, вам нужно написать функцию-переводчик, которая устанавливает все параметры в правильном порядке. и тому подобное. Вот пример такого сценария - очевидно, вам придется изменить его в соответствии с желаемыми настройками: http://tltech.com/info/php-mail-via-smtp/

0 голосов
/ 01 декабря 2009

Просто настройте свой локальный sendmail для использования вашего почтового сервера в качестве ретранслятора! Таким образом, вам не нужно менять что-либо на стороне PHP.

Не было бы хорошей идеей отправлять почту напрямую из PHP с помощью SMTP, потому что вы потеряете все от обработки ошибок до постановки в очередь таким образом!

0 голосов
/ 01 декабря 2009

Нет, причина в том, что все системы Linux / Unix должны иметь инструмент "sendmail". Преимущество заключается в том, что этот внешний инструмент может обрабатывать тайм-ауты или SMTP-серверы, не отвечающие на запросы, поэтому повышается вероятность того, что почта действительно отправляется. Реализация SMTP-клиента для Windows - это обходной путь для того факта, что «sendmail» там не существует.

Мой подход заключается в использовании sendmail-совместимого инструмента, который просто общается с другим сервером, используя SMTP. Простой инструмент для этого - ssmtp (исходные коды здесь )

0 голосов
/ 01 декабря 2009

Проверьте эти ссылки:

* * 1 022 Пример: * 1 023 *

Обновление: тогда вы можете использовать это, но оно открывает и закрывает сокет SMTP для каждой вызываемой функции mail ().

<?php
$to      = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);
?>
...