首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从PHP Mailer的标题中修剪电子邮件地址

从PHP Mailer的标题中修剪电子邮件地址
EN

Stack Overflow用户
提问于 2018-06-13 04:08:06
回答 1查看 209关注 0票数 1

我正在使用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>";
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-13 06:25:05

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;

这将被称为always。现在:当我们查看createHeader-function时,我们会看到:

public function createHeader()
{
    $result = '';
    ...
    $result .= $this->addrAppend('From', [[trim($this->From), $this->FromName]]);
    ...
    return $result;
}

因此: Create Header总是添加From地址部分,但它依赖于addrAppend对其进行格式化(传递'From‘和一个包含一个地址数组的数组-电子邮件,名称)

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是做不到的。但您可以编写自己的subclass。可能是一些类似的东西

<?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]);
    }
}   
}   
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50825098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档