使用 Zend 框架无法从收件箱获取某些电子邮件的消息正文?

2024-02-22

我正在尝试阅读我的应用程序的电子邮件收件箱 - 我在这里使用 zend 框架。问题是我无法检索某些电子邮件的邮件正文。以下是我如何执行此操作的代码:

$mail = new Zend_Mail_Storage_Imap($mail_options);

$all_messages = array();

$page = isset($_GET['page'])?$_GET['page']:1;
$limit = isset($_GET['limit'])?$_GET['limit']:20;

$offset = (($page-1)*$limit)+1;

$end = ($page*$limit)>$c?$c:($page*$limit);
for ($i=$offset;$i<=$end;$i++){

    $h2t = new html2text();
    $h2t->set_allowed_tags('<a>');

    if(!$mail[$i])
        break;
    else{
        $one_message = $mail->getMessage($i);
        $one_message->id = $i;
        $one_message->UID = $mail->getUniqueId($i);

        $one_message->parts = array();
        $one_message->body = '';
        $count = 1;
        foreach (new RecursiveIteratorIterator($mail->getMessage($i)) as $ii=>$part) {

            try {
                $tpart = $part;
                //$tpart->_content = '';
                $one_message->parts[$count] =  $tpart;
                $count++;
                // check for html body
                if (strtok($part->contentType, ';') == 'text/html') {
                    $b = $part->getContent();

                    if($part->contentTransferEncoding == 'quoted-printable')
                        $b = quoted_printable_decode($b);

                    $one_message->html_body = $b;
                    $h2t->set_html($b);
                    $one_message->body = $h2t->get_text();
                }

                //check for text body

                if (strtok($part->contentType, ';') == 'text/plain') {
                    $b = $part->getContent();

                    if($part->contentTransferEncoding == 'quoted-printable')
                        $b = quoted_printable_decode($b);

                    $one_message->text_body = $b;

                    $one_message->body = $b;//$part->getContent();
                }

            } catch (Zend_Mail_Exception $e) {
                // ignore
            }

        }

        $all_messages[] = $one_message;

    }
}

问题是随机某些消息甚至不返回文本正文或 html 正文。即使我使用 webvmail 客户端检查这些电子邮件也有消息正文。我在这里缺少什么?


您需要先检查邮件是否是多部分消息,然后再循环各部分。如果它不是多部分的,那么身体将通过$mail->getContent()而不是一部分。基本示例:

