- Вопрос или проблема
- Ответ или решение
- Ошибка "SMTP connect() failed": Полное руководство по диагностике и устранению неполадок
- 1. Понимание ошибки
- 2. Проверка настроек SMTP
- 3. Проверьте блокировки со стороны хостинга или брандмауэра
- 4. Улучшение кода PHPMailer
- 5. Применение альтернативных SMTP-сервисов
- Заключение
Вопрос или проблема
Мы пытаемся настроить функцию SMTP, но постоянно сталкиваемся с ошибками при тестовой отправке электронной почты. Мы даже пробовали и WP-Mail-SMTP, и Easy WP SMTP. После общения с нашим хостингом WPEngine мы не нашли никаких проблем с их стороны, так как они используют OpenSSL и сказали нам использовать порт 2525, так как мы используем Outlook. Наши IT-специалисты также сказали, что этот порт должен работать без проблем и не заблокирован Outlook. Я даже использовал другое SMTP имя хоста: premierdisability-com.mail.protection.outlook.com. Однако оно также выдало ту же ошибку, но сообщило о тайм-ауте соединения вместо недоступности сети.
Единственный вариант, который я могу предложить, это редактирование/замена файлов class-phpmailer.php и class-smtp.php на более старую версию. Но Easy WP SMTP говорит, что он должен быть совместим с нашей настройкой WP (WP v4.8, PHP v5.6). Вы думаете, это было бы хорошим вариантом попробовать, или знаете что-то еще, что можно было бы попробовать?
object(PHPMailer)#1882 (76) {
["Version"]=>
string(6) "5.2.22"
["Priority"]=>
NULL
["CharSet"]=>
string(5) "UTF-8"
["ContentType"]=>
string(10) "text/plain"
["Encoding"]=>
string(4) "7bit"
["ErrorInfo"]=>
string(82) "SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting"
["From"]=>
string(34) "[email protected]"
["FromName"]=>
string(27) "Premier Disability Services"
["Sender"]=>
string(34) "[email protected]"
["ReturnPath"]=>
string(0) ""
["Subject"]=>
string(56) "WP Mail SMTP: Test mail to [email protected]"
["Body"]=>
string(68) "This is a test email generated by the WP Mail SMTP WordPress plugin."
["AltBody"]=>
string(0) ""
["Ical"]=>
string(0) ""
["MIMEBody":protected]=>
string(69) "This is a test email generated by the WP Mail SMTP WordPress plugin.
"
["MIMEHeader":protected]=>
string(405) "Date: Fri, 15 Sep 2017 18:16:49 +0000
To: [email protected]
From: Premier Disability Services
Subject: WP Mail SMTP: Test mail to [email protected]
Message-ID: <[email protected]>
X-Mailer: PHPMailer 5.2.22 (https://github.com/PHPMailer/PHPMailer)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
"
["mailHeader":protected]=>
string(0) ""
["WordWrap"]=>
int(0)
["Mailer"]=>
string(4) "smtp"
["Sendmail"]=>
string(18) "/usr/sbin/sendmail"
["UseSendmailOptions"]=>
bool(true)
["PluginDir"]=>
string(0) ""
["ConfirmReadingTo"]=>
string(0) ""
["Hostname"]=>
string(0) ""
["MessageID"]=>
string(0) ""
["MessageDate"]=>
string(31) "Fri, 15 Sep 2017 18:16:49 +0000"
["Host"]=>
string(18) "smtp.office365.com"
["Port"]=>
string(4) "2525"
["Helo"]=>
string(0) ""
["SMTPSecure"]=>
string(3) "tls"
["SMTPAutoTLS"]=>
bool(false)
["SMTPAuth"]=>
bool(true)
["SMTPOptions"]=>
array(0) {
}
["Username"]=>
string(34) "[email protected]"
["Password"]=>
string(8) "*******"
["AuthType"]=>
string(0) ""
["Realm"]=>
string(0) ""
["Workstation"]=>
string(0) ""
["Timeout"]=>
int(300)
["SMTPDebug"]=>
bool(true)
["Debugoutput"]=>
string(4) "echo"
["SMTPKeepAlive"]=>
bool(false)
["SingleTo"]=>
bool(false)
["SingleToArray"]=>
array(0) {
}
["do_verp"]=>
bool(false)
["AllowEmpty"]=>
bool(false)
["LE"]=>
string(1) "
"
["DKIM_selector"]=>
string(0) ""
["DKIM_identity"]=>
string(0) ""
["DKIM_passphrase"]=>
string(0) ""
["DKIM_domain"]=>
string(0) ""
["DKIM_private"]=>
string(0) ""
["DKIM_private_string"]=>
string(0) ""
["action_function"]=>
string(0) ""
["XMailer"]=>
string(0) ""
["smtp":protected]=>
object(SMTP)#1886 (14) {
["Version"]=>
string(6) "5.2.22"
["SMTP_PORT"]=>
int(25)
["CRLF"]=>
string(2) "
"
["do_debug"]=>
bool(true)
["Debugoutput"]=>
string(4) "echo"
["do_verp"]=>
bool(false)
["Timeout"]=>
int(300)
["Timelimit"]=>
int(300)
["smtp_transaction_id_patterns":protected]=>
array(3) {
["exim"]=>
string(21) "/[0-9]{3} OK id=(.*)/"
["sendmail"]=>
string(29) "/[0-9]{3} 2.0.0 (.*) Message/"
["postfix"]=>
string(35) "/[0-9]{3} 2.0.0 Ok: queued as (.*)/"
}
["smtp_conn":protected]=>
bool(false)
["error":protected]=>
array(4) {
["error"]=>
string(0) ""
["detail"]=>
string(0) ""
["smtp_code"]=>
string(0) ""
["smtp_code_ex"]=>
string(0) ""
}
["helo_rply":protected]=>
NULL
["server_caps":protected]=>
NULL
["last_reply":protected]=>
string(0) ""
}
["to":protected]=>
array(1) {
[0]=>
array(2) {
[0]=>
string(29) "[email protected]"
[1]=>
string(0) ""
}
}
["cc":protected]=>
array(0) {
}
["bcc":protected]=>
array(0) {
}
["ReplyTo":protected]=>
array(0) {
}
["all_recipients":protected]=>
array(1) {
["[email protected]"]=>
bool(true)
}
["RecipientsQueue":protected]=>
array(0) {
}
["ReplyToQueue":protected]=>
array(0) {
}
["attachment":protected]=>
array(0) {
}
["CustomHeader":protected]=>
array(0) {
}
["lastMessageID":protected]=>
string(56) "<[email protected]>"
["message_type":protected]=>
string(5) "plain"
["boundary":protected]=>
array(3) {
[1]=>
string(35) "b1_2b81fcc2a1a7b45ecfed265c6f74ed17"
[2]=>
string(35) "b2_2b81fcc2a1a7b45ecfed265c6f74ed17"
[3]=>
string(35) "b3_2b81fcc2a1a7b45ecfed265c6f74ed17"
}
["language":protected]=>
array(19) {
["authenticate"]=>
string(35) "SMTP Error: Could not authenticate."
["connect_host"]=>
string(43) "SMTP Error: Could not connect to SMTP host."
["data_not_accepted"]=>
string(30) "SMTP Error: data not accepted."
["empty_message"]=>
string(18) "Message body empty"
["encoding"]=>
string(18) "Unknown encoding: "
["execute"]=>
string(19) "Could not execute: "
["file_access"]=>
string(23) "Could not access file: "
["file_open"]=>
string(33) "File Error: Could not open file: "
["from_failed"]=>
string(35) "The following From address failed: "
["instantiate"]=>
string(36) "Could not instantiate mail function."
["invalid_address"]=>
string(17) "Invalid address: "
["mailer_not_supported"]=>
string(25) " mailer is not supported."
["provide_address"]=>
string(54) "You must provide at least one recipient email address."
["recipients_failed"]=>
string(45) "SMTP Error: The following recipients failed: "
["signing"]=>
string(15) "Signing Error: "
["smtp_connect_failed"]=>
string(22) "SMTP connect() failed."
["smtp_error"]=>
string(19) "SMTP server error: "
["variable_set"]=>
string(30) "Cannot set or reset variable: "
["extension_missing"]=>
string(19) "Extension missing: "
}
["error_count":protected]=>
int(2)
["sign_cert_file":protected]=>
string(0) ""
["sign_key_file":protected]=>
string(0) ""
["sign_extracerts_file":protected]=>
string(0) ""
["sign_key_pass":protected]=>
string(0) ""
["exceptions":protected]=>
bool(true)
["uniqueid":protected]=>
string(32) "2b81fcc2a1a7b45ecfed265c6f74ed17"
}
Вывод отладки SMTP отображен ниже:
2017-09-15 18:16:49 Соединение: открытие к smtp.office365.com:2525, тайм-аут=300, options=array (
)
2017-09-15 18:17:59 Соединение: Не удалось подключиться к серверу. Номер ошибки 2. "Ошибка: stream_socket_client(): не удалось подключиться к smtp.office365.com:2525 (Сеть недоступна)
2017-09-15 18:17:59 SMTP ОШИБКА: Не удалось подключиться к серверу: Сеть недоступна (101)
2017-09-15 18:17:59 SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Я только что обнаружил, что у нас была эта проблема вчера. Успешно настроил mailgun этим утром. Он бесплатен для менее чем 10 000 писем в месяц.
Дважды проверьте с вашим IT-отделом, разрешают ли они вашему серверу IP подключаться через порт 2525. У меня также есть сайты на WP Engine и использую SMTP-код, который подключается к нашему внутреннему почтовому серверу и отправляет электронные письма оттуда. Однако мне пришлось белый список нашего IP-адреса сервера WP Engine в нашем фаерволе, чтобы разрешить трафик через порт 2525.
Этот вопрос немного старый, но я хотел бы поделиться своим опытом с теми, кто в настоящее время сталкивается с той же проблемой.
Моя настройка: PHP 7.4, WordPress 5.7.2, WP Mail SMTP 2.8.0
Я хотел использовать пользовательский внешний SMTP-сервер. Не спрашивайте почему. Это сложно.
Я настроил все в соответствии с инструкциями провайдера почты/хостинга, но продолжал получать ошибки "SMTP connect() failed"
и "SMTP Error: Could not authenticate"
.
После небольших исследований и нескольких взаимосвязей с поддержкой изменение типа аутентификации AuthType
в PHPMailer
исправило проблему. Он по умолчанию устанавливался на "CRAM-MD5"
и не работал. Переключение на "PLAIN"
решило проблему. Поскольку все зашифровано, я решил, что отправка данных "PLAIN"
не должна быть проблемой. Это был вопрос с моим провайдером хостинга, однако я призываю всех с такой же проблемой поэкспериментировать с AuthType
.
Что-то вроде следующего в functions.php
сделало исправление постоянным, чтобы я мог обновлять WordPress и его плагины без опасений:
add_filter( 'wp_mail_smtp_custom_options', function( $phpmailer ) {
$phpmailer->AuthType="PLAIN";
return $phpmailer;
} );
Надеюсь это поможет кому-то!
.
Ответ или решение
Ошибка "SMTP connect() failed": Полное руководство по диагностике и устранению неполадок
Если вы сталкивались с ошибкой "SMTP connect() failed", это может вызывать большое количество проблем в процессе отправки электронной почты через ваш сервер. Рассмотрим причины и решения, связанные с этой распространенной проблемой.
1. Понимание ошибки
Ошибка "SMTP connect() failed" указывает на то, что ваш код не смог установить соединение с SMTP-сервером. Это может произойти по ряду причин, включая неправильные настройки SMTP, блокировки на уровне сети или проблемы с удостоверением.
2. Проверка настроек SMTP
Убедитесь, что настройки SMTP, которые вы используете, верны:
- Хост: В вашем случае это
smtp.office365.com
. - Порт: Вы указали
2525
. Хотя этот порт обычно используется для альтернативных SMTP-серверов, для Office 365 обычно используются порты587
или465
(для SSL). Рекомендуется попробовать использовать порт587
с TLS. - Шифрование: Убедитесь, что вы используете правильный метод шифрования (TLS). Это можно проверить в настройках вашего плагина, например, WP-Mail-SMTP.
- Логин и пароль: Убедитесь, что учетные данные для SMTP введены правильно и у пользователя есть разрешения на отправку электронной почты.
3. Проверьте блокировки со стороны хостинга или брандмауэра
Ваш хостинг-провайдер WP Engine отметил, что порты не заблокированы на их стороне, но стоит проверить следующие моменты:
- Убедитесь, что IP-адрес вашего сервера, с которого вы отправляете почту, разрешен на локальном SMTP-сервере. Возможно, потребуется добавить IP-адрес в белый список на брандмауэре.
- Проверьте, не блокирует ли ваш корпоративный брандмауэр соединения на порту 2525 или 587.
4. Улучшение кода PHPMailer
Из сообщения об ошибке видно, что используется PHPMailer версии 5.2.22
. Рассмотрите возможность обновления до более новой версии, так как более свежие версии могут содержать правки и улучшения, которые могут решить вашу проблему. Если обновление невозможно, вы можете попробовать изменить параметры авторизации:
- Возможно, вам стоит изменить тип авторизации на
PLAIN
, как рекомендовано в вашем фрагменте кода, добавив следующее в файлfunctions.php
вашей темы:
add_filter( 'wp_mail_smtp_custom_options', function( $phpmailer ) {
$phpmailer->AuthType = "PLAIN";
return $phpmailer;
} );
5. Применение альтернативных SMTP-сервисов
Если все вышеперечисленные шаги не помогли, вы можете рассмотреть использование альтернативных SMTP-сервисов, таких как Mailgun или SendGrid, которые предоставляют надежную отправку электронной почты и могут быть проще в настройке.
Заключение
Ошибка "SMTP connect() failed" может вызывать множество затруднений, однако необходимость проверки всех настроек и конфигураций может обеспечить решение проблемы. Важно аккуратно проверить параметры сервера, а также возможности вашего хостинга. Если все равно возникнут трудности, рассмотрите лечение проблемы с технической поддержкой вашего хостинг-провайдера или переходите на надежный SMTP-клиент. Надеюсь, информацию в этом руководстве поможет вам успешно решить проблемы с отправкой электронной почты.