php - 在没有 SMTP 身份验证的情况下使用 PHPMailer 发送电子邮件

标签 php phpmailer

我不经常使用 PHP,但是当我使用 PHP 并且需要编写一个函数来发送电子邮件时,我只使用了 mail() 函数。我在共享托管服务上使用过它,而且我总是收到来自...嗯...不是帐户的电子邮件?机器人?它甚至没有电子邮件地址。

这就是我此时此刻想要实现的目标 - 无需真正连接到 SMTP 服务器或通过身份验证即可向我发送电子邮件。使用 PHPMailer 如何做到这一点?在我的情况下甚至有可能吗?如果你不知何故得到我的问题,这些电子邮件是怎么称呼的;那些……不是由……嗯……电子邮件帐户发送的?

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'PHPMailer-master\src\Exception.php';
require 'PHPMailer-master\src\PHPMailer.php';
require 'PHPMailer-master\src\SMTP.php';

$mail = new PHPMailer();
                                            
$mail->FromName = "A random name";
$mail->addAddress("myemail@gmail.com", "Recepient Name");
$mail->isHTML(true);
$mail->Subject = "Subject is here";
$mail->Body = "Hello, <br>test body ";

if(!$mail->Send()) {
     echo "Mailer Error: " . $mail->ErrorInfo;
} else {
     echo "Message has been sent";
}
?>

最佳答案

这确实让我笑了一下......

不,电子邮件不能凭空出现,但电子邮件用户帐户和地址之间不一定存在直接关联。

当您通过调用 mail() 从共享主机帐户发送邮件时,邮件服务器知道您发送的帐户,因此有时不需要身份验证。例如,这就是 GoDaddy 的运作方式。不幸的是,这种方法很容易被滥用,因为通常很难阻止你对自己的身份撒谎。这就是为什么此类服务通常 a) 糟糕且 b) 实际传递消息极其不可靠的原因。

如果您没有指定“发件人”地址,服务器通常会根据它已有的信息来创建一个地址——通常是您的用户帐户名,或运行脚本的用户名(例如 www- data),以及您所在服务器的主机名,通常类似于 randomnumber.hostingprovider.example.com。查看您之前发送的消息的标题,您可能会看到类似的内容。

有时这个地址对于给定共享服务器上的所有用户来说都是相同的,因此您的交付声誉可能取决于其他人发送的内容,这很可能是垃圾邮件、网络钓鱼、恶意软件等。

这种模糊性对于可传递性来说非常糟糕,因此如果您在这样的系统上托管您的联系表,那么来自它的消息最终会进入垃圾邮件文件夹。

如果您使用 SMTP 通过“适当的”帐户发送邮件,您将获得更多的控制权和可靠性,但不幸的是,一些托管服务提供商(又是 GoDaddy)阻止出站 SMTP 并强制您使用他们的邮件服务器。这是一种说法,如果您想发送将被送达的电子邮件,请使用一个体面的托管服务提供商。

一旦您控制了您的发送,您就可以准确选择发送消息的地址,受身份验证限制(包括 SPF、DKIM 和 DMARC 等)的约束,但这是另一回事。

关于php - 在没有 SMTP 身份验证的情况下使用 PHPMailer 发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64849688/

相关文章:

PHPmailer setfrom 错误

PHP-发送每日电子邮件

php - 使用正则表达式计算具有特定内容的 php 脚本

php json_encode & newline, swift JSONSerialization 导致奇怪的输出

php - 山魈轨道打开不工作

php - 如何让 HTML/CSS 在电子邮件中显示?

php - 使用 PHPMailer 发送附件

php - 使用 PHP 语言将 URL 中的所有空格和特殊符号替换为破折号

javascript - Preg 替换已弃用,正在尝试修复

php - 将 Codeigniter 应用程序移植到 PyroCMS