PHPMailer 阻止电子邮件 "chained together"
PHPMailer prevent emails from being "chained together"
我有一个简单的 PHP 端点,它接收 POST 请求并使用 PHPMailer 向我发送电子邮件。一切正常,但我注意到在我的电子邮件客户端(网络上的 Gmail)中,我从它收到的电子邮件似乎被分组为相同 thread/conversation.
的一部分
我可以在电子邮件 header 中设置一个参数来通知电子邮件客户端每封邮件都应视为其 自己的单独 对话? 换句话说,不要链接电子邮件(如屏幕截图所示)。
我认为这种行为是可以实现的,因为如果您手动向某人发送单独的电子邮件(相对于回复您已发送的电子邮件链),您可以有效地做到这一点。
这是我发送电子邮件的方式(经过简化和编辑):
<?php
require '../utils/phpmailer/vendor/autoload.php';
$email = $_POST['email'];
$message = $_POST['message'];
$mailer = new PHPMailer;
$mailer->isSMTP();
$mailer->Host = 'smtp.mailgun.org';
$mailer->SMTPAuth = true;
$mailer->Username = getenv('MAILGUN_SMTP_USERNAME');
$mailer->Password = getenv('MAILGUN_SMTP_PASSWORD');
$mailer->SMTPSecure = 'tls';
$mailer->Port = 587;
$mailer->From = 'noreply@mydomain.com';
$mailer->addAddress('myemail@gmail.com', 'Me');
$mailer->isHTML(true);
$mailer->Subject = 'Message from Endpoint';
$mailer->Body = 'Received a message from '.$email.'. Message: '.$message;
if (!$mailer->send()) {
die('failed');
} else {
echo 'success';
}
?>
来自我的电子邮件客户端的屏幕截图显示消息被链接在一起作为相同的“对话”:
没有,没有。
线程中有一整块 email RFCs relating to connecting messages together:Message-ID
、In-Reply-To
和 References
headers。不幸的是,普遍存在的无能和错误的实现在实践中造成了一些混乱,因此邮件客户端(例如 gmail)有时会求助于通过 home-grown 启发式方法将消息链接在一起,例如如果它们来自同一个发件人,或者碰巧有相同的主题,即使这些消息在任何合理的方式上完全不相关。
更糟糕的是,有些人已经开始忽略正确设置headers,这对任何人都没有帮助。
Client-specific 启发式根据定义在电子邮件规范之外,因此从发件人的角度来看是无法控制的。 Gmail 在这方面尤其糟糕,随机将各种不相关的邮件链接在一起。
我在这里,这看起来很可疑:
require '../utils/phpmailer/vendor/autoload.php';
您的 vendor
文件夹应该属于您的项目,而不是它使用的任何库。使用从 PHPMailer 自己的 composer.json
生成的自动加载器(这行看起来像)很可能包含开发依赖项,这不应该出现在生产中。
我有一个简单的 PHP 端点,它接收 POST 请求并使用 PHPMailer 向我发送电子邮件。一切正常,但我注意到在我的电子邮件客户端(网络上的 Gmail)中,我从它收到的电子邮件似乎被分组为相同 thread/conversation.
的一部分我可以在电子邮件 header 中设置一个参数来通知电子邮件客户端每封邮件都应视为其 自己的单独 对话? 换句话说,不要链接电子邮件(如屏幕截图所示)。
我认为这种行为是可以实现的,因为如果您手动向某人发送单独的电子邮件(相对于回复您已发送的电子邮件链),您可以有效地做到这一点。
这是我发送电子邮件的方式(经过简化和编辑):
<?php
require '../utils/phpmailer/vendor/autoload.php';
$email = $_POST['email'];
$message = $_POST['message'];
$mailer = new PHPMailer;
$mailer->isSMTP();
$mailer->Host = 'smtp.mailgun.org';
$mailer->SMTPAuth = true;
$mailer->Username = getenv('MAILGUN_SMTP_USERNAME');
$mailer->Password = getenv('MAILGUN_SMTP_PASSWORD');
$mailer->SMTPSecure = 'tls';
$mailer->Port = 587;
$mailer->From = 'noreply@mydomain.com';
$mailer->addAddress('myemail@gmail.com', 'Me');
$mailer->isHTML(true);
$mailer->Subject = 'Message from Endpoint';
$mailer->Body = 'Received a message from '.$email.'. Message: '.$message;
if (!$mailer->send()) {
die('failed');
} else {
echo 'success';
}
?>
来自我的电子邮件客户端的屏幕截图显示消息被链接在一起作为相同的“对话”:
没有,没有。
线程中有一整块 email RFCs relating to connecting messages together:Message-ID
、In-Reply-To
和 References
headers。不幸的是,普遍存在的无能和错误的实现在实践中造成了一些混乱,因此邮件客户端(例如 gmail)有时会求助于通过 home-grown 启发式方法将消息链接在一起,例如如果它们来自同一个发件人,或者碰巧有相同的主题,即使这些消息在任何合理的方式上完全不相关。
更糟糕的是,有些人已经开始忽略正确设置headers,这对任何人都没有帮助。
Client-specific 启发式根据定义在电子邮件规范之外,因此从发件人的角度来看是无法控制的。 Gmail 在这方面尤其糟糕,随机将各种不相关的邮件链接在一起。
我在这里,这看起来很可疑:
require '../utils/phpmailer/vendor/autoload.php';
您的 vendor
文件夹应该属于您的项目,而不是它使用的任何库。使用从 PHPMailer 自己的 composer.json
生成的自动加载器(这行看起来像)很可能包含开发依赖项,这不应该出现在生产中。