gpt4 book ai didi

php - 检索单个/多个附件 Gmail API PHP

转载 作者:行者123 更新时间:2023-12-01 13:47:35 24 4
gpt4 key购买 nike

我正在尝试使用 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();
}

}


最佳答案

上面@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;
}

在上面的示例中,$this->service 是经过身份验证的 Google_Service_Gmail() 实例(与问题中的相同)。上面的方法在你的类中被调用为:

$attachments = $this->getAttachments($message->id, $message->getPayload()->parts);

这会为您获取数组中的文件名、mime 类型和 base64 编码数据。

关于php - 检索单个/多个附件 Gmail API PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34754291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com