标记为已读邮件方法

时间:2014-10-22 15:07:19

标签: gmail-api

如何使用Gmail API将邮件标记为已读?

我收到了电子邮件的主题

Thread thread = service.users().threads().get(userId, message.getThreadId()).execute();

但它没有方法 markRead ,就像gmail API网站所说的那样。

7 个答案:

答案 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语言,有人可能需要它。

  
      
  1. 首先,您可以像下面的示例一样列出所有标签。   有关更多信息,请检查here
  2.   
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());
        }
      }
  
      
  1. 修改与每条消息相关联的必需标签,如下所示:有关该消息的更多信息,here
  2.   
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()

希望有帮助!