我正在编写一个 php 应用程序,它从一个邮件帐户读取电子邮件并将某些邮件转发到另一个邮件帐户。我使用 imap_mail_compose() 来创建将被转发的消息。当我处理纯文本消息或 HTML 消息时,它工作得很好。问题出在我有一条同时包含文本和 HTML 组件的消息时。该消息在我计算机上的邮件阅读器中显示得很好,并且在通过 Web 应用程序阅读时也很好。安卓电子邮件程序改为显示带有两个名为“noname”的附件的空白消息。原始消息在 android 电子邮件程序中读取得很好,所以我不确定原始消息和我创建的消息之间有什么区别。我查看了两条消息中的结构,由 imap_fetchstructure() 检索,它们是相同的,所以看起来我正在正确地创建消息,但显然我做错了什么。我还用另一个安卓电子邮件程序 K-9 Mail 检查了它,它在那里运行良好。
这是我用来设置 imap_mail_compose() 使用的正文部分的一些代码。变量 $emailMessage 来自一个提取电子邮件所有部分的类。我在http://www.electrictoolbox.com/php-email-extract-inline-image-attachments/找到了它,并在其中添加了一些额外的项目。
$bptr = 1;
// if both text and HTML parts exist
if ((strlen($emailMessage->bodyHTML) > 0) && (strlen($emailMessage->bodyPlain) > 0))
{
$hdr["type"] = TYPEMULTIPART;
$hdr["subtype"] = "alternative";
$body[$bptr++] = $hdr;
}
// check for plain text message
if (strlen($emailMessage->bodyPlain) > 0) {
$tpart["type"] = TYPETEXT;
$tpart["subtype"] = "plain";
$tpart["encoding"] = $emailMessage->plain_encoding;
$tpart["disposition.type"] = "INLINE";
if (strlen($emailMessage->plain_charset) > 0)
$tpart["charset"] = $emailMessage->plain_charset;
$tpart["contents.data"] = $emailMessage->encodePlain;
$body[$bptr++] = $tpart;
}
// check for HTML message
if (strlen($emailMessage->bodyHTML) > 0) {
$hpart["type"] = TYPETEXT;
$hpart["subtype"] = "html";
$hpart["encoding"] = $emailMessage->html_encoding;
$hpart["disposition.type"] = "INLINE";
if (strlen($emailMessage->html_charset) > 0)
$hpart["charset"] = $emailMessage->html_charset;
$hpart["contents.data"] = $emailMessage->encodeHTML;
$body[$bptr++] = $hpart;
}
那么,有人对此有任何想法吗?感谢您的帮助,因为这是一个真正的障碍。