我正在为我的Web应用程序构建一个邮件模块。在我目前的位置上,我正在尝试获取邮件正文并正确解码。但是,当我在邮件中遇到国际字符时,它无法正确解码它们。
例如。我有一个原始的电子邮件正文:
--001a11c126f6bd3aa804f575bd85 Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable ss -- s Niels S=F8nderb=E6k --001a11c126f6bd3aa804f575bd85
Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
ss
-- s
Ni= els S=F8nderb=E6k
--001a11c126f6bd3aa804f575bd85--
这是解码后的结果:
ss
-- s
Niels S�nderb�k
Niels S nderb k
应该是Niels Sønderbæk
。我只在处理国际字符时见过这个问题。有人知道如何修复它吗?我在下面包含了我的解码代码。它取自http://www.sitepoint.com/exploring-phps-imap-library-1/.
<?php
$imap = imap_open(...);
$uid = ...
function getBody($uid, $imap) {
$body = get_part($imap, $uid, "TEXT/HTML");
// if HTML body is empty, try getting text body
if ($body == "") {
$body = get_part($imap, $uid, "TEXT/PLAIN");
}
return $body;
}
function get_part($imap, $uid, $mimetype, $structure = false, $partNumber = false) {
if (!$structure) {
$structure = imap_fetchstructure($imap, $uid, FT_UID);
}
if ($structure) {
if ($mimetype == get_mime_type($structure)) {
if (!$partNumber) {
$partNumber = 1;
}
$text = imap_fetchbody($imap, $uid, $partNumber, FT_UID);
switch ($structure->encoding) {
case 3: return imap_base64($text);
case 4: return imap_qprint($text);
default: return imap_utf8($text);
}
}
// multipart
if ($structure->type == 1) {
foreach ($structure->parts as $index => $subStruct) {
$prefix = "";
if ($partNumber) {
$prefix = $partNumber . ".";
}
$data = get_part($imap, $uid, $mimetype, $subStruct, $prefix . ($index + 1));
if ($data) {
return $data;
}
}
}
}
return false;
}
function get_mime_type($structure) {
$primaryMimetype = array("TEXT", "MULTIPART", "MESSAGE", "APPLICATION", "AUDIO", "IMAGE", "VIDEO", "OTHER");
if ($structure->subtype) {
return $primaryMimetype[(int)$structure->type] . "/" . $structure->subtype;
}
return "TEXT/PLAIN";
}
echo getBody($uid,$imap);
?>
是的,标题说它是iso8859-1字符集编码,但您只撤消了传输编码。您仍然需要执行从电子邮件到Web应用程序字符集的字符集转换,可能是utf8。
我正在开发一个应用程序,在这个应用程序中,我不使用IOS邮件API发送邮件(邮件是使用SES amazon服务的发件人,不需要用户和附加文件的交互…)。在我的API中,我必须发送带有所有MIME协议的编码邮件(这不是问题)。我用字符集ascii和我在base64中附加的pdf对正文进行编码: 当我用gmail或邮件应用程序(OSX或IOS)打开邮件时,一切都很完美,但当我用windows mail
我也遇到了一个问题,而发送邮件正文的日语。 我使用了mimeutility.encodeText(subject,“UTF-8”,“B”),但这只适用于subject而不适用于邮件正文中的日语文本。 我正在使用阿帕奇骆驼邮件。 请帮忙
我的代码如下: 属性包括: 主机=smtp.gmail.com mail.smtp.auth=true mail.smtp.starttls.enable=true mail.smtp.host=smtp.gmail.com mail.smtp.port=587 mail.mime.charset=UTF-8 注意:文本在发送之前没有损坏。message.getSubject()打印出来的是干净的
我一直在与Gmail API的意外行为作斗争。 到目前为止,我都是通过邮件获取每封邮件的正文。有效载荷。部分[0]。身体数据,其中包含base64中的消息体。在这种情况下,零件的MimeType为text/plain。 问题是,当我检索的邮件有附件时,parts[0]MimeType是“multipart/alternative”,它的主体只有空字段。 如果邮件正文有附件,我该如何获取它? 谢谢
我有下面的代码,用于使用带有附件和正文部分(消息部分)的Java mail API发送邮件,但我只得到附件,而不是正文消息。 如有任何帮助或意见,将不胜感激。
问题内容: 发送电子邮件时,我遇到一些外来字符的麻烦。有人可以建议我该怎么做吗?我怀疑问题可能是三件事之一。 html页面编码不正确。(这会影响表单中的POST数据吗?) 邮件功能没有任何编码。因此,该程序不知道如何读取它。(最有可能的) 文件本身没有正确的编码,因此出现了问题。(可能不太可能) 还有其他可能的原因吗? 我试图将它们一一淘汰,直到发现问题。我认为选项2是最可能的原因。如何为邮件功能