猿问

php 计算一封电子邮件中的附件数量

我正在使用我的 PHP 来计算我在一封电子邮件中收到的附件数量的价值。


当我尝试这个时:


echo count($structure->parts);

输出将显示如下:


3

我在一封电子邮件中有 2 个附件,因此输出返回不正确。所以当我尝试这个时:


for($i = 0; $i < count($structure->parts); $i++) {

    echo $i;

}

输出返回如下:


012

这是完整的代码:


<?php


require_once "Mail.php";

require_once('Mail/IMAPv2.php');


$username = 'myusername';

$password = 'mypassword';

$mailserver = '{imap.domain.com:993/imap/ssl/novalidate-cert}INBOX';

$mailbox = imap_open($mailserver, $username, $password) or die("Can't connect: " . imap_last_error());

$key = "mykey";

$email_number = openssl_decrypt(hex2bin('274'),'AES-128-CBC', $key);

$attach_id = $_GET['attid'];


/* get information specific to this email */

$overview = imap_fetch_overview($mailbox, $email_number, 0);


$message = imap_fetchbody($mailbox, $email_number, 2);


/* get mail structure */

$structure = imap_fetchstructure($mailbox, $email_number);

$attachments = array();



for($i = 0; $i < count($structure->parts); $i++) {

    echo $i;

}

?>

我在一封电子邮件中有 2 个附件,因此返回输出应显示 2 不显示3或012仍显示 3。我试图在谷歌上找到答案,如何使用 imap 计算单个电子邮件中附件的值,但我我无法这样做。


你能告诉我一个例子,我如何计算我在一封电子邮件中收到的附件数量吗?


沧海一幻觉
浏览 142回答 1
1回答

芜湖不芜

请仔细看看内容$structure->parts。您有一个由 3 个部分组成的数组,其中最后两个包含以下属性:[ifdisposition] => 1&nbsp;[disposition] => attachment由于第一部分包含[ifdisposition] => 0并且该[disposition]属性不存在,我们可以推断这ifdisposition是一个布尔值,它告诉您是否disposition可用。我们可以通过检查PHP 文档imap_fetchstructure()来验证这一点。要查找所有附件,您应该遍历各个部分并匹配 whereifdisposition === true和 的所有情况disposition === 'attachment'。如果您想快速提取所有这些,您可以执行以下操作:$attachments = array_filter($structure->parts, function($part) {&nbsp; &nbsp; return $part->ifdisposition && $part->disposition === 'attachment';});
随时随地看视频慕课网APP
我要回答