проблема при отправке почты с localhost с помощью phpmailer


у меня установлен PHP v5.6.25 (я использую версию 64x) и wampserver v3.0.6, Apache 2.4.23. я внес некоторые изменения портов, так как я следовал нескольким учебникам на youtube, но я не помню, какие строки я изменил.

файл php. ini www.dropbox.com/s/vnoxv38qqa67oez/php.ini?dl=0

я пытаюсь создать систему отправки почты с помощью phpmailer, используя в качестве хоста "smtp.gmail.com" я включил доступ к менее безопасные приложения из моей учетной записи gmail (myaccount.google.com/lesssecureapps).

Мой PHP-файл выглядит следующим образом:

<?php
// This example shows settings to use when sending via Google's Gmail servers.
//

//SMTP needs accurate times, and the PHP time zone MUST be set
//This should be done in your php.ini, but this is how to do it if you don't have access to that
date_default_timezone_set('Etc/UTC');

require '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';
// use
// $mail->Host = gethostbyname('smtp.gmail.com');
// if your network does not support SMTP over IPv6

//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission
$mail->Port = 587;

//Set the encryption system to use - ssl (deprecated) or tls
$mail->SMTPSecure = 'tls';

//Whether to use SMTP authentication
$mail->SMTPAuth = true;

//Username to use for SMTP authentication - use full email address for gmail
$mail->Username = "*******@gmail.com";

//Password to use for SMTP authentication
$mail->Password = "+++++++++";

//Set who the message is to be sent from
$mail->setFrom('[email protected]', 'No responder');

//Set an alternative reply-to address
//$mail->addReplyTo('[email protected]', 'First Last');

//Set who the message is to be sent to
$mail->addAddress('*********@gmail.com', 'Nombre Destinatario');

//Set the subject line
$mail->Subject = 'PHPMailer GMail SMTP test';

$nombre='Federico Lorca';
//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
$mail->Body = "<h1>Prueba de correo</h1><br><br>Mensaje de prueba enviado por {$nombre} con phpmailer en formato html<br>";

//Replace the plain text body with one created manually
$mail->AltBody = 'This is a plain-text message body';

//Attach an image file
//$mail->addAttachment('images/phpmailer_mini.png');

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

показывает следующую ошибку:

Author: Mariano, 2017-04-05

3 answers

Начиная с PHP 5.2.10, когда мы пытаемся использовать PHPMailer без действительного сертификата , мы имеем право на ошибку, похожую на эту:

Warning: stream_socket_enable_crypto (): SSL operation failed with code 1. OpenSSL ошибка messages: ошибка: 14090086: SSL routines: SSL3_GET_SERVER_CERTIFICATE: certificate verify failed

И, конечно же, наш код не будет работать.

Как решить эту проблему?

Лучший решение будет иметь действительный сертификат.

Но когда это невозможно, в наш код можно добавить следующее:

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

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

Неправильные решения

Не трогайте файл php.ini, чтобы PHPMailer перестал выдавать эту ошибку. поскольку PHP имеет свои причины для стали более требовательными в отношении SMTP-сертификатов. Но это другая история ...

Вы можете также изменить эти настройки глобально в вашем php. ini, но это действительно плохая идея; PHP 5.6 сделал это изменение для очень хорошего reasons.

 0
Author: A. Cedano, 2017-04-05 14:41:46

Добавьте к параметрам следующую команду, возможно, с этим будет исправлено.

$mail->Helo('www.gmail.com');
 0
Author: Frank Leal, 2017-04-05 14:19:51

Где я должен вставить этот код? $mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) );

 0
Author: Yina, 2018-06-18 15:36:24