如何使用Gmail API将邮件标记为已读?
我收到了电子邮件的主题
Thread thread = service.users().threads().get(userId, message.getThreadId()).execute();
但它没有方法 markRead ,就像gmail API网站所说的那样。
答案 0 :(得分:9)
使用threads.modify()或messages.modify()(取决于你想要做的范围)和removeLabelId of" UNREAD"。
https://developers.google.com/gmail/api/v1/reference/users/threads/modify
答案 1 :(得分:4)
当我到达这里寻找C#的答案时,这是我的经验答案:
var gs = new GmailService(
new BaseClientService.Initializer()
{
ApplicationName = gmailApplicationName,
HttpClientInitializer = credential
}
);
var markAsReadRequest = new ModifyThreadRequest {RemoveLabelIds = new[] {"UNREAD"}};
await gs.Users.Threads.Modify(markAsReadRequest, "me", unreadMessage.ThreadId)
.ExecuteAsync();
努力享受。
答案 2 :(得分:4)
在nodejs示例中:
var google = require('googleapis');
var gmail = google.gmail('v1');
var oauth2Client = new auth.OAuth2(clientId, clientSecret, redirectUrl);
oauth2Client.credentials = JSON.parse(token);
google.options({ auth: oauth2Client }); // set auth as a global default
gmail.users.messages.modify({
'userId':'me',
'id':emailId,
'resource': {
'addLabelIds':[],
'removeLabelIds': ['UNREAD']
}
}, function(err) {
if (err) {
error('Failed to mark email as read! Error: '+err);
return;
}
log('Successfully marked email as read', emailId);
});
答案 3 :(得分:0)
在ios swift示例中
class func markAsReadMessage(messageId: String) {
let appd = UIApplication.sharedApplication().delegate as! AppDelegate
println("marking mail as read \(messageId)")
let query = GTLQueryGmail.queryForUsersMessagesModify()
query.identifier = messageId
query.removeLabelIds = ["UNREAD"]
appd.service.executeQuery(query, completionHandler: { (ticket, response, error) -> Void in
println("ticket \(ticket)")
println("response \(response)")
println("error \(error)")
})
}
答案 4 :(得分:0)
实现这一目标有两个步骤。我使用此处提供的Gmail客户端库,特别是示例文件夹get_token.php和user-gmail.php: PHP Gmail Client Library
我还使用了修改功能,可在此处获得: Gmail API Modify Message Page
首先,您必须指定您希望拥有修改权限。在示例中,它们仅显示只读范围,但您可以在数组中添加其他范围。
$client->addScope(implode(' ', array(Google_Service_Gmail::GMAIL_READONLY, Google_Service_Gmail::GMAIL_MODIFY)));
我想保留相同的标签,并将邮件标记为已读。所以对于一条消息:
$arrLabels = $single_message->labelIds;
foreach($arrLabels as $label_index=>$label) {
if ($label=="UNREAD") {
unset($arrLabels[$label_index]);
}
}
现在您可以发送修改请求,邮件将从Gmail帐户的UNREAD列表中删除。
modifyMessage($service, "me", $mlist->id, $arrLabels, array("UNREAD"));
其中“me”是user_id。
答案 5 :(得分:0)
这是Java语言,有人可能需要它。
- 首先,您可以像下面的示例一样列出所有标签。 有关更多信息,请检查here
public void listLabels(final Gmail service, final String userId) throws IOException {
ListLabelsResponse response = service.users().labels().list(userId).execute();
List<Label> labels = response.getLabels();
for (Label label : labels) {
System.out.println("Label: " + label.toPrettyString());
}
}
- 修改与每条消息相关联的必需标签,如下所示:有关该消息的更多信息,here
public void markAsRead(final Gmail service, final String userId, final String messageId) throws IOException {
ModifyMessageRequest mods =
new ModifyMessageRequest()
.setAddLabelIds(Collections.singletonList("INBOX"))
.setRemoveLabelIds(Collections.singletonList("UNREAD"));
Message message = null;
if(Objects.nonNull(messageId)) {
message = service.users().messages().modify(userId, messageId, mods).execute();
System.out.println("Message id marked as read: " + message.getId());
}
}
答案 6 :(得分:0)
如果有人使用Golang API偶然发现了这一点。这是您的操作方法:
msg, err := gmail.Users.Messages.Modify("me", msg.Id, &gmail.ModifyMessageRequest{
RemoveLabelIds: []string{"UNREAD"},
}).Do()
希望有帮助!