Почему функция mail () PHP не работает с установкой WAMP по умолчанию? - PullRequest
1 голос
/ 05 августа 2010

У меня установлена ​​по умолчанию WAMP Server 2.0.

Я пытаюсь отправить электронное письмо с помощью этого простого сценария:

<?php

if (mail('my_email@gmail.com', 'My Title', 'Some Text')) {
    echo "OK";
} else {
    echo "Why ??";
}

?>

К сожалению, я получаю следующее предупреждение:

Предупреждение: mail () [function.mail]: не удалось подключиться к почтовому серверу через порт «localhost» 25, проверить настройки «SMTP» и «smtp_port» в php.ini или использовать ini_set () вC: \ My_Path \ send_email.php в строке 3 Почему ??

Что может быть причиной этого?

Я ожидал, что отправка электронной почты будет очень простой задачей ...(

Ответы [ 3 ]

6 голосов
/ 05 августа 2010

Для отправки электронной почты вам необходим сервер исходящей электронной почты (MTA). В большинстве систем Linux существует одна по умолчанию, и PHP будет использовать ее, отправляя почту на sendmail, приложение / псевдоним Linux для отправки почты на любой установленный MTA.

Windows по умолчанию не включает MTA. В Windows, чтобы иметь возможность отправлять почту из PHP, вам нужно иметь доступ к какому-либо серверу исходящей электронной почты и сообщать PHP адрес и порт этого сервера. Это делается в php.ini с использованием настроек SMTP и smtp_port. По умолчанию будет установлено значение localhost для порта 25. Если вы сами не настроили почтовый сервер на этом компьютере, произойдет сбой.

Если ваш провайдер предоставляет вам сервер исходящей почты, например, вы можете использовать его адрес и номер порта. Или, если вы серьезно относитесь к отправке почты, вы бы настроили свой собственный почтовый сервер на локальном компьютере или где-нибудь в вашей локальной сети.

1 голос
/ 05 августа 2010

Краткий ответ: SMTP-сервер не настроен для локального компьютера (localhost). Windows не поставляется со встроенным SMTP-сервером, готовым к выходу из коробки. Вы можете ретранслировать почту через другой хост (используя директиву SMTP php.ini) - но редко когда вы найдете открытую ретрансляцию для тестовых почтовых сообщений среды.

Вместо использования mail() вы можете использовать скрипт типа PHPMailer , который может напрямую подключаться к вашему серверу исходящей электронной почты с надлежащей аутентификацией. Вот быстрый фрагмент для Gmail (хотя он и не завершен) и полный пример .

0 голосов
/ 15 сентября 2010

Вы можете использовать «Поддельный Sendmail»: http://glob.com.au/sendmail/

То есть вам не нужен SMTP-сервер на тестовом компьютере, вам нужно только указать путь к программе в вашем php.ini

Ciao! Stefan

...