我正在尝试开发一个基于Gmail API的PHP脚本,该脚本可以在特定时间暂停我的消息,即在特定日期时间存档和取消存档消息。
一切都到位并且工作但细节,即我无法保留原始邮件的“发件人”标题。更具体地说:
问题:克隆的电子邮件是原始邮件的完美副本,但“From”标题显示经过身份验证的用户的电子邮件地址,即我自己(username@gmail.com)。< / p>
//[...] object $this->message
private function cloneMail() {
// GET RAW message
$this->message->raw = $this->gmail->users_messages->get(
$this->message->user,
$this->message->id,
array('format'=>'raw')
);
try {
// INSERT original message
$inserted = $this->gmail->users_messages->delete(
$this->message->user,
$this->message->id
);
// ONCE DELETED, SEND CLONED EMAIL
if ($deleted->getId()) {
try {
$this->gmail->users_messages->send(
$this->message->user,
$this->message->raw
);
} catch (Exception $e) {
// -- Fallback...
}
}
} catch(Exception $e) {}
}
[已更新] 使用messages.insert()
private function cloneMail() {
// GET RAW message
$this->message->raw = $this->gmail->users_messages->get(
$this->message->user,
$this->message->id,
array('format'=>'raw')
);
try {
// DELETE original message
$deleted = $this->gmail->users_messages->delete(
$this->message->user,
$this->message->id
);
// ONCE DELETED, SEND CLONED EMAIL
if ($deleted->getId()) {
try {
$this->gmail->users_messages->insert(
$this->message->user,
$this->message->raw
);
} catch (Exception $e) {
// -- Fallback...
}
}
} catch(Exception $e) {}
}
答案 0 :(得分:1)
messages.send()要求From:地址在经过身份验证的用户的控制之下。请改用messages.import()。
答案 1 :(得分:0)
我成功使用了import()并获得了线程支持。
我在为大型邮件进行多部分上传时遇到了一个重大问题,但是(我是如何登陆这篇文章的)
“code”:400, “message”:“预期单个'来自'标题”
虽然Import希望您使用raw(base64编码的消息),但Google_Http_MediaFileUpload()希望您使用ASCII版本,因此您必须解码原始消息并执行以下操作:
$ret = $service->users_messages->import( $user, $newMessage, array( 'internalDateSource' => "dateHeader", 'uploadType'=>"multipart" ) );
$media = new Google_Http_MediaFileUpload( $client, $ret, 'message/rfc822', $textMessage, true, $chunkSize );
$media->setFileSize( strlen( $rawMessage ) );
// upload
$status = false;
while( $status == false ) {
try {
$status = $media->nextChunk();
} catch( Exception $e ) {
echo "An error occurred: {$e->getMessage()} \n";
exit();
}
}
$ newMessage包含所有元数据,包括标签等,但没有实际数据。
感谢{{3}}
我确实认为只要使用import(),我们就可以使用它更好,因为它可以节省API调用。