发送电子邮件时选择标题的准确显示方式

发送电子邮件时选择标题的准确显示方式

我发现 Yahoo! 邮件在标题使用 base64 编码且包含超过 2 行时,对主题行的解释存在不稳定的行为,例如:

Subject: =?UTF-8?B?4pyIIEFvIFN1bCBkYSBBbcOpcmljYSDimIUgVGFyaWZhcyBFeGNs?=
    =?UTF-8?B?dXNpdmFzIOKYhSBQYXJjZXJpYSBMQVRBTSAmIEFlcm9sw61uZWFzIEFyZ2Vu?=
    =?UTF-8?B?dGluYXM=?=

为了隔离这个错误,我希望能够向我自己发送带有我想要的标题的电子邮件,即我可以自己控制在发送的电子邮件的纯文本版本中显示的内容。

有什么方法可以控制这个吗?

我正在使用几种网络邮件工具,但无法控制标题中显示的内容,而且我在 Google 上搜索自定义解决方案,但无济于事。

答案1

在 PHP 中

这样你就能真正拥有很多控制权。

通过使用 PHP PEAR,你可以做这样的事情:

$_SMTP = array(
    "host"      =>  "ssl://smtp.gmail.com",
    "username"  =>  "[email protected]",
    "password"  =>  "password123",
    "port"      =>  "465",
    "auth"      =>  true
);

include_once('PEAR.php');
include_once('Mail.php');
include_once('Mail/mime.php');

$mime = new Mail_mime();
$mime->_build_params['html_charset']='UTF-8';
$mime->_build_params['text_charset']='UTF-8';
$mime->_build_params['head_charset']='UTF-8';
$mime->_build_params['head_encoding']='base64';

$mime->setTXTBody("Plaintext message");
$mime->setHTMLBody("<b>HTML message</b>");

$hdrs = array(
    'From'      => '"Me" <[email protected]>',
    'Subject'   => "Test message",
    'To'        => '"Example" <[email protected]>'
);

$body = $mime->get();
$headers = $mime->headers($hdrs);

$mail =& Mail::factory('smtp', $_SMTP);

$result = $mail->send('"Example" <[email protected]>', $headers, $body);

print_r($result);

事实上,你甚至可以print_r($headers);在发送之前给他们留下一些印象。还有更多选项可以修改,所以你可能需要研究一下。

在 Python 中

也可以在 Python 中使用基础库来实现电子邮件smtplib如所述这里

主要思想是设置标题,您可以使用以下方式以纯文本设置值:

msg = MIMEText("text of the mail",'plain')
msg['Subject'] = "=?utf-8?b?Y2Fmw6k=?="

或者从文本生成适当的格式:

msg = MIMEText("text of the mail",'plain')
msg['Subject'] = Header("café","utf8")

相关内容