当前位置: 首页 > 知识库问答 >
问题:

Php Imap获取电子邮件

杭泉
2023-03-14

我一直试图获取电子邮件正文与imap_fetchbody($stream,$msgno,$选项),但没有成功。

然后我尝试使用imap_fetchstructure($stream,$msgno),并使用各自的子类型手动解码每种类型,如:-

1. Alternative
2. Related
3. Mixed

对于前两个,我可以用这样的东西来解码

**1. Alternative**

if ($structure->subtype == 'ALTERNATIVE') {
    if (isset($structure->parts)) {
        $body2 = imap_fetchbody($stream, $email_id, 2);
        if ($body2 == null) {
            $body2 = imap_fetchbody($stream, $email_id, 1);
        }
        $body = quoted_printable_decode($body2);
    }
}

**2. Related**

if ($structure->subtype == 'RELATED') {
    if (isset($structure->parts)) {
        $parts = $structure->parts;
        $i = 0;
        $body2 = imap_fetchbody($stream, $email_id, 1.2);
        if ($body2 == null) {
            $body2 = imap_fetchbody($stream, $email_id, 1);
        }
        $body = quoted_printable_decode($body2);
        foreach ($parts as $part) {
            if ($parts[$i]) {
            }
            $i++;
            if (isset($parts[$i])) {
                if ($parts[$i]->ifid == 1) {
                    $id = $parts[$i]->id;
                    $imageid = substr($id, 1, -1);
                    $imageid = "cid:" . $imageid;
                    if ($parts[$i]->ifdparameters == 1) {
                        foreach ($parts[$i]->dparameters as $object) {
                            if (strtolower($object->attribute) == 'filename') {
                                $filename = $object->value;
                            }
                        }
                    }
                    if ($parts[$i]->ifparameters == 1) {
                        foreach ($parts[$i]->parameters as $object) {
                            if (strtolower($object->attribute) == 'name') {
                                $name = $object->value;
                            }
                        }
                    }
                    $body = str_replace($imageid, $filename, $body);
                }
            }
        }
    }
}

但说到混合,我要么不知道,要么我该怎么办,要么我在哪里犯错。

**3. mixed**

if ($structure->subtype == 'MIXED') {
    if (isset($structure->parts)) {
        $parts = $structure->parts;
            // subtype = ALTERNATIVE
            if ($parts[0]->subtype == 'ALTERNATIVE') {
                if (isset($structure->parts)) {                                                                          
                    $body2 = imap_fetchbody($stream, $email_id, 1.2);
                    if ($body2 == null) {
                        $body2 = imap_fetchbody($stream, $email_id, 1);
                    }
                    $body = quoted_printable_decode($body2);
                }
            }
            // subtype = RELATED
            if ($parts[0]->subtype == 'RELATED') {
                if (isset($parts[0]->parts)) {
                    $parts = $parts[0]->parts;
                    $i = 0;
                    $body2 = imap_fetchbody($stream, $email_id, 1.1);
                    if ($body2 == null) {
                        $body2 = imap_fetchbody($stream, $email_id, 1);
                    }
                    $body = quoted_printable_decode($body2);
                    $name = "";
                    foreach ($parts as $part) {
                        if ($parts[0]) {
                        }
                        $i++;
                        if (isset($parts[$i])) {
                            if ($parts[$i]->ifid == 1) {
                                $id = $parts[$i]->id;
                                $imageid = substr($id, 1, -1);
                                $imageid = "cid:" . $imageid;
                                if ($parts[$i]->ifdparameters == 1) {
                                    foreach ($parts[$i]->dparameters as $object) {
                                        if (strtolower($object->attribute) == 'filename') {
                                            $filename = $object->value;
                                        }
                                    }
                                }
                                if ($parts[$i]->ifparameters == 1) {
                                    foreach ($parts[$i]->parameters as $object) {
                                        if (strtolower($object->attribute) == 'name') {                                                                                  
                                             $name = $object->value;
                                        }
                                    }
                                }
                            }
                            $body = str_replace($imageid, $name, $body);
                        }
                    }
                }
            }
        }
    }

共有1个答案

萧业
2023-03-14

你忘了亚型平原。你也必须解码它

if ($parts[0]->subtype == 'PLAIN') {
            if (isset($structure->parts)) {                                        
                    $message2 = imap_fetchbody($stream, $email_id, 1);
                    $message = quoted_printable_decode(base64_decode($message2));
            }
    }
 类似资料:
  • 在上一章中,我们学习了如何查看电子邮件。 现在让我们看看如何获​​取每封电子邮件并阅读其内容。 让我们编写一个Java类FetchingEmail ,它将读取以下类型的电子邮件: 简单邮件 电子邮件附件 使用内联图片发送电子邮件 代码中遵循的基本步骤如下: 获取Session对象。 创建POP3商店对象并连接到商店。 创建文件夹对象并在邮箱中打开相应的文件夹。 检索邮件。 分别关闭文件夹和存储对象

  • 我正在尝试从GitHub获取一个用户的电子邮件地址,我只是在使用Postman测试过程。我有一个令牌,它有user和user:email作用域,点击https://api.github.com/user可以得到用户的信息。私人电子邮件在该endpoint不可见,所以我也点击https://api.github.com/user/emails。电子邮件endpoint给了我一个404。 与404一起

  • 我在我的系统中使用谷歌广告API PHP库。但是我没有在这里提供的API列表中找到以下2个APIhttps://developers.google.com/google-ads/api/docs/account-management/create-account: API,以查明用户是否已经存在使用电子邮件的谷歌广告帐户?如果找到,则返回其10位数的客户ID。 我在几个网站上见过同样的过程。每当用

  • 问题内容: 我正在为我的Firebase应用程序构建一个管理面板,希望可以更轻松地管理用户。我希望能够通过电子邮件查找用户,然后在必要时将其删除。我了解,如果注册了用户以及他们向其注册了哪个提供程序,则fetchSignInMethods将返回一个值,但是仍然可以查询Authentication树(而非数据库树)以通过电子邮件搜索用户吗?能够从Authentication节点获取与电子邮件相关联的

  • 我只想从Microsoft Graph/Outlook endpoint获取属于电子邮件的特定类别。但是is给了我相关电子邮件中的所有类别。 [https://graph.microsoft.com/beta/me/outlook/masterCategories/?过滤器=displayName eq'红色类别'] 上面的链接是我对微软图形应用编程接口的查询,我得到以下结果

  • 我试图了解Gmail API的工作原理。我的目标是在用户的收件箱中检索所有电子邮件的列表,并将其下载到。 目前的工作流程如下: > 使用Google提供的框架用OAuth 2.0授权我的iOS应用,我已经完成了这一步,我的应用可以成功授权一个gmail帐户。 下载电子邮件: 从文档来看,这似乎是显示消息列表的API调用: 去找https://www.googleapis.com/gmail/v1/