SMTP ERROR: не удалось подключиться к серверу [duplicate]

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

Пример:

string value = null;
if (value.Length == 0) // <-- Causes exception
{
    Console.WriteLine(value); // <-- Never reached
}

Ошибка исключения:

Необработанное исключение:

System.NullReferenceException: ссылка на объект не установлена ​​в экземпляр объекта. в Program.Main ()

34
задан Ilian Andreev 13 August 2010 в 15:23
поделиться

9 ответов

есть mail.exampleserver.com существует ??? , если не попробовать следующий код (у вас должна быть учетная запись gmail)

$mail->SMTPSecure = "ssl";  
$mail->Host='smtp.gmail.com';  
$mail->Port='465';   
$mail->Username   = 'you@gmail.com'; // SMTP account username
$mail->Password   = 'your gmail password';  
$mail->SMTPKeepAlive = true;  
$mail->Mailer = "smtp"; 
$mail->IsSMTP(); // telling the class to use SMTP  
$mail->SMTPAuth   = true;                  // enable SMTP authentication  
$mail->CharSet = 'utf-8';  
$mail->SMTPDebug  = 0;   
4
ответ дан admdrew 26 August 2018 в 04:11
поделиться

У меня была аналогичная проблема. Я установил PHPMailer версии 1.72, который не готов управлять SSL-соединениями. Обновление до последней версии решило проблему.

0
ответ дан David 26 August 2018 в 04:11
поделиться

Следующий код работал для меня:

$mail = new PHPMailer(true);

$mail->isSMTP();// Set mailer to use SMTP
$mail->CharSet = "utf-8";// set charset to utf8
$mail->SMTPAuth = true;// Enable SMTP authentication
$mail->SMTPSecure = 'tls';// Enable TLS encryption, `ssl` also accepted

$mail->Host = 'smtp.gmail.com';// Specify main and backup SMTP servers
$mail->Port = 587;// TCP port to connect to
$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);
$mail->isHTML(true);// Set email format to HTML

$mail->Username = 'Sender Email';// SMTP username
$mail->Password = 'Sender Email Password';// SMTP password

$mail->setFrom('example@mail.com', 'John Smith');//Your application NAME and EMAIL
$mail->Subject = 'Test';//Message subject
$mail->MsgHTML('HTML code');// Message body
$mail->addAddress('User Email', 'User Name');// Target email


$mail->send();
0
ответ дан Dumitru Boaghi 26 August 2018 в 04:11
поделиться

Поскольку это популярная ошибка, проверьте PHPMailer Wiki на устранение неполадок.

Также это сработало для меня

$mailer->Port = '587';
0
ответ дан Francis Sunday 26 August 2018 в 04:11
поделиться

У меня была аналогичная проблема, и выяснилось, что это была директива конфигурации openssl.cafile в php.ini, которая должна была быть установлена, чтобы разрешить проверку безопасных одноранговых узлов. Вы просто установили его в расположение файла центра сертификации, подобного тому, который вы можете получить в http://curl.haxx.se/docs/caextract.html .

Это директива является новой по сравнению с PHP 5.6, поэтому это меня не впечатлило при обновлении с PHP 5.5.

6
ответ дан Jasper 26 August 2018 в 04:11
поделиться
  • 1
    Я в том же выпуске, используя PHP5.6, если я установил значение проверки равноправности равным false в электронной почте phpmailer, отправляется в папку спама. Любая идея, как я могу установить путь к сертификату? где получить сертификат? в Debian 8 VPS – Jobin Jose 20 February 2016 в 18:31
  • 2
    Спасибо. Для меня это сработало. То есть: cd / etc / php5 & amp; & amp; & amp; wget curl.haxx.se/ca/cacert.pem & amp; & amp; & amp; echo & quot; openssl.cafile = /etc/php5/cacert.pem" & GT; & GT; /etc/php5/apache2/php.ini – Szymon Wygnański 18 September 2017 в 07:58

