2012-06-11 2 views
2

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

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

<?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 = "[email protected]"; // SMTP username 
$mail->Password = "workingpassword"; // SMTP password 

$mail->From = "[email protected]"; 
$mail->FromName = "Mailer"; 
$mail->AddAddress("[email protected]", "Josh Adams"); 
$mail->AddAddress("[email protected]");     // name is optional 
$mail->AddReplyTo("[email protected]", "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: [email protected] 
+2

Трудно сказать, почему он не работает. Вы пробовали '$ mail-> SMTPDebug = 1;' –

+0

Да, у меня есть. Это сообщение об ошибке: SMTP -> ERROR: Не удалось подключиться к серверу: не удалось найти перенос сокетов «ssl» - вы забыли включить его при настройке PHP? (12640394) – AnchovyLegend

ответ

7

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

PHPMailer: SMTP Error: Could not connect to SMTP host

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

$mail->SMTPDebug = 1; 
+0

Спасибо за ответ, dubugging определенно помог некоторым. Это ошибка, на которую на экран добавлен код отладки smtp: SMTP -> ERROR: Не удалось подключиться к серверу: не удалось найти перенос сокетов «ssl» - вы забыли включить его при настройке PHP? (12640394) – AnchovyLegend

+5

С другой стороны, похоже, что вам нужно включить extension = php_openssl.dll. – technoTarek

2

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

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

+0

Кроме того, посмотрите на аналогичные вопросы и ответы по адресу http://stackoverflow.com/questions/7525855/problem-with-using-phpmailer-for-smtp – GDP

+0

спасибо за ответ, я попробовал это, он не разрешил проблема. – AnchovyLegend

1

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

$mail->From = '[email protected]**' 

к имени пользователя я был фактически подключен. Таким образом, я изменил на:

$mail->From = '[email protected]**' 

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

$mail->Username = "boy333"; 
$mail->From = '[email protected]**'; 
1
<?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 = "[email protected]"; // GMAIL username 
     $mail->Password = "********";   // GMAIL password 
     $mail->AddAddress('[email protected]', 'abc'); 
     $mail->SetFrom('[email protected]', '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 настройки и включить 'менее безопасные' приложения. Это сработало для меня.

0
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; 
0

Если по электронной почте в gsuite проверочных два этапа: Настройки https://support.google.com/a/answer/6260879?hl=en https://accounts.google.com/DisplayUnlockCaptcha

Php почты; PHPMailer версия 5.2.22 Проверьте класс.phpmailer.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; 

почта отправить 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>"; 
     } 

?> 

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

Смежные вопросы