Ошибка подключения к серверу smtp 111

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

Вот мой код:

require 'PHPMailerAutoload.php';
$config = parse_ini_file('/path/to/file/config.ini', true);
$mail = new PHPMailer;
$mail->SMTPDebug = 3;
$mail->Debugoutput = 'html';
$mail->isSMTP();
$mail->Host = $config['host']; //smtp.office365.com
$mail->SMTPAuth = true;
$mail->Username = $config['username']; //an.existing.account@appinc.co
$mail->Password = $config['password']; //confirmed this is being passed correctly
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->From = $config['username'];
$mail->FromName = 'Website Forms';
$mail->addAddress('sales@appinc.co', 'Some Name');
$mail->addReplyTo('sender.email@somedomain.com', 'SenderFirst SenderLast');
$mail->addBCC('my.email.address@appinc.co');
$mail->isHTML(true);
$mail->Subject = 'Contact Form Submission';
$mail->Body = 'Some html here';
$mail->AltBody = 'Some alt content here';
if(!$mail->send()) {
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
//perform success actions
exit();
}

Я подтвердил, что домен, имя пользователя и пароль верны и передаются правильно. Важно отметить, что это работало на нашем локальном сервере разработчика до запуска. Как только сайт был перенесен на наш хостинг-аккаунт (Hostgator), это когда он перестал работать. Я подтвердил с помощью HG, что порт 587 открыт на нашем сервере.

Вот сообщение об ошибке, которое я вижу:

Connection: opening to smtp.office365.com:587, t=10, opt=array ()
SMTP ERROR: Failed to connect to server: Connection refused (111)
SMTP connect() failed.
Message could not be sent.Mailer Error: SMTP connect() failed.

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

8

Решение

Ни один из ответов не сработал для меня.
Через много часов я нашел проблему, но работает только для Cpanel / WHM

  • Войдите в WHM.
  • Перейти к ConfigServer Security & Брандмауэр внутри плагина опция.
  • Нажмите на настройку брандмауэра
  • Фильтр по настройкам SMTP
  • Найдите параметр SMTP_ALLOWUSER и добавьте имя пользователя учетной записи Cpanel, разделенное комой.
  • Перезагрузите брандмауэр.

Если у вас нет доступа к WHM, обратитесь к своему провайдеру.

6

Другие решения

В PHP 5.5 и phpmailer есть ошибка с номером порта. Не устанавливайте номер порта (mail-> port = ….), это вызывает ошибку:
msgstr «ошибка smtp не удалось установить соединение с сервером отказано 111»

Оставьте номер порта по умолчанию 25, и он будет работать!

2

Оказывается, HG нужно было изменить настройки брандмауэра на нашем сервере. Как только они это сделали, все заработало отлично. Так что, если у вас возникла подобная проблема, я бы порекомендовал убедиться, что все правильно с вашей стороны, но затем посоветуйтесь с вашим хостинг-провайдером, чтобы узнать, что нужно сделать с их стороны.

0

Если вы используете cPanel / WHM, вам необходимо убедиться, что:

Ограничить исходящий SMTP для root, exim и mailman (FKA SMTP Tweak) — установлен в OFF. (Это можно отредактировать в разделе «Конфигурация сервера» Настройки твика (поиск: SMTP))

Если у вас также есть ConfigServer Security & Брандмауэр включен, вам нужно будет изменить конфигурацию брандмауэра. Нажмите «Настройка брандмауэра», затем выберите «Фильтровать по настройкам SMTP». Теперь найдите SMTP_ALLOWUSER и добавьте имя пользователя учетной записи cPanel, разделенное комой. Нажмите «Изменить» и перезапустите брандмауэр.

0

Есть 3 сервера.
1 mailwizz -web программа для отправки писем
2 mailwizz -web программа для отправки писем
3 почтовый сервер

оба mailwiz — по конфигурации вроде как идентичны
на почтовом сервере 587 порт открыт, ограничений на mailwizz сервера нет, все в порядке
mailwizz,ы подключаются к почтовому серверу через smtp
почтовым сервером управляет PMTA, сертификаты настроены — другой майлвиз шлет

