jus*_*are 3 php api gmail gmail-api
我正在尝试使用 Gmail API PHP 获取邮箱中所有附件的列表。我在某个时候卡住了,但我真的不知道在哪里。这是我用来获取消息内容的代码,当我尝试获取附件时,它以某种方式失败了。
我想获取与我的“q”查询对应的所有消息的文件名和附件 ID。这是我的代码:
function atta($service, $userId, $expeditor)
{
try
{
unset($optParamsamz);
$optParamsamz = [];
$optParamsamz['maxResults'] = 10; // Return Only 5 Messages
$optParamsamz['q'] = "has:attachment larger_than:10000000 "; // Only show messages in Inbox
$messagesamz = $service->users_messages->listUsersMessages('me',$optParamsamz);
$listamz = $messagesamz->getMessages();
$idlist = array();
foreach ($listamz as $key => $value) {
$message = $service->users_messages->get('me', $value['id']);
$array_message = $message->getPayload();
print_r($array_message);
echo "<br><br>";
}
}
catch (Exception $e)
{
print 'An error occurred: ' . $e->getMessage();
}
}
Run Code Online (Sandbox Code Playgroud)
上面@trajchevska 的回答很有帮助,但不幸的是,迭代有效载荷部分不会捕获一些附件,例如消息正文中的图像,这些附件是部分中的部分。要获得这些,您需要递归地遍历各个部分。我是这样做的:
function getAttachments($message_id, $parts) {
$attachments = [];
foreach ($parts as $part) {
if (!empty($part->body->attachmentId)) {
$attachment = $this->service->users_messages_attachments->get('me', $message_id, $part->body->attachmentId);
$attachments[] = [
'filename' => $part->filename,
'mimeType' => $part->mimeType,
'data' => strtr($attachment->data, '-_', '+/')
];
} else if (!empty($part->parts)) {
$attachments = array_merge($attachments, $this->getAttachments($message_id, $part->parts));
}
}
return $attachments;
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,$this->service是一个经过身份验证的Google_Service_Gmail()实例(与问题中相同)。上述方法在您的类中被调用为:
$attachments = $this->getAttachments($message->id, $message->getPayload()->parts);
Run Code Online (Sandbox Code Playgroud)
这将为您提供数组中的文件名、mime 类型和 base64 编码数据。
| 归档时间: |
|
| 查看次数: |
4425 次 |
| 最近记录: |