[英]PHPMAILER Not sending and not giving error
我试图让用户填写联系表格,然后将其发送到我的电子邮件。 但由于某种原因它不起作用。 我只是得到一个没有错误消息或任何文本的空白页面,也没有发送电子邮件。
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';
您需要致电:
$mail = new PHPMailer(true); // with true in the parenthesis
从文档:
true
参数意味着它会在错误时抛出异常,我们需要捕获这些异常。
它现在可以工作了,我没有包含“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
现在像魅力一样工作。
我有一个类似的问题。 参考@ Syclone 的回答。 我使用的是默认的“tls”。
$mail->SMTPSecure = 'tls';
在我将其更改为$mail->SMTPSecure = 'ssl';
它奏效了! 我的邮件服务器只接受 SSL 连接。
对我有用的是将 From 设置为 Username 和 FromName 设置为 $_POST['email']
希望这可以帮助
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();
}
我试图加载要发送的 HTML 文件,该文件不属于我的 Ubuntu 服务器上的 www-data 组。
chown -R www-data *
chgrp -R www-data *
问题解决了!
我正在争论是否将我自己的处理程序或撬棍 PHPMailer 编写到我现有的类结构中。 在这种情况下,由于在 PHPMailer 系统中使用的 spl_autoload_register 函数以及我现有的类结构的多功能性,这非常容易。
我只是在我现有的类结构中创建了一个基本类 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
很好用,让我免于重新发明轮子。
试试这个 ssl 设置:
$mail->SMTPSecure = 'tls'; //tls or ssl
$mail->SMTPOptions = array('ssl' => array('verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.