проблема:
1 mailwizz — прекрасно коннектится по 587 к почтовому серверу и шлет письма
2 mailwizz — не как не хочет, пишет ошибку

SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Connection: opening to m-spf.ru:587, timeout=30, options=array ( 'ssl' => array ( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true, ),)
Connection failed. Error #2: stream_socket_client(): unable to connect to postal.ru:587 (Connection refused) [/var/www/mailwizz/data/www/mailwizz.ru/apps/common/vendors/Composer/vendor/phpmailer/phpmailer/src/SMTP.php line 387]
SMTP ERROR: Failed to connect to server: Connection refused (111)

на проблемном сервере mailwizz
— панель isp manager
— PHP Version 7.3.19
— SSL Version OpenSSL/1.0.2u
openssl
OpenSSL support enabled
OpenSSL Library Version OpenSSL 1.1.0l 10 Sep 2019
OpenSSL Header Version OpenSSL 1.1.0l 10 Sep 2019
Openssl default config /usr/lib/ssl/openssl.cnf
Native OpenSSL support enabled

все что про него знаю, вроде тоже самое что на другом mailwizz

Как можно мой майлвиз подружить с 587 портом моего почтового сервера.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<?php /** * SendMailSmtpClass *  * Класс для отправки писем через SMTP с авторизацией * Может работать через SSL протокол * Тестировалось на почтовых серверах yandex.ru, mail.ru и gmail.com *  * @author Ipatov Evgeniy <admin@ipatov-soft.ru> * @version 1.0 */ class SendMailSmtpClass {       /**     *      * @var string $smtp_username - логин     * @var string $smtp_password - пароль     * @var string $smtp_host - хост     * @var string $smtp_from - от кого     * @var integer $smtp_port - порт     * @var string $smtp_charset - кодировка     *     */       public $smtp_username;     public $smtp_password;     public $smtp_host;     public $smtp_from;     public $smtp_port;     public $smtp_charset;         public function __construct($smtp_username, $smtp_password, $smtp_host, $smtp_from, $smtp_port = 25, $smtp_charset = "utf-8") {         $this->smtp_username = $smtp_username;         $this->smtp_password = $smtp_password;         $this->smtp_host = $smtp_host;         $this->smtp_from = $smtp_from;         $this->smtp_port = $smtp_port;         $this->smtp_charset = $smtp_charset;     }         /**     * Отправка письма     *      * @param string $mailTo - получатель письма     * @param string $subject - тема письма     * @param string $message - тело письма     * @param string $headers - заголовки письма     *     * @return bool|string В случаи отправки вернет true, иначе текст ошибки    *     */     function send($mailTo, $subject, $message, $headers) {         $contentMail = "Date: " . date("D, d M Y H:i:s") . " UTrn";         $contentMail .= 'Subject: =?' . $this->smtp_charset . '?B?'  . base64_encode($subject) . "=?=rn";         $contentMail .= $headers . "rn";         $contentMail .= $message . "rn";                 try {             if(!$socket = @fsockopen($this->smtp_host, $this->smtp_port, $errorNumber, $errorDescription, 30)){                 throw new Exception($errorNumber.".".$errorDescription);             }             if (!$this->_parseServer($socket, "220")){                 throw new Exception('Connection error');             }                         $server_name = $_SERVER["SERVER_NAME"];             fputs($socket, "HELO $server_namern");             if (!$this->_parseServer($socket, "250")) {                 fclose($socket);                 throw new Exception('Error of command sending: HELO');             }                         fputs($socket, "AUTH LOGINrn");             if (!$this->_parseServer($socket, "334")) {                 fclose($socket);                 throw new Exception('Autorization error');             }                                                 fputs($socket, base64_encode($this->smtp_username) . "rn");             if (!$this->_parseServer($socket, "334")) {                 fclose($socket);                 throw new Exception('Autorization error');             }                         fputs($socket, base64_encode($this->smtp_password) . "rn");             if (!$this->_parseServer($socket, "235")) {                 fclose($socket);                 throw new Exception('Autorization error');             }                         fputs($socket, "MAIL FROM: <".$this->smtp_username.">rn");             if (!$this->_parseServer($socket, "250")) {                 fclose($socket);                 throw new Exception('Error of command sending: MAIL FROM');             }                         $mailTo = ltrim($mailTo, '<');             $mailTo = rtrim($mailTo, '>');             fputs($socket, "RCPT TO: <" . $mailTo . ">rn");                 if (!$this->_parseServer($socket, "250")) {                 fclose($socket);                 throw new Exception('Error of command sending: RCPT TO');             }                         fputs($socket, "DATArn");                 if (!$this->_parseServer($socket, "354")) {                 fclose($socket);                 throw new Exception('Error of command sending: DATA');             }                         fputs($socket, $contentMail."rn.rn");             if (!$this->_parseServer($socket, "250")) {                 fclose($socket);                 throw new Exception("E-mail didn't sent");             }                         fputs($socket, "QUITrn");             fclose($socket);         } catch (Exception $e) {             return  $e->getMessage();         }         return true;     }         private function _parseServer($socket, $response) {         while (@substr($responseServer, 3, 1) != ' ') {             if (!($responseServer = fgets($socket, 256))) {                 return false;             }         }         if (!(substr($responseServer, 0, 3) == $response)) {             return false;         }         return true;             } }

