0

gmail-xoauth Gem を使用して GMail からメールを読み取ろうとしています。メールを読んで未読のままにしたい。

まずはヘッダーだけ読んでみました。動作します。

imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = nil, verify = false)
imap.authenticate('XOAUTH2', email, access_token)
imap.select('INBOX')
imap.search(["SINCE", since]).each do |message_id|

    msg = imap.fetch(message_id,'RFC822.HEADER')[0].attr['RFC822.HEADER']
    mail = Mail.read_from_string msg
    puts mail.subject
end

ここで、既読のマークを付けずにメールの本文/テキストを読みたいと思います。

4

2 に答える 2

2

ドキュメントに基づいて、メソッドを使用する必要がありますstore。ドキュメントには次のことが記載されています。

ストア (セット、属性、フラグ)

STORE コマンドを送信して、メールボックス内のメッセージに関連付けられたデータ、特にそのフラグを変更します。set パラメータは、数値、数値の配列、または Range オブジェクトです。各番号はメッセージ シーケンス番号です。attr は、格納するデータ項目の名前です。'FLAGS' は、メッセージのフラグ リストを提供されたものに置き換えることを意味します。「+FLAGS」は、提供されたフラグを追加することを意味します。「-FLAGS」はそれらを削除することを意味します。flags はフラグのリストです。

戻り値は、Net::IMAP::FetchData の配列です。例えば:

p imap.store(6..8, "+FLAGS", [:Deleted])
#=> [#<Net::IMAP::FetchData seqno=6, attr={"FLAGS"=>[:Seen, :Deleted]}>, \\
#<Net::IMAP::FetchData seqno=7, attr={"FLAGS"=>[:Seen, :Deleted]}>, \\
#<Net::IMAP::FetchData seqno=8, attr={"FLAGS"=>[:Seen, :Deleted]}>]

だから、:Seenフラグを削除する必要があります

imap.store(message_id, "-FLAGS", [:Seen])
于 2013-05-13T07:39:48.360 に答える
2

これは非常に遅いかもしれませんが、これに出くわした他の人のためにここに残しておきます. なんらかの理由でメールを読み、フラグの摂取を残したい場合は、次を使用します。

imap.examine('INBOX')

それ以外の:

imap.select('INBOX')

Net::IMAP ドキュメントから

EXAMINE コマンドを送信してメールボックスを選択し、メールボックス内のメッセージにアクセスできるようにします。選択されたメールボックスが読み取り専用として識別されることを除いて、select() と同じように動作します。

于 2013-08-01T14:56:15.337 に答える