在没有 SMTP 身份验证的情况下使用 PHPMailer 发送电子邮件
Send email using PHPMailer without SMTP authentication
我不经常使用 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";
}
?>
这确实让我笑了......
不,电子邮件不能神奇地 spring 存在,但电子邮件用户帐户和地址之间不一定存在直接关联。
当您通过调用 mail()
从共享主机帐户发送邮件时,邮件服务器知道您发送的帐户,因此有时不需要身份验证。例如,这就是 GoDaddy 的运作方式。不幸的是,这种方法很容易被滥用,因为通常没有什么能阻止你 flat-out 谎报你是谁。这就是为什么此类服务通常 a) 糟糕且 b) 实际传递消息极其不可靠的原因。
如果您不指定“发件人”地址,服务器通常会根据它已有的信息来创建一个地址——通常是您的用户帐户名或用户名 运行 脚本 (例如 www-data
),以及您所在服务器的主机名,通常类似于 randomnumber.hostingprovider.example.com
。查看您之前发送的 headers 封邮件,您可能会看到类似的内容。
有时,此地址对于给定共享服务器上的所有用户来说都是相同的,因此您的交付声誉可能取决于其他人发送的内容,这很可能是垃圾邮件、网络钓鱼、恶意软件等。
这种模糊性对于可传递性来说非常糟糕,因此如果您在这样的系统上托管您的联系表,预计来自它的消息最终会进入垃圾邮件文件夹。
如果您使用 SMTP 通过“正确的”帐户发送邮件,您将获得更多的控制权和可靠性,但不幸的是,一些托管服务提供商(又是 GoDaddy)阻止出站 SMTP 并强制您使用他们的邮件服务器。这是一种说法,如果您想发送将被送达的电子邮件,请使用体面的托管服务提供商。
一旦您控制了您的发送,您就可以准确选择发送邮件的地址,受身份验证限制,包括 SPF、DKIM 和 DMARC,但那是另一回事了。
据我所知,这是可能的,并且每次都能正常工作。在去年,我发现我使用 mail() 函数发送的电子邮件会立即进入我的垃圾邮件箱(以及其他人的垃圾箱),造成极大的混乱。我升级到 PHPMailer 来解决这个问题,我从来没有将它设置为使用 SMTP 并且工作正常。
我的代码是:
$mail = new PHPMailer(true);
$html = $email->get(); // This gets a standard HTML Template to use as the base of the e-mail.
$title = 'Title for Inside the HTML';
$subject = 'The E-mail Subject';
$html = str_replace('[title]',$title,$html); //Use this to replace the [title] element in my HTML Template with $title.
$html = str_replace('[date]',date("F j, Y g:i A"),$html); // Again, replaces [date] in the HTML Template with the current date and time.
$body = 'Hello My Good Friend,<br>This is just a simple <strong>HTML Message</strong><br><br>Thank you.';
$html = str_replace('[body]',$body,$html); //Add my HTML Message to the HTML Template.
try {
//Recipients
$mail->setFrom('noreply@example.com', 'My Organization');
$mail->addAddress($row["email"], $row["fullname"]); // Add a recipient
//Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = $subject;
$mail->Body = $html;
$mail->AltBody = strip_tags($html,'<br>');
$mail->send();
//Return Success Message
$rMsg .= '<div class="alert alert-success">
<strong>Success: </strong> We have e-mailed the warning.</div>';
} catch (Exception $e) {
$rMsg .= '<div class="alert alert-danger">
<strong>Error: </strong> There was an error e-mailing the warning.</div>';
}
我不经常使用 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";
}
?>
这确实让我笑了......
不,电子邮件不能神奇地 spring 存在,但电子邮件用户帐户和地址之间不一定存在直接关联。
当您通过调用 mail()
从共享主机帐户发送邮件时,邮件服务器知道您发送的帐户,因此有时不需要身份验证。例如,这就是 GoDaddy 的运作方式。不幸的是,这种方法很容易被滥用,因为通常没有什么能阻止你 flat-out 谎报你是谁。这就是为什么此类服务通常 a) 糟糕且 b) 实际传递消息极其不可靠的原因。
如果您不指定“发件人”地址,服务器通常会根据它已有的信息来创建一个地址——通常是您的用户帐户名或用户名 运行 脚本 (例如 www-data
),以及您所在服务器的主机名,通常类似于 randomnumber.hostingprovider.example.com
。查看您之前发送的 headers 封邮件,您可能会看到类似的内容。
有时,此地址对于给定共享服务器上的所有用户来说都是相同的,因此您的交付声誉可能取决于其他人发送的内容,这很可能是垃圾邮件、网络钓鱼、恶意软件等。
这种模糊性对于可传递性来说非常糟糕,因此如果您在这样的系统上托管您的联系表,预计来自它的消息最终会进入垃圾邮件文件夹。
如果您使用 SMTP 通过“正确的”帐户发送邮件,您将获得更多的控制权和可靠性,但不幸的是,一些托管服务提供商(又是 GoDaddy)阻止出站 SMTP 并强制您使用他们的邮件服务器。这是一种说法,如果您想发送将被送达的电子邮件,请使用体面的托管服务提供商。
一旦您控制了您的发送,您就可以准确选择发送邮件的地址,受身份验证限制,包括 SPF、DKIM 和 DMARC,但那是另一回事了。
据我所知,这是可能的,并且每次都能正常工作。在去年,我发现我使用 mail() 函数发送的电子邮件会立即进入我的垃圾邮件箱(以及其他人的垃圾箱),造成极大的混乱。我升级到 PHPMailer 来解决这个问题,我从来没有将它设置为使用 SMTP 并且工作正常。
我的代码是:
$mail = new PHPMailer(true);
$html = $email->get(); // This gets a standard HTML Template to use as the base of the e-mail.
$title = 'Title for Inside the HTML';
$subject = 'The E-mail Subject';
$html = str_replace('[title]',$title,$html); //Use this to replace the [title] element in my HTML Template with $title.
$html = str_replace('[date]',date("F j, Y g:i A"),$html); // Again, replaces [date] in the HTML Template with the current date and time.
$body = 'Hello My Good Friend,<br>This is just a simple <strong>HTML Message</strong><br><br>Thank you.';
$html = str_replace('[body]',$body,$html); //Add my HTML Message to the HTML Template.
try {
//Recipients
$mail->setFrom('noreply@example.com', 'My Organization');
$mail->addAddress($row["email"], $row["fullname"]); // Add a recipient
//Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = $subject;
$mail->Body = $html;
$mail->AltBody = strip_tags($html,'<br>');
$mail->send();
//Return Success Message
$rMsg .= '<div class="alert alert-success">
<strong>Success: </strong> We have e-mailed the warning.</div>';
} catch (Exception $e) {
$rMsg .= '<div class="alert alert-danger">
<strong>Error: </strong> There was an error e-mailing the warning.</div>';
}