Отправить почту с помощью PHP

Я использую тот же 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, должен ли он содержать что-то другое?

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

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

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

Можете ли вы попробовать использовать внешний почтовый сервер 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 

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

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