【问题标题】:imap_mail_compose creates noname attachments in android emailimap_mail_compose 在 android 电子邮件中创建无名附件
【发布时间】:2023-03-14 19:37:01
【问题描述】:

我正在编写一个 php 应用程序,它从一个邮件帐户读取电子邮件并将某些邮件转发到另一个邮件帐户。我使用 imap_mail_compose() 来创建将被转发的消息。当我处理纯文本消息或 HTML 消息时,它工作得很好。问题出在我有一条同时包含文本和 HTML 组件的消息时。该消息在我计算机上的邮件阅读器中显示得很好,并且在通过 Web 应用程序阅读时也很好。安卓电子邮件程序改为显示带有两个名为“noname”的附件的空白消息。原始消息在 android 电子邮件程序中读取得很好,所以我不确定原始消息和我创建的消息之间有什么区别。我查看了两条消息中的结构,由 imap_fetchstructure() 检索,它们是相同的,所以看起来我正在正确地创建消息,但显然我做错了什么。我还用另一个 Android 电子邮件程序 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;
}

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

【问题讨论】:

    标签: php android email imap


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-08-07
      • 1970-01-01
      • 2020-11-07
      • 2016-05-03
      • 2022-08-03
      • 2013-07-25
      • 2011-07-29
      • 2013-02-14
      • 1970-01-01
      相关资源
      最近更新 更多