简单指南:使用PHPMailer发送测试邮件
P粉344355715
2023-08-26 21:06:15
<p>我在Debian/Bullseye上运行着一个本地的Apache2服务器。我一直在努力让PHPMailer起作用,但是一直没有成功。安装PHPMailer似乎有两种不同的方法-第一种是使用composer,这是我尝试的第一种方法。它在站点的根目录下创建了一个vendor文件夹,其中包括一个autoload.php文件,以及其他一些文件。该文件包含以下内容:</p>
<pre class="brush:php;toolbar:false;"><?php
// autoload.php @generated by Composer
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInitd359baac21f520c04e608f4eed750560::getLoader();</pre>
<p>这看起来不完整(没有闭合标签)。无论如何,我无法使“test.php”示例工作。</p>
<p>另一种方法是从gethub网站下载.zip文件并将其解压缩到站点的根目录。重命名后,我得到了一个PHPMailer文件夹。使用“mailer.php”示例也没有任何效果。</p>
<p>在这两种情况下,我都修改了smtp信息,以使用域名的实际帐户信息(发送电子邮件、登录密码、smtp服务器名称、主机的smtp安全性和端口设置),但我甚至没有收到拒绝邮件的回复。什么都没有发生。我只看到一个空白的网页。</p>
<p>我确实有运行php,因为我之前使用过的一个php脚本仍然有效(来自我的测试站点-现在的实际站点坚持使用smtp,不让我安装PEAR模块)。</p>
<p>以下是我正在使用的mailer.php脚本-其中一些细节被隐藏:</p>
<pre class="brush:php;toolbar:false;"><?php
//将PHPMailer类导入到全局命名空间
//这些必须在脚本的顶部,而不是函数内部
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
//创建一个实例;传递'true'启用异常
$mail = new PHPMailer(true);
Try
{
//服务器设置
$mail->SMTPDebug = SMTP::DEBUG_SERVER; //启用详细调试输出
$mail->isSMTP(); //使用SMTP发送
$mail->Host = 'mail.<domain>.ca'; //设置要通过的SMTP服务器
$mail->SMTPAuth = true; //启用SMTP身份验证
$mail->Username = 'mail@<domain>.ca'; //SMTP用户名
$mail->Password = '<secret>'; //SMTP密码
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; //启用隐式TLS加密
$mail->Port = 465; //要连接的TCP端口;如果设置了'SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS',请使用587
//收件人
$mail->setFrom('mail@<domain>.ca', ‘from me’);
$mail->addAddress('gary@<domain>.ca', ‘to me’); //添加一个收件人
// $mail->addAddress('Recipient@emailaddress.com'); //名称是可选的
// $mail->addReplyTo('yourname@domain.com', ‘Your Name’);
// $mail->addCC('cc@example.com');
// $mail->addBCC('bcc@example.com');
//附件(可选)
// $mail->addAttachment('/var/tmp/file.tar.gz'); //添加附件
// $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); //可选名称
//内容
$mail->isHTML(true); //将电子邮件格式设置为HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body in bold!';
$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}";
}
?></pre>
<p>TLS行来自托管公司,所以我认为它们是正确的。</p>
<p>我已经注释掉了我在测试中不需要的选项,但它仍然不起作用。有人能找出我做错了什么吗?</p>
<p>谢谢。</p>
好的,明白了。主机公司提供了测试代码,他们的示例使用了smtp.domain.com。实际上,他们的smtp服务器是mail,而不是smtp。我猜想当面对一个不存在的服务器时,代码就会停止运行...