php - 从 PHP Mailer 的标题中修剪电子邮件地址
问题描述
我正在使用 PHPMailer 向我的客户发送电子邮件。但我对输出的结果不满意
我想<michael@gmail.com>
在我的名字末尾删除,但不知道该怎么做。
我当前的脚本:
$mail->SetFrom("michael@gmail.com",'Michael Chu');
$mail->XMailer = 'Microsoft Mailer';
$mail->AddAddress($email);
$mail->Subject = "TEST Email";
$mail->Body = "<p>TEST Email<p>";
解决方案
PHPMailer 代码中的相关部分在 Pre Send 例程中,该例程组装邮件(显然总是在发送之前在内部调用):
public function preSend() {
...
try {
$this->error_count = 0; // Reset errors
$this->mailHeader = '';
...
// Create body before headers in case body makes changes to headers (e.g. altering transfer encoding)
$this->MIMEHeader = '';
$this->MIMEBody = $this->createBody();
// createBody may have added some headers, so retain them
$tempheaders = $this->MIMEHeader;
$this->MIMEHeader = $this->createHeader();
$this->MIMEHeader .= $tempheaders;
...
return true;
这将始终被调用。现在:当我们查看 createHeader 函数时,我们会看到:
public function createHeader()
{
$result = '';
...
$result .= $this->addrAppend('From', [[trim($this->From), $this->FromName]]);
...
return $result;
}
所以: Create Header 总是添加 From Address 部分,但它依赖于 addrAppend 来格式化它(传递 'From' 和一个包含一个地址数组 [email, name] 的数组)
public function addrAppend($type, $addr)
{
$addresses = [];
foreach ($addr as $address) {
$addresses[] = $this->addrFormat($address);
}
return $type . ': ' . implode(', ', $addresses) . static::$LE;
}
地址数组被传递:
public function addrFormat($addr)
{
if (empty($addr[1])) { // No name provided
return $this->secureHeader($addr[0]);
}
return $this->encodeHeader($this->secureHeader($addr[1]), 'phrase') .
' <' .
$this->secureHeader($addr[0])
. '>';
}
并用电子邮件格式化......你无能为力。
所以用phpmailer你不能这样做。但是您可以编写自己的子类。可能是这样的
<?php
//Import PHPMailer classes into the global namespace
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require '../vendor/autoload.php';
/**
* Use PHPMailer as a base class and extend it
*/
class myPHPMailer extends PHPMailer
{
public function addrFormat($addr)
{
if (empty($addr[1])) { // No name provided
return $this->secureHeader($addr[0]);
}
else {
return $this->secureHeader($addr[1]);
}
}
}
推荐阅读
- sql - SQL 复制错误:“在订阅者处未找到该行”但指向另一个发布的表
- c# - 为什么属性网格没有显示正确的颜色?
- sql-server - SSIS 包问题 - 更新要上传的每日 Excel 文件会导致 SSIS 包变得“不同步”
- java - 在自由上使用带有 jndi 的 spring 时无法获取 JDBC 连接
- rpm - 升级时不应删除的 RPM 目录
- go - 在分块数据的 HTTP 响应中如何设置 Content-Length
- azure-functions - 在 Azure Durable Function Activity 中使用 Task.Delay
- android - 在 Android 9.0 中创建进入主屏幕的快捷方式
- firebase - Firestore,如何合并包含多个范围比较的查询的索引?
- java - 如何避免这种冗余并关闭未使用的 File 类?