Я пытаюсь позволить пользователям заполнить контактную форму, которая затем будет отправлена на мой адрес электронной почты. Но он почему-то не работает. Я просто получаю пустую страницу без сообщения об ошибке, иначе текст и адрес электронной почты также не отправляются.
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 = "info@example.com"; // SMTP account username example $mail->Password = "password"; // SMTP account password example $mail->From = $email; $mail->FromName = $name; $mail->AddAddress('info@example.com', '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';
Теперь он работает, я не включил файл '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 = "info@example.com"; // SMTP account username example $mail->Password = "password"; // SMTP account password example $mail->From = $email; $mail->FromName = $name; $mail->AddAddress('info@example.com', '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';
У меня была такая же проблема без сообщения об ошибке даже при включенном SMTPDebug. После поиска рабочих примеров я заметил, что я не включил значение SMTP Secure . Попробуйте добавить эту строку:
$mail->SMTPSecure = 'ssl'; //secure transfer enabled
Теперь работайте как очарование.
Вам нужно позвонить:
$mail = new PHPMailer(true); // with true in the parenthesis
Из документации:
true
параметр означает, что он будет генерировать исключения из ошибок, которые нам нужно поймать.
У меня была аналогичная проблема. В отношении ответа @ Syclone. Я использовал по умолчанию «tls».
$mail->SMTPSecure = 'tls';
После того, как я изменил его на $mail->SMTPSecure = 'ssl';
Это сработало ! Мой почтовый сервер принимал только соединения через SSL.
Использование исключения 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 = "info@example.com"; // SMTP account username example $mail->Password = "password"; // SMTP account password example $mail->From = $email; $mail->FromName = $name; $mail->AddAddress('info@example.com', '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(); }
Что работало для меня, было установить From от имени пользователя и FromName как $ _POST ['email']
Надеюсь это поможет
Я пытался загрузить отправляемый HTML-файл, который не принадлежал группе www-data на моем сервере Ubuntu.
chown -R www-data * chgrp -R www-data *
Задача решена!
Я обсуждал, следует ли писать мой собственный обработчик или PHP-браузер в моем существующем классе. В случае, если это было очень легко из-за универсальности функции spl_autoload_register, которая используется в системе PHPMailer, а также для моей существующей структуры классов.
Я просто создал базовый класс Email в моей существующей структуре классов следующим образом
<?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
Работает с удовольствием и спас меня от повторного изобретения колеса.
У меня была аналогичная проблема, но когда я использовал сервер localhost, он отлично работал
$mail->isSMTP(); $mail->SMTPDebug = 0; $mail->Host = "localhost"; $mail->Port = "25"; $mail->SMTPSecure = "none"; $mail->SMTPAuth = false; $mail->Username = "#####"; $mail->Password = "####";