Поскольку эти вопросы появляются в google, я хотел бы поделиться здесь своим решением для случая, когда PHP был просто обновлен до версии 5.6 (который имеет более строгие правила SSL).

Вики-страница PHPMailer имеет раздел об этом:

https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#php-56-certificate-verification-failure

Предлагаемое решение включает следующий фрагмент кода:

$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);

Это должно работать для PHPMailer 5.2.10 (и выше).

Примечание: Очевидно, а также как предлагается в этой вики, это должно быть временным решением!

Правильное исправление для этого - заменить неверный, неправильно сконфигурированный или самоподписанный сертификат с хорошим.

55
ответ дан Marten Koetsier 26 August 2018 в 04:11
поделиться
  • 1
    Вы, сэр, спасли мне жизнь! – php_nub_qq 7 April 2017 в 13:24
  • 2
    Это лучший ответ для тех, кто борется с рассылкой localhost и сталкивается с проблемами самоподписывания. – andromeda 1 September 2017 в 23:10
  • 3
    По какой-то причине это сработало – Mwangi Thiga 27 November 2017 в 10:39
  • 4
    Согласовано! Это лучшее решение для тех, кто находится в среде разработки. Просто оберните этот код в инструкции if, чтобы проверить тип среды. Если среда разработки, используйте этот код, иначе пусть сервер беспокоится о сертификации. – OzzyTheGiant 21 February 2018 в 19:28
  • 5
    Это решение работало и для меня! благодаря – Ferry Kranenburg 18 March 2018 в 12:10

У меня была та же проблема, и именно потому, что PHPMailer понял, что сервер поддерживает STARTTLS, поэтому он попытался автоматически обновить соединение с зашифрованным соединением. Мой почтовый сервер находится в той же подсети, что и веб-сервер в моей сети, который находится за нашими брандмауэрами домена, поэтому я не слишком беспокоюсь об использовании шифрования (плюс генерируемые электронные письма не содержат конфиденциальных данных).

Итак, что я сделал, и изменил SMTPAutoTLS на false в файле class.phpmailer.php.

/**
 * Whether to enable TLS encryption automatically if a server supports it,
 * even if `SMTPSecure` is not set to 'tls'.
 * Be aware that in PHP >= 5.6 this requires that the server's certificates are valid.
 * @var boolean
 */
public $SMTPAutoTLS = false;
4
ответ дан Sina 26 August 2018 в 04:11
поделиться
  • 1
    Это сработало для меня. Благодаря! – reformed 1 May 2018 в 15:47

В моем случае это было отсутствие поддержки SSL в PHP, которая дала эту ошибку.

Поэтому я включил расширение = php_openssl.dll

$mail->SMTPDebug = 1; также намекнул на это решение .

Обновление 2017

$mail->SMTPDebug = 2;, см.: https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#enabling-debug-output

47
ответ дан Tino Rüb 26 August 2018 в 04:11
поделиться
  • 1
    Включение этого расширения PHP (опция меню WAMP) было тем, что мне нужно. Спасибо. – jwinn 27 August 2011 в 06:57
  • 2
    Ты мой герой. Я уже много часов борюсь с электронными письмами на своем локальном хосте, но это решило все мои проблемы! – Mikkel R. Lund 4 April 2012 в 17:47
  • 3
    Это спасло меня много времени! – Bronek 15 July 2013 в 22:55
  • 4
    Как вы включили это расширение? @wessel – Faisal Ashfaq 18 April 2014 в 08:15
  • 5
    Как я могу включить расширение = php_openssl.dll в GoDaddy Hosting? Благодаря – Fernando Urban 28 April 2016 в 04:28

Вероятнее всего, ваша проблема связана с этим

Безопасность подключения: STARTTLS Connection Security: SSL / TLS

Это два разных протокола: используете ли вы правильный, независимо от того, re использование в Thunderbird должно быть использовано.

Попробуйте установить переменную:

// if you're using SSL
$mail->SMTPSecure = 'ssl';
// OR use TLS
$mail->SMTPSecure = 'tls';
10
ответ дан Viper_Sb 26 August 2018 в 04:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: