«Не удалось подключиться к почтовому серверу» при использовании SMTP - PullRequest
0 голосов
/ 25 июля 2011

Я пытаюсь отправить электронное письмо со следующей функцией в качестве тестовой функции:

function SendEmail($to, $subject, $body, $headers)
{
    ini_set("SMTP", "smtp.myexistingdomain.com");
    mail($to, $subject, $body, $headers);
}

и я получаю эту ошибку:

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

Ответы [ 3 ]

3 голосов
/ 27 июля 2011

PHP не реализует протокол SMTP. PHP mail () - это оболочка бинарного файла sendmail. Отлично работает на Unix / Linux. Но на Windows (из руководства PHP.net):

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

Итак - мораль истории - вам нужно установить почтовый сервер.

Если вы предпочитаете отправлять электронные письма без установки собственного почтового сервера (что может быть проблемой * ss) - вы должны использовать библиотеку, которая фактически реализует протокол SMTP и, таким образом, позволяет подключаться к другому SMTP-серверу. Это самые популярные в наше время:

  1. PHPmailer ( скачать )
  2. Swiftmailer
  3. Zend_Mail

Используя эти библиотеки, можно легко создавать текстовые или html-сообщения. Добавление файлов также становится простым делом.

/*******************************************************************
  Example of sending email using gmail.com SMTP server and phpmailer
*******************************************************************/
$mail = new PHPMailer();  // create a new object
$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 0;  // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true;  // authentication enabled
$mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail
$mail->Host = 'smtp.gmail.com';
$mail->Port = 465; 
$mail->Username = GUSER;  
$mail->Password = GPWD;           
$mail->SetFrom($from, $from_name);
$mail->Subject = $subject;
$mail->Body = $body;
$mail->AddAddress($to);
if(!$mail->Send()) {
    $error = 'Mail error: '.$mail->ErrorInfo; 
    return false;
} else {
    $error = 'Message sent!';
    return true;
}
0 голосов
/ 25 июля 2011

Настройка SMTP доступна только в Windows.Вы можете подключиться напрямую к этому хосту / порту через telnet?Если что-то внешнее по отношению к PHP, но работающее на хосте, также не может подключиться, то либо это неправильное имя хоста, либо он не прослушивает порт 25, и / или возникла проблема с брандмауэром.

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

вы уверены, что этот домен работает, а сервер smtp активен на порту 25?Безопасный SMTP-трафик использует другой порт, Google может сказать вам, какой через секунду:)

вы можете попробовать это, если на вашем компьютере установлен telnet:

откройте командную строку, введите: telnetsmtp.myexistingdomain.com 25 при подключении вы можете быть уверены, что домен работает и имеет прослушивающий SMTP-сервер.в случае сбоя сервер smtp, вероятно, недоступен или использует другой порт.

Еще одна вещь, которую вы можете проверить, - если в файле php.ini указаны правильные учетные данные, для большинства серверов smtp требуется аутентификация.

...