我正在使用Gmail API在我的PHP应用程序中列出未读邮件。我有很多需要学习的东西,并且正在拼凑我在这里发现的不同代码。一切正常,但它并没有完全按照我的方式展示。我的代码返回:
["
FedEx Shipment Notification
Mar 27th 2017 04:26 PM
TrackingUpdates@fedex.com","
Wellness 2 - Sp17: Re: Mike's fault!
Mar 26th 2017 06:13 PM
JohnSmith@mail.com "]
如何更改代码以仅返回:
FedEx Shipment Notification
Mar 27th 2017 04:26 PM
TrackingUpdates@fedex.com
Wellness 2 - Sp17: Re: Mike's fault!
Mar 26th 2017 06:13 PM
JohnSmith@mail.com
...电子邮件之间没有多余的引号,方括号和逗号?我知道我缺少一些基本知识。
我试过
substr($inboxMessage, 2)
...在list_messages函数中作为摆脱第一个引号和方括号的起点,但我得到了错误“substr()期望参数1为字符串,数组给出”
我也试过
$inboxMessages = array();
而不是
$inboxMessages = []
...但是只返回了一封电子邮件,它仍然在引号和括号中。
我也尝试在get_content函数中添加一个json_decode:
$this->content->items[] = json_decode($getmail->obtain_gmail_feed());
...产生错误“1082行/var/www/moodle/lib/outputcomponents.php中的数组到字符串转换”
我不知道还有什么可以尝试,我非常感谢你的帮助。
这是lib.php中的代码:
class get_gmail {
function getHeader($headers, $name) {
foreach($headers as $header) {
if($header['name'] == $name) {
return $header['value'];
}
}
}
function listMessages($service, $userId) {
$list = $service->users_messages->listUsersMessages('me',
['maxResults' => 2, 'q' => 'in:inbox is:unread']);
$messageList = $list->getMessages();
$inboxMessage = [];
foreach($messageList as $mlist){
$optParamsGet2['format'] = 'full';
$single_message = $service->users_messages->get('me',$mlist->id,
$optParamsGet2);
$message_id = $mlist->id;
$headers = $single_message->getPayload()->getHeaders();
foreach($headers as $single) {
if ($single->getName() == 'Subject') {
$message_subject = '<p>'.$single->getValue().'<br />';
}
else if ($single->getName() == 'Date') {
$message_date = $single->getValue();
$message_date = date('M jS Y h:i A',
strtotime($message_date)).'<br />';
}
else if ($single->getName() == 'From') {
$message_sender = $single->getValue();
$message_sender = str_replace('"', '', $message_sender);
}
}
$inboxMessage[] =$message_subject.$message_date.$message_sender;
}
return $inboxMessage;
}
}
public function obtain_gmail_feed() {
global $CFG, $USER, $message_list;
require_once($CFG->libdir . '/google/lib.php');
session_start();
$client = new Google_Client();
$client->setAuthConfigFile($CFG-
>wwwroot.'/blocks/sko_gmail/client_secret.json');
$client->addScope(Google_Service_Gmail::MAIL_GOOGLE_COM);
$client->setAccessToken($_SESSION['access_token']);
$gmail_service = new Google_Service_Gmail($client);
$useremail = 'me';
$message_list = $this->listMessages($gmail_service, $useremail);
$message_list = json_encode($message_list);
return $message_list;
}
然后在index.php中:
require_once($CFG->dirroot . '/blocks/sko_gmail/lib.php');
class block_sko_gmail extends block_list {
public function get_content() {
global $message_list;
$this->content = new stdClass;
$getmail = new get_gmail();
$this->content->items = array();
$this->content->items[] = $getmail->obtain_gmail_feed();
return $this->content;
}
}
我也欢迎任何关于如何改进我的代码的建议。