PHPMailer не работает: сообщение не может быть отправлено

Я пытаюсь создать контактную форму на своем веб-сайте с помощью PHPMailer. У меня возникли проблемы с настройкой. Я пытаюсь использовать G-mail в качестве моего хоста smtp. Мне было интересно, может ли кто-нибудь помочь устранить эту проблему?

Это мой почтовый код:

<?php require("class.phpmailer.php"); require("class.smtp.php"); $mail = new PHPMailer(); $mail->IsSMTP(); $mail->SMTPAuth = true; // turn on SMTP authentication $mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for GMail $mail->Host = 'smtp.gmail.com'; $mail->Port = 467; $mail->Username = "validmail@gmail.com"; // SMTP username $mail->Password = "workingpassword"; // SMTP password $mail->From = "validmail@gmail.com"; $mail->FromName = "Mailer"; $mail->AddAddress("josh@example.net", "Josh Adams"); $mail->AddAddress("ellen@example.com"); // name is optional $mail->AddReplyTo("info@example.com", "Information"); $mail->WordWrap = 50; // set word wrap to 50 characters // $mail->AddAttachment("/var/tmp/file.tar.gz"); // add attachments // $mail->AddAttachment("/tmp/image.jpg", "new.jpg"); // optional name $mail->IsHTML(true); // set email format to HTML $mail->Subject = "Here is the subject"; $mail->Body = "This is the HTML message body <b>in bold!</b>"; $mail->AltBody = "This is the body in plain text for non-HTML mail clients"; if(!$mail->Send()) { echo "Message could not be sent. <p>"; echo "Mailer Error: " . $mail->ErrorInfo; exit; } echo "Message has been sent"; ?> 

Сообщение об ошибке:

 Message could not be sent. Mailer Error: The following From address failed: validmail@gmail.com 

Вы посмотрели и попробовали информацию из этого Q?

PHPMailer: ошибка SMTP: не удалось подключиться к SMTP-хосту

В частности, предоставляет ли это дополнительную информацию?

 $mail->SMTPDebug = 1; 

smtp.gmail.com требует, чтобы вы использовали SSL и порт 587 или 465.

См. Их страницу конфигурации: http://support.google.com/mail/bin/answer.py?hl=ru&answer=13287.

Вы используете PHP в Windows? Тогда это может помочь:

http://www.devcha.com/2010/01/php-fsockopen-unable-to-connect-ssl.html

Получил ту же ошибку, и проблема заключалась в том, что я пытался отправить электронную почту из учетной записи «boy333 @ in **», притворяясь «girl333 @ in **». Я просто изменил

 $mail->From = 'girl333@in**' 

к имени пользователя я действительно подключался. Поэтому я перешел на:

 $mail->From = 'boy333@in**' 

