简单指南:使用PHPMailer发送测试邮件
P粉344355715
P粉344355715 2023-08-26 21:06:15
[PHP讨论组]

我在Debian/Bullseye上运行着一个本地的Apache2服务器。我一直在努力让PHPMailer起作用,但是一直没有成功。安装PHPMailer似乎有两种不同的方法-第一种是使用composer,这是我尝试的第一种方法。它在站点的根目录下创建了一个vendor文件夹,其中包括一个autoload.php文件,以及其他一些文件。该文件包含以下内容:

<?php
// autoload.php @generated by Composer

require_once __DIR__ . '/composer/autoload_real.php';

return ComposerAutoloaderInitd359baac21f520c04e608f4eed750560::getLoader();

这看起来不完整(没有闭合标签)。无论如何,我无法使“test.php”示例工作。

另一种方法是从gethub网站下载.zip文件并将其解压缩到站点的根目录。重命名后,我得到了一个PHPMailer文件夹。使用“mailer.php”示例也没有任何效果。

在这两种情况下,我都修改了smtp信息,以使用域名的实际帐户信息(发送电子邮件、登录密码、smtp服务器名称、主机的smtp安全性和端口设置),但我甚至没有收到拒绝邮件的回复。什么都没有发生。我只看到一个空白的网页。

我确实有运行php,因为我之前使用过的一个php脚本仍然有效(来自我的测试站点-现在的实际站点坚持使用smtp,不让我安装PEAR模块)。

以下是我正在使用的mailer.php脚本-其中一些细节被隐藏:

<?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}";
}
?>

TLS行来自托管公司,所以我认为它们是正确的。

我已经注释掉了我在测试中不需要的选项,但它仍然不起作用。有人能找出我做错了什么吗?

谢谢。

P粉344355715
P粉344355715

全部回复(1)
P粉709644700

好的,明白了。主机公司提供了测试代码,他们的示例使用了smtp.domain.com。实际上,他们的smtp服务器是mail,而不是smtp。我猜想当面对一个不存在的服务器时,代码就会停止运行...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号