if ($mail->isMultiPart()) {
     // Multipart messages handled here
     foreach() {
        // loop over parts
     }
} else {
     // Non multipart messages handled here

     // default text_body
     $one_message->text_body = $mail->getContent();

     if (strtok($msg->contentType, ';') == 'text/html') {
         // HTML email with no plain text alternative, set both values
         $one_message->body = $mail->getContent();
         $one_message->text_body = strip_tags($mail->getContent());
     }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Zend 框架无法从收件箱获取某些电子邮件的消息正文? 的相关文章

  • 点击 %40 变为 %2540

    当单击包含 符号的链接时 该网址给我 40 这就是我想要的 但是一旦我点击它 一秒钟后它就在我点击后变成了 2540 单击是在电子邮件内 然后定向到网站 其中 40 更改为 2540 我怎样才能让它停止变化 它现在得到这样的参数 email
  • if/else 简写来定义变量

    我很难理解 if else 的 php 简写是如何描述的here https stackoverflow com questions 20233207 php if shorthand and echo in one line possib
  • 禁用 WooCommerce 手动/编辑订单的电子邮件通知

    需要 WooCommerce 专业知识 我需要禁用手动创建的订单的电子邮件通知 我必须使用处理状态 由于处理订单状态的自定义挂钩 我无法创建自定义状态 理想情况下 手动订单页面中可以勾选一个复选框 勾选后 它将禁止在每种状态下向客户发送电子
  • 所有 PHP 相等比较都是对称的吗?

    Is a b总是等价于 b a 我认为在 JavaScript 中 由于强制转换 有一些奇怪的情况并非如此 I think ide https stackoverflow com questions 4752579 are all php
  • 更改 Woocommerce 中“我的帐户”页面上的标题

    我见过大量有关如何使用 WooCommerce 我的帐户仪表板重新排序 更改导航和页面的示例 但我一生都无法弄清楚如何更改每个部分的主要标题 我的帐户 订单 下载 地址等 我已经搜索过模板 但没有任何乐趣 我尝试使用条件 php 注释来回显
  • Symfony2:为什么请求传递到受 Symfony2 中 AppCache 影响的 Kernel.Terminate EventListener

    在我的 Symfony2 2 应用程序中 我使用 onKernelTerminate EventListener 以便我可以在渲染响应后进行一些 繁重 处理 以便用户收到更快的响应时间 在我的控制器中 我在请求上设置了一个属性 以便当事件侦
  • laravel - 使用请求类或输入类

    在宁静的控制器中 我应该使用哪个类来获取传递的变量 member gt email Input get email or member gt email Request get email 两种选择都适合我 但有什么区别 Input get
  • 媒体的 Google Cloud Storage 签名网址

    我已经建立了一个视频网站 为用户提供 m3u8 和关联的 ts 文件 我不希望媒体文件免费可用 所以我所做的是 当用户在网站上时 在 mysql 中使用他们的 IP 和令牌创建一个会话 当他们请求特定媒体子域 mp4 domain com
  • 未传递“client_reference_id”参数

    我使用 Stripe Checkout Stripe 版本 2016 07 06 我想通过参数 client reference id 恢复个性化数据 但在 JSON 中 当我有金额或电子邮件时 我找不到它 我是在测试环境中 你能帮我吗 先
  • 如何在HTML中的PHP中注释掉HTML和PHP?

    这是我想注释掉的一行代码 h1 class post title a href title a h1 一种流行的注释方法是分别注释 html 和 php 有一个更好的方法吗
  • 通过 URL 指定控制器类与为每个控制器编写一个脚本相比,有何优缺点?

    今年夏天我安装了两个不同的 PHP 系统 每个都使用两种不同的方法 方法 1 每个任务一个 PHP 文件 该方法需要一个PHP为每个主要任务创建文件 例如 我的上传脚本可以通过http www domain com upload php O
  • 如何将我的 init 函数中的代码集中到所有控制器中?

    public function init this gt view gt user Zend Auth getInstance gt getIdentity this gt view gt siteName Zend Registry ge
  • 访问sendBeacon发送的数据

    文档表明sendBeacon通过发送其数据HTTP POST request 但在 PHP 中 POST变量似乎是一个空数组 这是我的 JavaScript 代码 navigator sendBeacon beacon log php My
  • 如何在多次尝试后延迟登录尝试 (PHP)

    我正在开发一个用 PHP 构建的相当大的网站 该网站可能会有很多用户 我正在寻找一种方法来保护登录屏幕免受自动尝试的影响 我已经在注册表中添加了验证码检查 但还想进一步强化网站 据我所知 StackOverflow 上也有类似的问题 而且我
  • 如何纠正这个非法字符串偏移?

    我收到此错误 警告 第 32 行 home mysite public html wp content themes evento lib php extra class php 中的非法字符串偏移 type 我意识到文件中的这部分代码是错
  • PHP print_r() 中 _r 的含义是什么?

    我见过这个答案 https stackoverflow com questions 13103410 what does r suffix mean就这样 但我不确定它对于 PHP 是否相同 如果是 可重入的含义是什么 From PHP n
  • 如何在 phalcon 框架中同时连接多个数据库在模型类中同时使用两个而不仅仅是一个

    在我的代码中我有两个数据库ABC and XYZ 我想在同一模型中使用两个数据库 而不是 phalcon 中的解决方案是什么 如何为此实现多个数据库连接 one
  • 如何从 Laravel 执行存储过程

    我需要在表单提交数据后执行存储过程 我让存储过程按照我想要的方式工作 并且我的表单正常工作 我只是不知道从 laravel 5 执行 sp 的语句 它应该是这样的 执行 my stored procedure 但我似乎在网上找不到类似的东西
  • 反向引用在 PHP 中不起作用

    最近我一直在研究 更多的是在实践中说实话 正则表达式 我注意到他的力量 我提出的这个要求 link https stackoverflow com questions 30380397 take the text up to a speci
  • PHP递归遍历对象树[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