【发布时间】:2018-07-06 15:03:04
【问题描述】:
我有一个奇怪的 PHPMailer 问题,当我尝试发送电子邮件时,我看到这个错误:escapeshellcmd() has been disabled for security reasons 但是如果我检查电子邮件,我可以看到电子邮件已发送,我该如何修复/隐藏这个问题?
【问题讨论】:
我有一个奇怪的 PHPMailer 问题,当我尝试发送电子邮件时,我看到这个错误:escapeshellcmd() has been disabled for security reasons 但是如果我检查电子邮件,我可以看到电子邮件已发送,我该如何修复/隐藏这个问题?
【问题讨论】:
使用这个代码就可以了,希望它会有所帮助:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
$mail = new PHPMailer(true);
$name = 'Your Name';
$to = 'to@gmail.com';
$subject = 'Hello World!';
$message = 'This is a test mail!';
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->Username = 'yourmail@gmail.com';
$mail->Password = '*********';
$mail->SMTPSecure = 'tls';
$mail->addReplyTo($to, $name);
$mail->setFrom($to, $name);
$mail->addAddress($to);
$mail->Subject = $subject;
$mail->msgHtml($message);
$mail->send();
只需更改电子邮件和密码并运行。
希望您在根目录中包含 PHPMailer 库,如果没有,请检查路径。
谢谢!
【讨论】:
您的 PHP 安装已禁用该功能,但这可能是一个警告而不是错误,因此它会继续运行您的代码并发送您的邮件。您可以在 php.ini 文件中控制 PHP 错误和警告的显示,查看 error_display 属性。
更好的解决方案是使用SMTP to localhost,不需要使用这个功能。它也比使用 PHP 的 mail() 函数更快、更安全,这是 PHPMailer 默认使用的。要更改,只需将其添加到您现有的 PHPMailer 代码中:
$mail->isSMTP();
$mail->Host = 'localhost';
【讨论】:
mail() 有效,您已经拥有一个本地邮件服务器,共享主机提供一个是完全正常的。我不知道为什么有人再使用共享主机。处理起来很糟糕,而且并不便宜 - 您可以以每月 3 欧元的价格获得一个完整的、功能齐全的服务器,并具有完全的 root 访问权限。