Sometimes users need to send outgoing e-mails with external SMTP servers. Most popular example is PHPMailer with its ability to use free SMTP servers, for example Gmail. Here is the short piece of code, that allows to do this:

<?php
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
require './mail/PHPMailer-master/src/Exception.php';
require './PHPMailer-master/src/PHPMailer.php';
require './mail/PHPMailer-master/src/SMTP.php';
date_default_timezone_set('Etc/UTC');
$milo="this is a test";
/**
* This example shows sending a message using PHP's mail() function.
*/
//Create a new PHPMailer instance
$mail = new PHPMailer;
//Tell PHPMailer to use SMTP
$mail->isSMTP();
$mail->SMTPDebug = 0;
//Set who the message is to be sent from
$mail->setFrom('example@gmail.com', 'First Last');
//Set who the message is to be sent to
$mail->addAddress('support@example.com', 'John Doe');
//Set the subject line
$mail->Subject = 'PHPMailer test 2 smtp';
$mail->CharSet = 'UTF-8';
//Ask for HTML-friendly debug output
$mail->Debugoutput = 'html';
$mail->SMTPSecure = 'tls';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
//Whether to use SMTP authentication
$mail->SMTPAuth = true;
//Username to use for SMTP authentication
$mail->Username = "example@gmail.com";
//Password to use for SMTP authentication
$mail->Password = "yourpassword";
$mail->msgHTML($milo);
//Replace the plain text body with one created manually
$mail->AltBody = $milo;
//send the message, check for errors
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
?>

If you have a Directadmin server with csf firewall installed, most probably you will get this message on execution:

SMTP ERROR: Failed to connect to server: Connection refused (111)

Let’s investigate what causes this error. First, we need to change debug level in our script to get all error messages:

$mail->SMTPDebug = 4;

Here is what we are getting:

2018-03-29 13:01:34 Connection: opening to smtp.gmail.com:587, timeout=300, options=array()
2018-03-29 13:01:37 Connection failed. Error #2: stream_socket_client(): unable to connect to smtp.gmail.com:587 (Connection refused) [SMTP.php line 326]
2018-03-29 13:01:37 SMTP ERROR: Failed to connect to server: Connection refused (111)
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

So the problem seems to be with opening port 587 – the script is even unable to connect. Let’s verify if we have this port blocked by firewall:

[root@server ~]# dmesg | grep 587

Most probably our output will look like this:

Firewall: *TCP_OUT Blocked* IN= OUT=eth0 SRC=62.210.90.101 DST=66.102.1.109 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=57285 DF PROTO=TCP SPT=50856 DPT=587 WINDOW=14600 RES=0x00 SYN URGP=0 UID=503 GID=505
Firewall: *TCP6OUT Blocked* IN= OUT=eth0 SRC=fe80:0000:0000:0000:fabc:12ff:fe48:effa DST=2a00:1450:400c:0c06:0000:0000:0000:006d LEN=80 TC=0 HOPLIMIT=64 FLOWLBL=0 PROTO=TCP SPT=45138 DPT=587 WINDOW=14400 RES=0x00 SYN URGP=0 UID=503 GID=505
Firewall: *TCP6OUT Blocked* IN= OUT=eth0 SRC=fe80:0000:0000:0000:fabc:12ff:fe48:effa DST=2a00:1450:400c:0c06:0000:0000:0000:006d LEN=80 TC=0 HOPLIMIT=64 FLOWLBL=0 PROTO=TCP SPT=45138 DPT=587 WINDOW=14400 RES=0x00 SYN URGP=0 UID=503 GID=505

Here’s the catch – our firewall is blocking outgoing connection through this port. We need to unlock it to continue. Here is the solution.

Open /etc/csf/csf.conf in any editor

Scroll to this line:

SMTP_BLOCK = "1"

Change it to

SMTP_BLOCK = "0"

Restart csf:

csf -r

Now you should be able to use your script without any issues.

Sorry if this is a road heavily traveled. I’ve seen the other posts about this but nothing in them has either solved the problem I’m having or ignited a lightbulb that helped me solve it myself.

Here’s my code:

require 'PHPMailerAutoload.php';
$config = parse_ini_file('/path/to/file/config.ini', true);
$mail = new PHPMailer;
$mail->SMTPDebug = 3;
$mail->Debugoutput = 'html';
$mail->isSMTP();
$mail->Host = $config['host']; //smtp.office365.com
$mail->SMTPAuth = true;
$mail->Username = $config['username']; //an.existing.account@appinc.co
$mail->Password = $config['password']; //confirmed this is being passed correctly
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->From = $config['username'];
$mail->FromName = 'Website Forms';
$mail->addAddress('sales@appinc.co', 'Some Name');
$mail->addReplyTo('sender.email@somedomain.com', 'SenderFirst SenderLast');
$mail->addBCC('my.email.address@appinc.co');
$mail->isHTML(true);
$mail->Subject = 'Contact Form Submission';
$mail->Body = 'Some html here';
$mail->AltBody = 'Some alt content here';
if(!$mail->send()) {
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    //perform success actions
    exit();
}

I’ve confirmed that the domain, username and password are all correct and being passed in correctly. Important to note that this worked on our local dev server prior to launch. Once the site was moved to our hosting account (Hostgator) is when it stopped working. I’ve confirmed with HG that port 587 is open on our server.

Here is the error message I’m seeing:

Connection: opening to smtp.office365.com:587, t=10, opt=array ()
SMTP ERROR: Failed to connect to server: Connection refused (111)
SMTP connect() failed.
Message could not be sent.Mailer Error: SMTP connect() failed.

Any help that can be provided is very much appreciated, even if it’s just a link to an article that explains why it won’t work now that it’s in our production environment.

What’s Causing This Error

The SMTP 111 error occurs when an issue is present while connecting with the remote SMTP server. For example, you would run into this error due to invalid sender domains or firewall issues.

Additionally, with some mail servers (Amazon SES in particular), you may encounter the 111 error due to invalid login credentials or if the email sending port gets blocked by the recipient.

Solution — Here’s How To Resolve It

First, ensure that the email address to which you’re sending the email is spelled correctly (especially the domain name). For example, if you’re sending the email to a Gmail domain, ensure that the domain is «gmail.com.»

Then, ensure that you’ve provided the correct username and password for SMTP authentication.

Finally, ensure that the email sending port is available for use on your end, and ensure that the port gets accepted on the recipient’s end.

