0

我正在编写一个 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;
}

那么,有人对此有任何想法吗?感谢您的帮助,因为这是一个真正的障碍。

4

1 回答 1

2

我在这里找到了一个可行的解决方案。它在 php 网站上: http: //php.net/manual/en/function.imap-append.php

由于我们已经为此苦苦挣扎了一段时间,我想分享一下我们如何让 imap_append 与包括附件在内的所有 MIME 部分正常工作。如果您正在发送电子邮件并希望将已发送的消息附加到“已发送邮件”文件夹,我想不出更简单的方法来执行此操作,如下所示:

1) 使用 SwiftMailer 通过 PHP 发送消息。$message = Swift_Message::newInstance("主题在这里"); (然后添加发件人、收件人、正文、附件等) $result = $mailer->send($message);

2) 当您在上面的步骤 1) 中构造消息时,将其保存到一个变量中,如下所示:

$msg = $message->toString(); (这会创建 imap_append() 所需的完整 MIME 消息!在此之后,您可以像这样调用 imap_append:

imap_append($imap_conn,$mail_box,$msg."\r\n","\Seen");

所以去http://swiftmailer.org/并使用他们的库而不是重新发明轮子。

于 2013-08-28T21:59:59.963 回答