Проблемы с PHPMailer

Я пытаюсь использовать PHPMailer для отправки электронной почты Gmail. Я следил за этим сообщением

Чтобы сделать это, я создал функцию, показанную ниже:

function sendEmail($email, $name) { $mail = new PHPMailer(); $mail->IsSMTP(); // send via SMTP //IsSMTP(); // send via SMTP I commented it cos it gives an error $mail->SMTPAuth = true; // turn on SMTP authentication $mail->Username = 'email@gmail.com'; // Changed my email $mail->Password = "password";// Changed my password $mail->From = 'email@gmail.com'; $mail->FromName = 'FROM NAME'; $mail->AddAddress($email); $mail->IsHTML(true); // send as HTML $mail->Subject = "Subject"; $mail->Body = "Body"; if (!$mail->Send()) { return false; } else { return true; } } 

К сожалению, он продолжает возвращать false. Не могли бы вы рассказать мне, что случилось с кодом?

Изменить: Ошибка, которую я получаю, показана ниже:

 SMTP -> ERROR: Failed to connect to server: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond SMTP Error: Could not connect to SMTP host. 

ОБНОВЛЕННЫЙ КОД:

  $Mail = new PHPMailer(); $Mail->IsSMTP(); // Use SMTP $Mail->Host = "smtp.gmail.com"; // Sets SMTP server $Mail->SMTPDebug = 2; // 2 to enable SMTP debug information $Mail->SMTPAuth = TRUE; // enable SMTP authentication $Mail->SMTPSecure = "tls"; //Secure conection $Mail->Port = 587; // set the SMTP port $Mail->Username = EMAIL; // SMTP account username $Mail->Password = PASS; // SMTP account password $Mail->Priority = 1; // Highest priority - Email priority (1 = High, 3 = Normal, 5 = low) $Mail->CharSet = 'UTF-8'; $Mail->Encoding = '8bit'; $Mail->Subject = 'SUB'; $Mail->ContentType = 'text/html; charset=utf-8\r\n'; $Mail->From = EMAIL; $Mail->FromName = 'FROM NAME'; $Mail->WordWrap = 900; // RFC 2822 Compliant for Max 998 characters per line $Mail->AddAddress($email); // To: $Mail->isHTML(TRUE); $Mail->Body = "Hi"; $Mail->AltBody = "Hi"; $Mail->Send(); $Mail->SmtpClose(); 

Вот рабочий пример:

 <?php function SendMail( $ToEmail, $MessageHTML, $MessageTEXT ) { require_once ( 'class.phpmailer.php' ); // Add the path as appropriate $Mail = new PHPMailer(); $Mail->IsSMTP(); // Use SMTP $Mail->Host = "smtp.gmail.com"; // Sets SMTP server $Mail->SMTPDebug = 2; // 2 to enable SMTP debug information $Mail->SMTPAuth = TRUE; // enable SMTP authentication $Mail->SMTPSecure = "tls"; //Secure conection $Mail->Port = 587; // set the SMTP port $Mail->Username = 'MyGmail@gmail.com'; // SMTP account username $Mail->Password = 'MyGmailPassword'; // SMTP account password $Mail->Priority = 1; // Highest priority - Email priority (1 = High, 3 = Normal, 5 = low) $Mail->CharSet = 'UTF-8'; $Mail->Encoding = '8bit'; $Mail->Subject = 'Test Email Using Gmail'; $Mail->ContentType = 'text/html; charset=utf-8\r\n'; $Mail->From = 'MyGmail@gmail.com'; $Mail->FromName = 'GMail Test'; $Mail->WordWrap = 900; // RFC 2822 Compliant for Max 998 characters per line $Mail->AddAddress( $ToEmail ); // To: $Mail->isHTML( TRUE ); $Mail->Body = $MessageHTML; $Mail->AltBody = $MessageTEXT; $Mail->Send(); $Mail->SmtpClose(); if ( $Mail->IsError() ) { // ADDED - This error checking was missing return FALSE; } else { return TRUE; } } $ToEmail = 'Name@example.com'; $ToName = 'Name'; $Send = SendMail( $ToEmail, $MessageHTML, $MessageTEXT ); if ( $Send ) { echo "<h2> Sent OK</h2>"; } else { echo "<h2> ERROR</h2>"; } die; ?> 

Я пробовал этот скрипт и не испытывал проблем с отправкой нескольких сообщений.

ОБНОВЛЕНО:

Это типичный ответ Gmail на успех:

 SMTP -> FROM SERVER:220 mx.google.com ESMTP 20sm6345523qek.6 SMTP -> FROM SERVER: 250-mx.google.com at your service, [181.155.13.39] 250-SIZE 35882577 250-8BITMIME 250-STARTTLS 250 ENHANCEDSTATUSCODES SMTP -> FROM SERVER:220 2.0.0 Ready to start TLS SMTP -> FROM SERVER: 250-mx.google.com at your service, [181.155.13.39] 250-SIZE 35882577 250-8BITMIME 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 250 ENHANCEDSTATUSCODES SMTP -> FROM SERVER:250 2.1.0 OK 20sm6345523qek.6 SMTP -> FROM SERVER:250 2.1.5 OK 20sm6345523qek.6 SMTP -> FROM SERVER:354 Go ahead 20sm6345523qek.6 SMTP -> FROM SERVER:250 2.0.0 OK 1353474062 20sm6345523qek.6 SMTP -> FROM SERVER:221 2.0.0 closing connection 20sm6345523qek.6 

Ваш код не работает, потому что вы не установили параметр SMTPSecure в ssl который требуется для учетной записи gmail

 include_once "/lib/phpmailer/PHPMailer.class.php"; include_once "/lib/phpmailer/SMTP.class.php"; include_once "/lib/phpmailer/POP3.class.php"; $mail = new PHPMailer(true); $mail->IsSMTP(); try { $mail->Host = "smtp.gmail.com"; $mail->SMTPDebug = 2; $mail->SMTPSecure = 'ssl'; //<----------------- You missed this $mail->SMTPAuth = true; $mail->Host = "smtp.gmail.com"; $mail->Port = 465; // $mail->Username = "xxxxxx@gmail.com"; $mail->Password = "xxxxxx"; $mail->AddAddress('to@example.com', 'John Doe'); $mail->SetFrom('xxxxxx@gmail.com', 'First Last'); $mail->Subject = 'This is a TEST message'; $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; $body = "To view the message, please use an HTML compatible email viewer!"; // automatically $mail->MsgHTML($body); $mail->Send(); echo "Message Sent OK</p>\n"; } catch ( phpmailerException $e ) { echo $e->errorMessage(); } catch ( Exception $e ) { echo $e->getMessage(); } 

Вывод

 SMTP -> FROM SERVER:220 mx.google.com ESMTP q22sm2927759bkv.16 SMTP -> FROM SERVER: 250-mx.google.com at your service, [62.173.54.190] 250-SIZE 35882577 250-8BITMIME 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 250 ENHANCEDSTATUSCODES SMTP -> FROM SERVER:250 2.1.0 OK q22sm2927759bkv.16 SMTP -> FROM SERVER:250 2.1.5 OK q22sm2927759bkv.16 SMTP -> FROM SERVER:354 Go ahead q22sm2927759bkv.16 SMTP -> FROM SERVER:250 2.0.0 OK 1353341553 q22sm2927759bkv.16 Message Sent OK 

В таких проблемах важно проверить, как он работает в среде разработки перед развертыванием в производство, поскольку существует множество проблем с сервером, которые могут быть связаны с проблемой.

Из-за этого перед тем, как установить отладку в true и проверьте полученные сообщения.

 $mail->SMTPDebug = 1; 

Тем не менее, общие проблемы сервера в таких ситуациях следующие.

  1. Отсутствие поддержки SSL в PHP. Вы должны включить его.

  2. Какой-то брандмауэр может блокировать вас от подключения к исходящим сокетам. Вы можете проверить это с помощью PHP.

 $p = fsockopen( '127.0.0.1', <port number>, $errno, $errstr, 5 ); if ( !$p ) // port is closed or blocked else // port is open and available fclose( $p );` 

Пытаться…

 <?php require_once('class.phpmailer.php'); //include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded $mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch $mail->IsSMTP(); // telling the class to use SMTP try { $mail->Host = "smtp.gmail.com"; // SMTP server $mail->SMTPDebug = 2; // enables SMTP debug information (for testing) $mail->SMTPAuth = true; // enable SMTP authentication $mail->Host = "smtp.gmail.com"; // sets the SMTP server $mail->Port = 465; // set the SMTP port for the GMAIL server $mail->Username = "yourname@yourdomain"; // SMTP account username $mail->Password = "yourpassword"; // SMTP account password $mail->AddReplyTo('name@yourdomain.com', 'First Last'); $mail->AddAddress('whoto@otherdomain.com', 'John Doe'); $mail->SetFrom('name@yourdomain.com', 'First Last'); $mail->AddReplyTo('name@yourdomain.com', 'First Last'); $mail->Subject = 'This is a TEST Message'; $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; // optional - MsgHTML will create an alternate automatically $mail->MsgHTML($obdy); $mail->AddAttachment('images/phpmailer.gif'); // attachment $mail->AddAttachment('images/phpmailer_mini.gif'); // attachment $mail->Send(); echo "Message Sent OK</p>\n"; } catch (phpmailerException $e) { echo $e->errorMessage(); //Pretty error messages from PHPMailer } catch (Exception $e) { echo $e->getMessage(); //Boring error messages from anything else! } ?> 

Просто замените конфигурацию, установите require_once ('class.phpmailer.php'); чтобы указать на нужное место и заменить «content.html» ваш HTML-шаблон.

или

Используйте этот код, если вы не хотите использовать HTML-шаблон …

 <?php $body ='Your HTML message should go here'; require_once('class.phpmailer.php'); //include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded $mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch $mail->IsSMTP(); // telling the class to use SMTP try { $mail->Host = "smtp.gmail.com"; // SMTP server $mail->SMTPDebug = 2; // enables SMTP debug information (for testing) $mail->SMTPAuth = true; // enable SMTP authentication $mail->Host = "smtp.gmail.com"; // sets the SMTP server $mail->Port = 465; // set the SMTP port for the GMAIL server $mail->Username = "yourname@yourdomain"; // SMTP account username $mail->Password = "yourpassword"; // SMTP account password $mail->AddReplyTo('name@yourdomain.com', 'First Last'); $mail->AddAddress('whoto@otherdomain.com', 'John Doe'); $mail->SetFrom('name@yourdomain.com', 'First Last'); $mail->AddReplyTo('name@yourdomain.com', 'First Last'); $mail->Subject = 'This is a TEST message'; $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; // optional - MsgHTML will create an alternate automatically $mail->MsgHTML($body); $mail->AddAttachment('images/phpmailer.gif'); // attachment $mail->AddAttachment('images/phpmailer_mini.gif'); // attachment $mail->Send(); echo "Message Sent OK</p>\n"; } catch (phpmailerException $e) { echo $e->errorMessage(); //Pretty error messages from PHPMailer } catch (Exception $e) { echo $e->getMessage(); //Boring error messages from anything else! } ?> 
 $mail = new PHPMailer(); // Set up SMTP $mail->IsSMTP(); // Sets up a SMTP connection $mail->SMTPDebug = 0; // This will print debugging info $mail->SMTPAuth = true; // Connection with the SMTP does require authorization $mail->SMTPSecure = "tls"; // Connect using a TLS connection $mail->Host = "smtp.gmail.com"; $mail->Port = 587; $mail->Encoding = '7bit'; // SMS uses 7-bit encoding $mail->IsHTML(true); // Set email format to HTML // Authentication $mail->Username = "xxx@xxx.xxx.xx"; // Login $mail->Password = "xxxxxx"; // Password //$to= $to = "zzz@zzz.zzz.zz"; $mail->Subject = "Outstanding Balance Notification "; // Subject (which isn't required) $mail->Body = "Dear Sir / Madam"; $mail->FromName = "stackoverflow"; $mail->From = "noreply@xxx.xxx.xx"; $mail->AddAddress($row["Email1"]); 

попробуй это.. 🙂

Я отправил почту с сервера xampp из localhost

Этот код отлично работает для меня

1: загружать phpmailer с https://github.com/PHPMailer/PHPMailer

2: перейти к xampp и найти php.ini

3 В поиске php.ini

 ;extension=php_openssl.dll remove(;) extension=php_openssl.dll 

затем сохраните и перезагрузите компьютер.

 <%php <br/> require_once("C:\\xampp\\phpMailer\\PHPMailer-master\\class.phpmailer.php"); <br/> $mail = new PHPMailer(); <br/> $mail->IsSMTP(); // telling the class to use SMTP <br/> $mail->SMTPAuth = true; // Enable SMTP authentication <br/> $mail->SMTPSecure = 'ssl' ; <br/> $mail->Host = "smtp.gmail.com" ;// SMTP server <br/> $mail->Port = 465; // or 587 <br/> $mail->Username = 'senderemailid@gmail.com'; // SMTP username <br/> $mail->Password = 'senderpassword'; // SMTP password <br/> $mail -> IsHTML(true); <br/> $mail->From = 'senderemailid@gmail.com'; <br/> $mail->FromName = 'sendername'; <br/> $mail->addAddress('receiveremailid@domain.com','receivername'); <br/> $mail->WordWrap = 50; <br/> $mail->Subject = "This mail send from PhP code xampp"; <br/> $mail->Body = "Hi! \n\n This is my first e-mail sent through PHPMailer."; <br/> if(!$mail->Send()) { <br/> echo 'Message was not sent.'; <br/> echo 'Mailer error: ' . $mail->ErrorInfo; <br/> } else <br/> { <br/> echo 'Message has been sent.'; <br/> } <br/> ?> <br/>