However, you can only troubleshoot the SMTP server for firewall issues if the error persists by connecting to the recipient SMTP server through your local computer. If you cannot connect to the server through your local computer, the issue may likely occur on the recipient’s end. Therefore you may have to contact the recipient for more information.

Есть 3 сервера.
1 mailwizz -web программа для отправки писем
2 mailwizz -web программа для отправки писем
3 почтовый сервер

оба mailwiz — по конфигурации вроде как идентичны
на почтовом сервере 587 порт открыт, ограничений на mailwizz сервера нет, все в порядке
mailwizz,ы подключаются к почтовому серверу через smtp
почтовым сервером управляет PMTA, сертификаты настроены — другой майлвиз шлет

проблема:
1 mailwizz — прекрасно коннектится по 587 к почтовому серверу и шлет письма
2 mailwizz — не как не хочет, пишет ошибку

SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Connection: opening to m-spf.ru:587, timeout=30, options=array ( 'ssl' => array ( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true, ),)
Connection failed. Error #2: stream_socket_client(): unable to connect to postal.ru:587 (Connection refused) [/var/www/mailwizz/data/www/mailwizz.ru/apps/common/vendors/Composer/vendor/phpmailer/phpmailer/src/SMTP.php line 387]
SMTP ERROR: Failed to connect to server: Connection refused (111)

на проблемном сервере mailwizz
— панель isp manager
— PHP Version 7.3.19
— SSL Version OpenSSL/1.0.2u
openssl
OpenSSL support enabled
OpenSSL Library Version OpenSSL 1.1.0l 10 Sep 2019
OpenSSL Header Version OpenSSL 1.1.0l 10 Sep 2019
Openssl default config /usr/lib/ssl/openssl.cnf
Native OpenSSL support enabled

все что про него знаю, вроде тоже самое что на другом mailwizz

Как можно мой майлвиз подружить с 587 портом моего почтового сервера.

I am using PHPMailer to send the smtp emails. If I use the same setting in a WordPress site, it works fine. But my priority is to use in a custom php page. And there, it is giving the following errors

SMTP ERROR: Failed to connect to server: Connection refused (111)
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

My Code is here below

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

require 'emails/PHPMailer/PHPMailerAutoload.php';

//Create a new PHPMailer instance
$mail = new PHPMailer;
//Tell PHPMailer to use SMTP
$mail->isSMTP();
//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 2;
//Ask for HTML-friendly debug output
$mail->Debugoutput = 'html';
//Set the hostname of the mail server
$mail->Host = "smtp.gmail.com";
//Set the SMTP port number - likely to be 25, 465 or 587
$mail->Port = 587;
//Whether to use SMTP authentication
$mail->SMTPAuth = true;
//Username to use for SMTP authentication
$mail->Username = "mzubim@gmail.com";
$mail->Password = "password";
//Set who the message is to be sent from
$mail->setFrom('mzubim@gmail.com', 'Zubair Mushtaq');
//Set an alternative reply-to address
$mail->addReplyTo('replyto@gmail.com', 'Secure Developer');
//Set who the message is to be sent to
$mail->addAddress('abulogics@gmail.com', 'Abulogicss');
//Set the subject line
$mail->Subject = 'PHPMailer SMTP test';
//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
$mail->msgHTML("convert HTML into a basic plain-text alternative body");
//Replace the plain text body with one created manually
$mail->AltBody = 'This is a plain-text message body';

//send the message, check for errors
if (!$mail->send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
} else {
    echo "Message sent!";
}

asked Jun 27, 2016 at 18:42

Zubair Mushtaq's user avatar

Zubair MushtaqZubair Mushtaq

3031 gold badge5 silver badges21 bronze badges

1

try this its working fine

<?php
    include "emails/PHPMailer/PHPMailerAutoload.php"; 

    //Create a new PHPMailer instance
    $mail = new PHPMailer(); 

    $mail->IsSMTP(); 
    $mail->SMTPDebug = 1; 
    $mail->SMTPAuth = true; 
    $mail->SMTPSecure = 'ssl'; 
    $mail->Host = "smtp.gmail.com";

    $mail->Port = 465; 
    $mail->IsHTML(true);
    //Username to use for SMTP authentication
    $mail->Username = "@gmail.com";
    $mail->Password = "";
    //Set who the message is to be sent from
    $mail->setFrom('mzubim@gmail.com', 'Zubair Mushtaq');
    //Set an alternative reply-to address
    $mail->addReplyTo('replyto@gmail.com', 'Secure Developer');
    //Set who the message is to be sent to
    $mail->addAddress('abulogics@gmail.com', 'Abulogicss');
    //Set the subject line
    $mail->Subject = 'PHPMailer SMTP test';
    //Read an HTML message body from an external file, convert referenced images to embedded,
    //convert HTML into a basic plain-text alternative body
    $mail->msgHTML("convert HTML into a basic plain-text alternative body");
    //Replace the plain text body with one created manually
    $mail->AltBody = 'This is a plain-text message body';

    //send the message, check for errors
    if (!$mail->send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
        echo "Message sent!";
    }

enter image description here

answered Jun 29, 2016 at 6:36

4

the PHPMailer docs says that if it

-> //TCP port to connect to; use 587 if you have set SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS

And in your case u used ssl.

answered Sep 23, 2021 at 11:19

Mohammed Shabeer k's user avatar

Consider increasing the debugging whilst you have the problem:

$mail->SMTPDebug = SMTP::DEBUG_LOWLEVEL ;

(see PHPMailer Debug messages)

My issue finally turned out to be the ports on my mail requesting server were not open to even get to the mail server (i.e. fix the firewall).

answered Jul 1, 2022 at 16:48

user1432181's user avatar

user1432181user1432181

8611 gold badge9 silver badges24 bronze badges

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

Здесь мой код:

require 'PHPMailerAutoload.php';
$config = parse_ini_file('/path/to/file/config.ini', true);
$mail = new PHPMailer;
$mail->SMTPDebug = 3;
$mail->Debugoutput = 'html';
$mail->isSMTP();
$mail->Host = $config['host']; //smtp.office365.com
$mail->SMTPAuth = true;
$mail->Username = $config['username']; //[email protected]
$mail->Password = $config['password']; //confirmed this is being passed correctly
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->From = $config['username'];
$mail->FromName = 'Website Forms';
$mail->addAddress('[email protected]', 'Some Name');
$mail->addReplyTo('[email protected]', 'SenderFirst SenderLast');
$mail->addBCC('[email protected]');
$mail->isHTML(true);
$mail->Subject = 'Contact Form Submission';
$mail->Body = 'Some html here';
$mail->AltBody = 'Some alt content here';
if(!$mail->send()) {
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    //perform success actions
    exit();
}

Я подтвердил, что домен, имя пользователя и пароль верны и переданы правильно. Важно отметить, что это работало на нашем локальном сервере dev до запуска. После того, как сайт был перемещен на нашу учетную запись хостинга (Hostgator), когда он перестает работать. Я подтвердил с HG, что порт 587 открыт на нашем сервере.

Вот сообщение об ошибке, которое я вижу:

Connection: opening to smtp.office365.com:587, t=10, opt=array ()
SMTP ERROR: Failed to connect to server: Connection refused (111)
SMTP connect() failed.
Message could not be sent.Mailer Error: SMTP connect() failed.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<?php
/**
* SendMailSmtpClass
* 
* Класс для отправки писем через SMTP с авторизацией
* Может работать через SSL протокол
* Тестировалось на почтовых серверах yandex.ru, mail.ru и gmail.com
* 
* @author Ipatov Evgeniy <admin@ipatov-soft.ru>
* @version 1.0
*/
class SendMailSmtpClass {
 
    /**
    * 
    * @var string $smtp_username - логин
    * @var string $smtp_password - пароль
    * @var string $smtp_host - хост
    * @var string $smtp_from - от кого
    * @var integer $smtp_port - порт
    * @var string $smtp_charset - кодировка
    *
    */   
    public $smtp_username;
    public $smtp_password;
    public $smtp_host;
    public $smtp_from;
    public $smtp_port;
    public $smtp_charset;
    
    public function __construct($smtp_username, $smtp_password, $smtp_host, $smtp_from, $smtp_port = 25, $smtp_charset = "utf-8") {
        $this->smtp_username = $smtp_username;
        $this->smtp_password = $smtp_password;
        $this->smtp_host = $smtp_host;
        $this->smtp_from = $smtp_from;
        $this->smtp_port = $smtp_port;
        $this->smtp_charset = $smtp_charset;
    }
    
    /**
    * Отправка письма
    * 
    * @param string $mailTo - получатель письма
    * @param string $subject - тема письма
    * @param string $message - тело письма
    * @param string $headers - заголовки письма
    *
    * @return bool|string В случаи отправки вернет true, иначе текст ошибки    *
    */
    function send($mailTo, $subject, $message, $headers) {
        $contentMail = "Date: " . date("D, d M Y H:i:s") . " UTrn";
        $contentMail .= 'Subject: =?' . $this->smtp_charset . '?B?'  . base64_encode($subject) . "=?=rn";
        $contentMail .= $headers . "rn";
        $contentMail .= $message . "rn";
        
        try {
            if(!$socket = @fsockopen($this->smtp_host, $this->smtp_port, $errorNumber, $errorDescription, 30)){
                throw new Exception($errorNumber.".".$errorDescription);
            }
            if (!$this->_parseServer($socket, "220")){
                throw new Exception('Connection error');
            }
            
            $server_name = $_SERVER["SERVER_NAME"];
            fputs($socket, "HELO $server_namern");
            if (!$this->_parseServer($socket, "250")) {
                fclose($socket);
                throw new Exception('Error of command sending: HELO');
            }
            
            fputs($socket, "AUTH LOGINrn");
            if (!$this->_parseServer($socket, "334")) {
                fclose($socket);
                throw new Exception('Autorization error');
            }
            
            
            
            fputs($socket, base64_encode($this->smtp_username) . "rn");
            if (!$this->_parseServer($socket, "334")) {
                fclose($socket);
                throw new Exception('Autorization error');
            }
            
            fputs($socket, base64_encode($this->smtp_password) . "rn");
            if (!$this->_parseServer($socket, "235")) {
                fclose($socket);
                throw new Exception('Autorization error');
            }
            
            fputs($socket, "MAIL FROM: <".$this->smtp_username.">rn");
            if (!$this->_parseServer($socket, "250")) {
                fclose($socket);
                throw new Exception('Error of command sending: MAIL FROM');
            }
            
            $mailTo = ltrim($mailTo, '<');
            $mailTo = rtrim($mailTo, '>');
            fputs($socket, "RCPT TO: <" . $mailTo . ">rn");     
            if (!$this->_parseServer($socket, "250")) {
                fclose($socket);
                throw new Exception('Error of command sending: RCPT TO');
            }
            
            fputs($socket, "DATArn");     
            if (!$this->_parseServer($socket, "354")) {
                fclose($socket);
                throw new Exception('Error of command sending: DATA');
            }
            
            fputs($socket, $contentMail."rn.rn");
            if (!$this->_parseServer($socket, "250")) {
                fclose($socket);
                throw new Exception("E-mail didn't sent");
            }
            
            fputs($socket, "QUITrn");
            fclose($socket);
        } catch (Exception $e) {
            return  $e->getMessage();
        }
        return true;
    }
    
    private function _parseServer($socket, $response) {
        while (@substr($responseServer, 3, 1) != ' ') {
            if (!($responseServer = fgets($socket, 256))) {
                return false;
            }
        }
        if (!(substr($responseServer, 0, 3) == $response)) {
            return false;
        }
        return true;
        
    }
}

Понравилась статья? Поделить с друзьями:
  • Ошибка подключения к серверу smtp 110
  • Ошибка подключения к серверу sedo fss ru
  • Ошибка подключения к серверу qushsvc
  • Ошибка постановки на кадастровый учет
  • Ошибка подключения к серверу imap 113