Отправка почты с использованием PHP не работает - PullRequest
1 голос
/ 21 декабря 2010

Я использую тот же php-код, который я всегда использовал, чтобы попытаться отправить форму по электронной почте, и я получаю это сообщение:

Предупреждение: mail () [function.mail]: Не удалось подключиться к почтовому серверу "localhost" порт 25, проверьте ваш Настройка «SMTP» и «smtp_port» в php.ini или используйте ini_set () в sendMailSuscribete.php в строке 44

это строки 40 - 54:

$header .= "From: $email" . "\r\n";
$header .= "Reply-To: $email" . "\r\n";
$header .= "Return-Path: $email" . "\r\n";

if(mail($to, $subject, $msg, $header)){
    //Message sent!
    redirect("http://www.domain.com/suscribete.html");
}else{
    // Display error message if the message failed to send
    echo "
    <div class=\"MsgError\">
        <h1>Error&hellip;</h1>
        <p>Disculpa <b><?=$name;?></b>, tu mensaje fall&oacute; en ser enviado. Por favor vuelve a intentar.</p>
</div>";
}

Я уже проверил, используя phpinfo(), и я знаю, что для smtp установлено значение localhost и используется порт, равный 25, поэтому я действительно не знаю, в чем может быть ошибка.

Обновление Я забыл сказать, что он работает на сервере Windows, и этот php-файл я всегда использовал для серверов Unix, должен ли он содержать что-то другое?

Ответы [ 3 ]

3 голосов
/ 21 декабря 2010

mail не может отправлять электронные письма напрямую (по крайней мере, в Windows), ему нужен SMTP-сервер.На хосте, на котором выполняется PHP-скрипт, не работает SMTP-сервер.Решения:

  1. Используйте библиотеку, которая может отправлять электронные письма напрямую с использованием SMTP, например PHPMailer или Swiftmailer ( github repo ).
  2. Измените директивы php.ini так, чтобы они указывали на SMTP-сервер, который принимает электронную почту от вас.Попросите вашего хостинг-провайдера, если вы не знаете, какой из них использовать.
  3. Настройте SMTP-сервер на localhost.

Точка 1. хорошая идея, поскольку эти библиотеки предоставляют абстракциичто делает ненужным иметь дело с вещами низкого уровня, такими как правильное соединение сообщений MIME.Пункт 2. это, вероятно, наименьшая проблема.Я советую против пункта 3., если вы не серьезно относитесь к администрированию почтового сервера самостоятельно.

3 голосов
/ 21 декабря 2010

Можете ли вы попробовать использовать внешний почтовый SMTP-сервер, например, Gmail?Если у вас есть учетная запись Gmail, вы можете попробовать добавить это перед вашей почтовой командой:

ini_set("SMTP","ssl://smtp.gmail.com");
ini_set("smtp_port","465");
ini_set("username","<myaccount.gmail.com>"); # You need to change this
ini_set("password","YOUR_PASSWORD"); # You need to change this

Я не проверял эти настройки, но он должен отправить вас в правильном направлении.

0 голосов
/ 21 декабря 2010

Какой почтовый сервер у вас есть?Некоторые ведут себя немного иначе ... http://www.php.net/manual/en/function.mail.php (просто прокрутите вниз)

...