функция php mail () не работает - PullRequest
0 голосов
/ 18 июля 2011

Я получаю сообщение об ошибке «Не удалось создать экземпляр почтовой функции» от PHPMailer. Из прочтения я понимаю, что это означает, что функция PHP mail () по какой-то причине не работает.

Результаты phpinfo () для настроек почты:

My PHP mail settings

Для меня это означает, что mail () должен работать и порт 25 открыт. Это верно?

Есть что-нибудь еще, что я могу проверить, чтобы сделать эту работу, пожалуйста? Я взглянул на документы для функции mail (), но я не мог понять, какие исключения он выдает и как я распечатал их на экране. Я сделал:

mail('name@email.com', "test", "test") or die("Doesn't work");

type test, но это мое сообщение об ошибке, и я мог бы сделать что-то более полезное.

Благодарен за любую помощь в этом.

Большое спасибо

Ответы [ 5 ]

2 голосов
/ 18 июля 2011

это не означает, что порт 25 открыт, это просто означает, что PHP должен использовать порт 25 для связи с SMTP-сервером. Вы не указываете, в какой ОС вы работаете, но обратите внимание, что sendmail будет доступен только для Unix и не сможет работать, если вы работаете в Windows.

0 голосов
/ 10 августа 2011

Мой ответ будет - не отправляйте электронные письма, позвонив в Sendmail.Метод sendmail (или ЛЮБОЙ локальный метод) - это куча ловушек ... и даже если вы преодолеете эти проблемы, суть в том, что многие спам-фильтры (в местах, куда вы отправляете почту) просто не любят этот тип почты,

Чтобы немного подробнее объяснить, почему подход sendmail плох, ваш демон sendmail вряд ли будет настроен на использование SMTP HELO, который соответствует обратному DNS вашего IP-адреса.Ваш веб-сервер вряд ли будет иметь действительный обратный DNS, соответствующий стандартному имени хоста.НЕТ обратного DNS вообще плохо, как и rdns вроде 123-123-123-123-static.someisp.com.Например, SpamAssassing помечает такие «ненастроенные или обратные DNS-серверы по умолчанию».

К счастью, вам не нужно понимать или исправлять все, что я только что сказал.Гораздо проще выполнить (и легче протестировать / отладить), чтобы GATEWAY ваши письма через работающий почтовый SMTP-сервер.Для этого:

1a) Установите PHPMailer http://phpmailer.worxware.com/ ... ИЛИ 1b) Установите библиотеку PEAR Mail () http://pear.php.net/package/Mail

1a или 1b заменит ограниченноефункция "mail ()" в PHP.Эти замены поддерживают как SMTP, так и SMTP с проверкой подлинности.

2) Я предлагаю использовать SMTP с проверкой подлинности поверх обычного SMTP.Либо работает, но с аутентифицированным SMTP вы можете буквально отправлять почту через другой почтовый сервер так же, как если бы ваш скрипт был локальным почтовым клиентом, таким как Outlook.Это имеет большие преимущества.Например, если вы компания, отправляющая почту, ваша почта более вероятно будет доверена удаленным / целевым почтовым серверам, поскольку ваш почтовый сервер имеет хорошую репутацию и (надеюсь) правильную обратную настройку DNS.Но если вы отправляете письмо с веб-сервера, у вас ничего этого нет (и если вы используете общий веб-хостинг, вы унаследуете репутацию электронной почты на любых других сайтах, работающих на IP вашего веб-сервера.).

0 голосов
/ 18 июля 2011

Настройки из phpinfo () показывают, что PHP настроен на использование SMTP, но это не значит, что на компьютере настроен SMTP-сервер. Ваше сообщение об ошибке указывает на то, что он не настроен.

Удачи

0 голосов
/ 18 июля 2011

Я, вероятно, далеко, но проверьте, установлен ли sendmail, возможно, он неисправен.Это зависит от вашей ОС.

0 голосов
/ 18 июля 2011

Этот список просто покажет вам ваши текущие настройки.Это не значит, что они правы.:)

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

...