2013-06-28 5 views
9

Я пытаюсь, чтобы пользователи заполнили контактную форму, которая будет отправлена ​​на мой адрес электронной почты. Но он почему-то не работает. Я просто получаю пустую страницу без сообщения об ошибке, иначе текст и адрес электронной почты также не отправляются.PHPMAILER Не отправляет и не выдаёт ошибку

if (isset($_POST['submit'])) 
{ 
    include_once('class.phpmailer.php'); 

    $name = strip_tags($_POST['full_name']); 
    $email = strip_tags ($_POST['email']); 
    $msg = strip_tags ($_POST['description']); 

    $subject = "Contact Form from DigitDevs Website"; 

    $mail = new PHPMailer(); 
    $mail->IsSMTP(); 
    $mail->CharSet = 'UTF-8'; 

    $mail->Host  = "mail.example.com"; // SMTP server example 
    //$mail->SMTPDebug = 1;      // enables SMTP debug information (for testing) 
    $mail->SMTPAuth = true;     // enable SMTP authentication 
    $mail->Port  = 26;     // set the SMTP port for the GMAIL server 
    $mail->Username = "[email protected]"; // SMTP account username example 
    $mail->Password = "password";  // SMTP account password example 

    $mail->From = $email; 
    $mail->FromName = $name; 

    $mail->AddAddress('[email protected]', 'Information'); 
    $mail->AddReplyTo($email, 'Wale'); 

    $mail->IsHTML(true); 

    $mail->Subject = $subject; 

    $mail->Body = $msg; 
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; 

    if(!$mail->Send()) { 
    echo 'Message could not be sent.'; 
    echo 'Mailer Error: ' . $mail->ErrorInfo; 
    exit; 
} 
echo 'Message has been sent'; 
+2

Проверьте журналы сервера и выяснить, что случилось. –

+0

, который вы используете? В случае 'Ubuntu', если отправка почты не удалась, тогда в корневом каталоге вашего веб-сайта будет создан файл с именем' dead.letter', как только убедитесь в этом. –

+0

Попробуйте вставить '}' after 'exit;' – bbldzr

ответ

2

исключение для использования PHPMailer.

Попробуйте это

try { 

    include_once('class.phpmailer.php'); 

    $name = strip_tags($_POST['full_name']); 
    $email = strip_tags ($_POST['email']); 
    $msg = strip_tags ($_POST['description']); 

    $subject = "Contact Form from DigitDevs Website"; 

    $mail = new PHPMailer(); 
    $mail->IsSMTP(); 
    $mail->CharSet = 'UTF-8'; 

    $mail->Host  = "mail.example.com"; // SMTP server example 
    //$mail->SMTPDebug = 1;      // enables SMTP debug information (for testing) 
    $mail->SMTPAuth = true;     // enable SMTP authentication 
    $mail->Port  = 26;     // set the SMTP port for the GMAIL server 
    $mail->Username = "[email protected]"; // SMTP account username example 
    $mail->Password = "password";  // SMTP account password example 

    $mail->From = $email; 
    $mail->FromName = $name; 

    $mail->AddAddress('[email protected]', 'Information'); 
    $mail->AddReplyTo($email, 'Wale'); 

    $mail->IsHTML(true); 

    $mail->Subject = $subject; 

    $mail->Body = $msg; 
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; 

    $mail->Send(); 

    exit; 

} catch (phpmailerException $e) { 
    echo $e->errorMessage(); //error messages from PHPMailer 
} catch (Exception $e) { 
    echo $e->getMessage(); 
} 
+0

Dreamweaver выделяет код из «catch» как красный, что означает синтаксис неправильный ... – Wale

+0

удалить «exit;» код. –

+1

Я проверил код с php balise «». У него нет ошибки синтаксического анализа. –

12

Сво работает в настоящее время, я не включать файл 'class.smtp.php'. Рабочий код ниже:

if (isset($_POST['submit'])) 
{ 
include_once('class.phpmailer.php'); 

require_once('class.smtp.php'); 

$name = strip_tags($_POST['full_name']); 
$email = strip_tags ($_POST['email']); 
$msg = strip_tags ($_POST['description']); 

$subject = "Contact Form from DigitDevs Website"; 

$mail = new PHPMailer(); 
$mail->IsSMTP(); 
$mail->CharSet = 'UTF-8'; 

$mail->Host  = "mail.example.com"; // SMTP server example 
//$mail->SMTPDebug = 1;      // enables SMTP debug information (for testing) 
$mail->SMTPAuth = true;     // enable SMTP authentication 
$mail->Port  = 26;     // set the SMTP port for the GMAIL server 
$mail->Username = "[email protected]"; // SMTP account username example 
$mail->Password = "password";  // SMTP account password example 

$mail->From = $email; 
$mail->FromName = $name; 

$mail->AddAddress('[email protected]', 'Information'); 
$mail->AddReplyTo($email, 'Wale'); 

$mail->IsHTML(true); 

$mail->Subject = $subject; 

$mail->Body = $msg; 
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; 

if(!$mail->Send()) { 
echo 'Message could not be sent.'; 
echo 'Mailer Error: ' . $mail->ErrorInfo; 
exit; 
} 
echo 'Message has been sent'; 
+1

Это ПРАВИЛЬНО. У меня была такая же проблема, после добавления class.smtp.php она работает нормально. –

5

У меня была такая же проблема с сообщением об ошибке даже при включенном SMTPDebug. После поиска рабочих примеров я заметил, что я не включил значение SMTP Secure. Попробуйте добавить эту строку:

$mail->SMTPSecure = 'ssl'; //secure transfer enabled 

Работайте как очарование.

1

Я пытался загрузить файл HTML для отправки, который не принадлежал к группе www-data на моем сервере Ubuntu.

chown -R www-data * 
chgrp -R www-data * 

Проблема решена!

2

То, что сработало для меня был установка С, как именем пользователя и FromName в $ _POST [ 'адреса электронной почты']

Надеется, что это помогает

+0

сменять их вокруг неподвижной шахты тоже. спасибо :) – Sarah

9

Вам нужно позвонить:

$mail = new PHPMailer(true); // with true in the parenthesis 

Из документации:

The true param means it will throw exceptions on errors, which we need to catch.

+1

Ты, сэр, настоящий герой! Я некоторое время борется с ошибкой, но до сих пор не смог найти ее! –

0

Я обсуждал, следует ли писать мой собственный обработчик или перекладину PHPMailer в мой exis ting. В случае, если это было очень легко из-за универсальности функции spl_autoload_register, которая используется в системе PHPMailer, а также для моей существующей структуры классов.

Я просто создал базовый класс электронной почты в моей существующей структуре класса следующим

<?php 

    /** 
    * Provides link to PHPMailer 
    * 
    * @author Mike Bruce 
    */ 
    class Email { 
     public $_mailer; // Define additional class variables as required by your application 
     public function __construct() 
     { 
     require_once "PHPMail/PHPMailerAutoload.php" ; 
     $this->_mailer = new PHPMailer() ; 
     $this->_mailer->isHTML(true); 
     return $this; 
     } 
    } 
?> 

Из класса вызывающего объекта код будет:

$email = new Email; 
$email->_mailer->functionCalls(); 

// continue with more function calls as required 

Работает лакомство и спас меня снова -включение колеса.

3

У меня была аналогичная проблема. В отношении ответа @ Syclone. Я использовал по умолчанию «tls».

$mail->SMTPSecure = 'tls';

После того как я изменил его на $mail->SMTPSecure = 'ssl'; Это сработало! Мой почтовый сервер принимал только соединения через SSL.

-2

У меня была аналогичная проблема, но когда я использовал сервер LOCALHOST он работал отлично

$mail->isSMTP(); 
$mail->SMTPDebug = 0; 
$mail->Host = "localhost"; 
$mail->Port = "25"; 
$mail->SMTPSecure = "none"; 
$mail->SMTPAuth = false; 
$mail->Username = "#####"; 
$mail->Password = "####"; 

KeepOnCoding