PHP尝试安全地发送邮件-找不到PHPMailer类

时间:2019-02-11 00:56:15

标签: php composer-php phpmailer

我从以下内容开始:

composer require phpmailer/phpmailer

随后需要一次放置

require_once "../vendor/autoload.php";

然后

$mail = new PHPMailer;

这是PHP出现致命错误的地方:

  

致命错误:找不到类'PHPMailer'

以下是我的代码:       使用PHPMailer \ PHPMailer \ PHPMailer;       使用PHPMailer \ PHPMailer \ Exception;

# require php mailer
  require_once "../vendor/autoload.php";

  //PHPMailer Object
  $mail = new PHPMailer;

  $mail->isSMTP();
  $mail->SMTPDebug = 3; 
  $mail->SMTPAuth = true;
  // $mail->SMTPSecure = "ssl";
  $mail->SMTPSecure = "tls";
  $mail->Host = "smtp-relay.gmail.com";
  $mail->Port = "587";
  $mail->Username = "some gmail address";
  $mail->Password = "some password";
  $mail->SetFrom("info@example.com");
  $mail->Subject = $subject;
  $mail->Body = $htmlMessage;
  $mail->AddAddress($recpEmails);
  $mail->Send();

$htmlMessage是一个包含纯文本和带有mime_boundary的html的变量,但由于无法找到PHPMailer,因此它从未到达那里。

这是我试图解决的问题:

我在与供应商相同的目录中创建了另一个名为PHPMailer的目录,该新目录包含phpmailer / phpmailer / src的内容,但仍然找不到PHPMailer类。

我还需要PHPMailer.php文件吗?我以为那应该是自动加载功能?

预先感谢

更新

@Phil在评论中指出我缺少use命名空间之后,我更新了代码,这导致了新的错误:

  

致命错误:未捕获的异常'PHPMailer \ PHPMailer \ Exception'和消息'SMTP connect()失败

我了解到$mail->SMTPDebug = 3;提供了更多细节,这揭示了以下内容:

  

2019-02-11 01:51:57连接:打开ssl://smtp-relay.gmail.com:587,超时= 300,options = array()
     2019-02-11 01:51:58连接失败。错误#2:stream_socket_client():SSL操作失败,代码为1。OpenSSL错误消息:error:140770FC:SSL例程:SSL23_GET_SERVER_HELLO:未知协议[v2018 / assets / api / vendor / phpmailer / phpmailer / src / SMTP.php第327行]
     2019-02-11 01:51:58连接失败。错误2:stream_socket_client():无法启用加密[v2018 / assets / api / vendor / phpmailer / phpmailer / src / SMTP.php第327行]
     2019-02-11 01:51:58连接失败。错误2:stream_socket_client():无法连接到ssl://smtp-relay.gmail.com:587(未知错误)[v2018 / assets / api / vendor / phpmailer / phpmailer / src / SMTP.php第327行]
     2019-02-11 01:51:58 SMTP错误:无法连接到服务器:(0)
     SMTP connect()失败。 https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

I then read to on another post更改以下设置,使我看到它正在连接,但它不接受我的凭据:

$mail->SMTPSecure = "tls";
  

2019-02-11 02:00:26服务器->客户:535-5.7.8不接受用户名和密码。在535 5.7.8 https://support.google.com/mail/?p=BadCredentials f2sm562482otb.6-gsmtp
中了解更多     2019-02-11 02:00:26 SMTP错误:密码命令失败:535-5.7.8用户名和密码不被接受。在535 5.7.8 https://support.google.com/mail/?p=BadCredentials f2sm562482otb.6-gsmtp

中了解更多

我目前不知道该怎么办,因为我知道这些是我的gmail帐户的凭据。我必须有一个Gmail企业帐户或类似的东西吗?

又一次更新

我使用了错误的密码。输入正确的密码后,我开始收到以下消息:

  

2019-02-11 14:33:44服务器->客户:550-5.7.0邮件中继被拒绝[172.117.2.44]。 550-5.7.0中以下域之一的中继的无效凭据(从HELO和MAIL FROM获得).550-5.7.0电子邮件是从未在550-5.7.0中注册的域或IP地址发送的您的G Suite帐户。请登录到您的G Suite帐户,并550-5.7.0确认您的发送设备IP地址已在550-5.7.0的G Suite SMTP中继设置中注册。有关更多信息,请访问550 5.7.0 https://support.google.com/a/answer/6140680#maildenied h192sm1484247qke.14-gsmtp

事实证明,我必须拥有G-Suite帐户才能使用smtp-relay.gmail.com。我只有一个普通的Gmail帐户。当我更改为smtp.gmail.com时,我又回到了错误的凭据错误。我将等待我的G-Suite帐户得到验证,然后将结果更新。

1 个答案:

答案 0 :(得分:2)

尝试添加

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
在文件顶部的

导入PHPMailer类。