我从以下几点开始:
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("[email protected]");
$mail->Subject = $subject;
$mail->Body = $htmlMessage;
$mail->AddAddress($recpEmails);
$mail->Send();
$htmlMessage
是一个包含纯文本和带有mime_边界的html的变量,但它永远不会到达那里,因为它找不到phpmailer。这就是我试图解决问题的方法:
我在与vendor相同的目录中创建了另一个名为phpmailer的目录,这个新目录包含phpmailer/phpmailer/src的内容,但是它仍然找不到phpmailer类。
我也需要phpmailer.php文件吗?我以为那是自动装弹机应该做的?
提前谢谢
更新
在@phil在评论中指出我缺少use名称空间之后,我更新了代码,这导致了一个新的错误:
致命错误:消息为“smtp connect()的未捕获异常“phpmailer\phpmailer\exception”失败
我看到
$mail->SMTPDebug = 3;
提供了更多的细节,它揭示了以下内容:2019-02-11 01:51:57连接:打开ssl://smtp relay.gmail.com:587,timeout=300,options=array()
2019-02-11 01:51:58连接失败。错误2:stream_socket_client():SSL操作失败,代码为1。openssl错误消息:错误:140770fc:ssl例程:ssl23_get_server_hello:unknown protocol[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.8https://support.google.com/mail/?p=BadCredentialsf2sm562482otb.6-gsmtp了解更多信息
2019-02-11 02:00:26 SMTP错误:密码命令失败:535-5.7.8不接受用户名和密码。在535 5.7.8https://support.google.com/mail/?p=BadCredentialsf2sm562482otb.6-gsmtp了解更多信息
我不知道现在该怎么办,因为我知道这些是我gmail帐户的凭证。我必须要有一个gmail商业账户或类似的东西吗?
再更新一次
我使用的密码不正确。输入正确的密码后,我开始收到以下消息:
2019-02-11 14:33:44服务器->客户端:550-5.7.0邮件中继被拒绝[172.117.2.44]。550-5.7.0中继的凭据无效域之一:(从HELO获取并从中发送邮件)。550-5.7.0电子邮件是从G套件帐户中未注册的域或IP地址发送的。请登录到您的G套件帐户,550-5.7.0验证您的发送设备IP地址是否已在550-5.7.0 G套件SMTP中继设置中注册。有关更多信息,请访问550 5.7.0https://support.google.com/a/answer/6140680#maildeniedh192sm1484247qke.14-gsmtp
结果发现我必须有一个g-suite帐户才能使用smtp-relay.gmail.com。我只有一个普通的gmail账户。当我切换到smtp.gmail.com时,我又回到了错误的凭据错误。我只会等待我的G-Suite帐户被验证,我会更新结果。
最佳答案
尝试添加
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
在文件顶部导入phpmailer类。
关于php - PHP尝试安全地发送邮件-找不到PHPMailer类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54622701/