Идея состоит в том, что эти два поля имеют одинаковые имена пользователей.

 $mail->Username = "boy333"; $mail->From = 'boy333@in**'; 
 <?php require_once('class.phpmailer.php'); include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded $nameField = $_POST['name']; $emailField = $_POST['email']; $messageField = $_POST['message']; $phoneField = $_POST['contactno']; $cityField = $_POST['city']; $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 $body .= $nameField; try { //$mail->Host = "mail.gmail.com"; // SMTP server $mail->SMTPDebug = 2; // enables SMTP debug information (for testing) $mail->SMTPAuth = true; // enable SMTP authentication $mail->SMTPSecure = "ssl"; // sets the prefix to the servier $mail->Host = "smtp.gmail.com"; // sets GMAIL as the SMTP server $mail->Port = 465; // set the SMTP port for the GMAIL server $mail->SMTPKeepAlive = true; $mail->Mailer = "smtp"; $mail->Username = "xxxxx@gmail.com"; // GMAIL username $mail->Password = "********"; // GMAIL password $mail->AddAddress('sendto@gmail.com', 'abc'); $mail->SetFrom('xxxxxx@gmail.com', 'def'); $mail->Subject = 'PHPMailer Test Subject via mail(), advanced'; $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; // optional - MsgHTML will create an alternate automatically $mail->MsgHTML($body); $mail->Send(); echo "Message Sent OK</p>\n"; header("location: ../test.html"); } catch (phpmailerException $e) { echo $e->errorMessage(); //Pretty error messages from PHPMailer } catch (Exception $e) { echo $e->getMessage(); //Boring error messages from anything else! } ?> в <?php require_once('class.phpmailer.php'); include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded $nameField = $_POST['name']; $emailField = $_POST['email']; $messageField = $_POST['message']; $phoneField = $_POST['contactno']; $cityField = $_POST['city']; $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 $body .= $nameField; try { //$mail->Host = "mail.gmail.com"; // SMTP server $mail->SMTPDebug = 2; // enables SMTP debug information (for testing) $mail->SMTPAuth = true; // enable SMTP authentication $mail->SMTPSecure = "ssl"; // sets the prefix to the servier $mail->Host = "smtp.gmail.com"; // sets GMAIL as the SMTP server $mail->Port = 465; // set the SMTP port for the GMAIL server $mail->SMTPKeepAlive = true; $mail->Mailer = "smtp"; $mail->Username = "xxxxx@gmail.com"; // GMAIL username $mail->Password = "********"; // GMAIL password $mail->AddAddress('sendto@gmail.com', 'abc'); $mail->SetFrom('xxxxxx@gmail.com', 'def'); $mail->Subject = 'PHPMailer Test Subject via mail(), advanced'; $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; // optional - MsgHTML will create an alternate automatically $mail->MsgHTML($body); $mail->Send(); echo "Message Sent OK</p>\n"; header("location: ../test.html"); } catch (phpmailerException $e) { echo $e->errorMessage(); //Pretty error messages from PHPMailer } catch (Exception $e) { echo $e->getMessage(); //Boring error messages from anything else! } ?> 

Перейдите в настройки google и включите «менее безопасные» приложения. Это сработало для меня.

 ping smtp.gmail.com 

По какой-то причине google перенаправляет SMTP-запросы на gmail-smtp-msa.l.google.com.

 PING gmail-smtp-msa.l.google.com (74.125.133.108): 56 data bytes 64 bytes from 74.125.133.108: icmp_seq=0 ttl=43 time=72.636 ms 64 bytes from 74.125.133.108: icmp_seq=1 ttl=43 time=68.841 ms 64 bytes from 74.125.133.108: icmp_seq=2 ttl=43 time=68.500 ms 

Таким образом, вы должны поместить конечный пункт назначения в свою конфигурацию, поскольку PHPMailer не выполняет перенаправления. Также вы можете попытаться отправить электронные письма без SMTPSecure, оставив это поле пустым.

 $mail->Host = 'gmail-smtp-msa.l.google.com'; $mail->SMTPAuth = true; $mail->Username = 'email'; $mail->Password = 'password'; $mail->SMTPSecure = ''; $mail->Port = 25; 

Если ваша электронная почта в gsuite проверяет два шага: https://support.google.com/a/answer/6260879?hl=ru https://accounts.google.com/DisplayUnlockCaptcha

Настройки Php Mail; PHPMailer версии 5.2.22. Проверьте класс.phpailer.php,

  var $Host = 'smtp.gmail.com'; var $Port = 465; var $Helo ='domain.net'; public $SMTPSecure = 'ssl'; public $SMTPAutoTLS = true; public $SMTPAuth = true; public $SMTPOptions = array(); public $Username = 'gmail-username';//or domain credentials on google mail public $Password = 'gmail-password'; public $Timeout = 10; public $SMTPDebug = true; 

mail отправить php

 <?php require('PHPMailer/class.phpmailer.php'); require('PHPMailer/class.smtp.php'); $headers = "Content-Type: text/html; charset=UTF-8"; $headers = 'From: '.$email_from."\r\n". 'Reply-To: '.$email_from."\r\n" . 'X-Mailer: PHP/' . phpversion(); $mail = new PHPMailer(); $mail->IsSMTP(); $mail->CharSet="SET NAMES UTF8"; $mail->SMTPDebug = 0; $mail->CharSet="utf8"; $mail->Debugoutput = 'html'; $mail->host = "smtp.gmail.com"; $mail->port = 465; $mail->smtpauth = true; $mail->smtpsecure = 'ssl'; $mail->username = "gmail-username"; //or domain credentials on google mail $mail->password = "gmail-password"; $mail->SetFrom('from-email', 'from-name'); $mail->AddAddress('to-address', 'to-address'); $mail->Body = 'your-text'; //emailbody if(!$mail->Send()) { mysql_close(); echo "<script>alert('Error: " . $mail->ErrorInfo."');</script>"; } else { mysql_close(); echo "<script>alert('success');</script>"; } ?> 

Это работа для меня. Надеюсь, поможет.