【问题标题】:PHPMailer semi issuePHPMailer 半问题
【发布时间】:2018-07-06 15:03:04
【问题描述】:

我有一个奇怪的 PHPMailer 问题,当我尝试发送电子邮件时,我看到这个错误:escapeshellcmd() has been disabled for security reasons 但是如果我检查电子邮件,我可以看到电子邮件已发送,我该如何修复/隐藏这个问题?

【问题讨论】:

    标签: php email phpmailer


    【解决方案1】:

    使用这个代码就可以了,希望它会有所帮助:

    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 库,如果没有,请检查路径。

    谢谢!

    【讨论】:

      【解决方案2】:

      您的 PHP 安装已禁用该功能,但这可能是一个警告而不是错误,因此它会继续运行您的代码并发送您的邮件。您可以在 php.ini 文件中控制 PHP 错误和警告的显示,查看 error_display 属性。

      更好的解决方案是使用SMTP to localhost,不需要使用这个功能。它也比使用 PHP 的 mail() 函数更快、更安全,这是 PHPMailer 默认使用的。要更改,只需将其添加到您现有的 PHPMailer 代码中:

      $mail->isSMTP();
      $mail->Host = 'localhost';
      

      【讨论】:

      • @Syncro 问题是我无法在共享主机上安装本地电子邮件服务器。
      • 如果mail() 有效,您已经拥有一个本地邮件服务器,共享主机提供一个是完全正常的。我不知道为什么有人再使用共享主机。处理起来很糟糕,而且并不便宜 - 您可以以每月 3 欧元的价格获得一个完整的、功能齐全的服务器,并具有完全的 root 访问权限。
      • @Syncro 我有点穷我没多少钱...,反正这个问题有可能是服务器的端口产生的?
      • 不,如果您使用 mail() 它不使用端口 - 它通过外壳调用本地 sendmail 二进制文件 - 这在共享主机环境中具有潜在危险。由于 sendmail 本身(对您隐藏)在端口 25 上与 localhost 通信,因此我希望您的 SMTP 连接能够使用相同的设置。或者,请参阅主机的文档,因为它们应该会告诉您应该如何发送电子邮件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-31
      • 2016-07-17
      • 2013-01-04
      相关资源
      最近更新 更多