我正在使用PHPmailer。它适用于$ mail-> SMTPDebug = true;但当我删除该行时,它会无声地失败。我说静默失败,因为它没有给出任何错误,但电子邮件似乎没有发送。
$mail = new PHPMailer;
$mail->SMTPDebug = true;
$mail->SMTPAuth = true;
$mail->CharSet = 'utf-8';
$mail->SMTPSecure = 'ssl';
$mail->Host = 'smtp.gmail.com';
$mail->Port = '465';
$mail->Username = 'xxxxx@gmail.com';
$mail->Password = 'xxxxx';
$mail->Mailer = 'smtp';
$mail->AddReplyTo('support@xxxxx.com', 'xxxxx Support');
$mail->From = 'xxxxx@gmail.com';
$mail->FromName = 'xxxxx Applications';
$mail->Sender = 'xxxxx Applications';
$mail->Priority = 3;
//To us
$mail->AddAddress('xxxxx@xxxxx.com', 'xxxxx xxxxx');
//To Applicant
$mail->AddAddress($email, $first_name.''.$last_name);
$mail->IsHTML(true);
$last_4_digits = substr($card_num, -4);
//build email contents
$mail->Subject = 'Application From '.$first_name.' '.$last_name;
$mail->Body = $body_html;
$mail->AltBody = $body_text;
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
exit;
}
答案 0 :(得分:13)
通过设置
$mail->SMTPDebug = false;
而不是完全省略该行,它每次都有效。
答案 1 :(得分:2)
我认为您使用的是过时版本的 phpmailer,请使用 composer 安装。检查PHP邮件程序的版本是6.4+
以下是如何使用 Composer 安装最新版本的示例。
composer require phpmailer/phpmailer
当您查看官方存储库代码时 - 第 402 行
https://github.com/PHPMailer/PHPMailer/blob/master/src/PHPMailer.php
您看到 $SMTPDebug 设置为 0,因此这不能成为它静默失败的原因。
public $SMTPDebug = 0;
下面提供了使用 phpmailer 发送电子邮件的示例指南。 这个例子对我有用,没有使用未指定的 SMTPDEBUG。此外,PHPMailer(true) 启用了异常,这很有用,因此它不会静默失败。
//Load Composer's autoloader
require 'vendor/autoload.php';
//Instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);
try {
//Server settings
$mail->isSMTP(); //Send using SMTP
$mail->Host = 'smtp.example.com'; //Set the SMTP server to send through
$mail->SMTPAuth = true; //Enable SMTP authentication
$mail->Username = 'user@example.com'; //SMTP username
$mail->Password = 'secret'; //SMTP password
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; //Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged
$mail->Port = 587; //TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above
//Recipients
$mail->setFrom('from@example.com', 'Mailer');
$mail->addAddress('joe@example.net', 'Joe User'); //Add a recipient
$mail->addAddress('ellen@example.com'); //Name is optional
$mail->addReplyTo('info@example.com', 'Information');
$mail->addCC('cc@example.com');
$mail->addBCC('bcc@example.com');
//Attachments
$mail->addAttachment('/var/tmp/file.tar.gz'); //Add attachments
$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); //Optional name
//Content
$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';
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
答案 2 :(得分:0)
要提供问题的更多详细信息:
<块引用>省略 SMTPDebug 信息时邮件没有发送是什么原因?
由于未指定使用的PHPMailer版本,我尝试使用2013年9月12日发布的v5.2.7问题时的最新版本,但我也尝试了最旧的非开发版本、5.2.2(可在 packagist 上获得)以及介于 v5.2.4、v5.2.5 和 v5.2.6 之间的所有版本。
我无法复制该问题,因此很可能是不是由于省略了 PHPMailer 中的 SMTPDebug
参数引起的,除非其他依赖项、操作系统或 PHP 版本在问题,但没有详细信息,无法确定。
在这些旧版本中,SMTPDebug
参数是这样使用的
/**
* SMTP class debug output mode.
* Options: 0 = off, 1 = commands, 2 = commands and data
* @type int
* @see SMTP::$do_debug
*/
public $SMTPDebug = 0;
...
protected function edebug($str)
{
if (!$this->SMTPDebug) {
return;
}
...
$this->edebug($e->getMessage() . "\n");
因此,由于省略 SMTPDebug
而导致出现所描述的效果的错误将是相当困难的。
如果赏金者仍然遇到问题,请尝试 @mahen3d's suggestions 或提出一个提供 reprex 的新问题。