【发布时间】:2016-03-02 17:01:01
【问题描述】:
我正在尝试开发一个基于 Gmail API 的 PHP 脚本,该脚本可以在特定时间暂停我的邮件,即在特定日期时间存档和取消存档邮件。
一切都准备就绪并且工作正常,但有一个细节,即我无法保留原始邮件的“发件人”标头。更具体地说:
- 通过 CRON 作业在特定时间检索要暂停的消息的 ID;
- 使用消息 ID,检索并克隆原始格式的消息;
- 删除原始邮件并发送(和接收)克隆邮件 => 这可确保电子邮件显示在收件箱顶部。
问题:克隆的电子邮件是原始电子邮件的完美副本,但“发件人”标头显示经过身份验证的用户的电子邮件地址,即我自己 (username@gmail.com)。
//[...] 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) {}
}
【问题讨论】: