Class: Gmail::Message
- Inherits:
-
Object
- Object
- Gmail::Message
- Defined in:
- lib/gmail/message.rb
Defined Under Namespace
Classes: NoLabelError
Constant Summary collapse
- PREFETCH_ATTRS =
["UID", "ENVELOPE", "BODY.PEEK[]", "FLAGS", "X-GM-LABELS", "X-GM-MSGID", "X-GM-THRID"].freeze
Instance Method Summary collapse
-
#add_label(name) ⇒ Object
(also: #label, #label!, #add_label!)
Use Gmail IMAP Extensions to add a Label to an email.
-
#archive! ⇒ Object
Archiving is done by adding the ‘All Mail` label.
- #as_json ⇒ Object
-
#delete! ⇒ Object
Deleting is done by adding the ‘Trash` label.
- #envelope ⇒ Object
-
#flag(name) ⇒ Object
Mark message with given flag.
- #flags ⇒ Object
-
#initialize(mailbox, uid, _attrs = nil) ⇒ Message
constructor
A new instance of Message.
- #inspect ⇒ Object
- #labels ⇒ Object
-
#mark(flag) ⇒ Object
Do commonly used operations on message.
- #message ⇒ Object (also: #raw_message)
- #method_missing(meth, *args, &block) ⇒ Object
- #move_to(name, from = nil) ⇒ Object (also: #move, #move!, #move_to!)
- #msg_id ⇒ Object (also: #message_id)
-
#read! ⇒ Object
Mark as read.
-
#read? ⇒ Boolean
Check whether message is read.
-
#remove_label(name) ⇒ Object
(also: #remove_label!)
Use Gmail IMAP Extensions to remove a Label from an email.
- #respond_to?(meth, *args, &block) ⇒ Boolean
- #respond_to_missing?(meth, include_private = false) ⇒ Boolean
-
#spam! ⇒ Object
Marking as spam is done by adding the ‘Spam` label.
-
#star! ⇒ Object
Mark message with star.
-
#starred? ⇒ Boolean
Check whether message is starred.
- #thr_id ⇒ Object (also: #thread_id)
- #uid ⇒ Object
- #unarchive! ⇒ Object (also: #unspam!, #undelete!)
-
#unflag(name) ⇒ Object
Unmark message.
-
#unread! ⇒ Object
Mark as unread.
-
#unstar! ⇒ Object
Remove message from list of starred.
Constructor Details
#initialize(mailbox, uid, _attrs = nil) ⇒ Message
Returns a new instance of Message.
8 9 10 11 12 13 |
# File 'lib/gmail/message.rb', line 8 def initialize(mailbox, uid, _attrs = nil) @uid = uid @mailbox = mailbox @gmail = mailbox.instance_variable_get("@gmail") if mailbox # UGLY @_attrs = _attrs end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(meth, *args, &block) ⇒ Object
171 172 173 174 175 176 177 178 179 180 |
# File 'lib/gmail/message.rb', line 171 def method_missing(meth, *args, &block) # Delegate rest directly to the message. if envelope.respond_to?(meth) envelope.send(meth, *args, &block) elsif .respond_to?(meth) .send(meth, *args, &block) else super end end |
Instance Method Details
#add_label(name) ⇒ Object Also known as: label, label!, add_label!
Use Gmail IMAP Extensions to add a Label to an email
144 145 146 147 148 149 |
# File 'lib/gmail/message.rb', line 144 def add_label(name) @gmail.mailbox(@mailbox.name) do @gmail.conn.uid_store(uid, "+X-GM-LABELS", [Net::IMAP.encode_utf7(name.to_s)]) clear_cached_attributes end end |
#archive! ⇒ Object
Archiving is done by adding the ‘All Mail` label. To undo this, you just re-apply the `Inbox` label (see `#unarchive!`)
IMAP’s fetch(‘1:100’, (X-GM-LABELS)) function does not fetch inbox, just emails labeled important? stackoverflow.com/a/28973760 In my testing the currently selected mailbox is always excluded from the X-GM-LABELS results. When you called conn.select() it implicitly selected ‘INBOX’, therefore excluding ‘Inbox’ from the list of labels. If you selected a different mailbox then you would see ‘\\Inbox’ in your results:
125 126 127 |
# File 'lib/gmail/message.rb', line 125 def archive! @gmail.find(.).remove_label('\Inbox') end |
#as_json ⇒ Object
167 168 169 |
# File 'lib/gmail/message.rb', line 167 def as_json super(except: ["gmail"]) end |
#delete! ⇒ Object
Deleting is done by adding the ‘Trash` label. To undo this, you just re-apply the `Inbox` label (see `#undelete!`)
112 113 114 |
# File 'lib/gmail/message.rb', line 112 def delete! add_label("\\Trash") end |
#envelope ⇒ Object
29 30 31 |
# File 'lib/gmail/message.rb', line 29 def envelope @envelope ||= fetch("ENVELOPE") end |
#flag(name) ⇒ Object
Mark message with given flag.
47 48 49 50 51 52 |
# File 'lib/gmail/message.rb', line 47 def flag(name) !!@gmail.mailbox(@mailbox.name) do @gmail.conn.uid_store(uid, "+FLAGS", [name]) clear_cached_attributes end end |
#flags ⇒ Object
38 39 40 |
# File 'lib/gmail/message.rb', line 38 def flags @flags ||= fetch("FLAGS") end |
#inspect ⇒ Object
163 164 165 |
# File 'lib/gmail/message.rb', line 163 def inspect "#<Gmail::Message#{'0x%04x' % (object_id << 1)} mailbox=#{@mailbox.name}#{' uid=' + @uid.to_s if @uid}#{' message_id=' + @msg_id.to_s if @msg_id}>" end |
#labels ⇒ Object
42 43 44 |
# File 'lib/gmail/message.rb', line 42 def labels @labels ||= fetch("X-GM-LABELS") end |
#mark(flag) ⇒ Object
Do commonly used operations on message.
63 64 65 66 67 68 69 70 71 72 |
# File 'lib/gmail/message.rb', line 63 def mark(flag) case flag when :read then read! when :unread then unread! when :deleted then delete! when :spam then spam! else flag(flag) end end |
#message ⇒ Object Also known as: raw_message
33 34 35 |
# File 'lib/gmail/message.rb', line 33 def @message ||= Mail.new(fetch("BODY[]")) end |
#move_to(name, from = nil) ⇒ Object Also known as: move, move!, move_to!
135 136 137 138 |
# File 'lib/gmail/message.rb', line 135 def move_to(name, from = nil) add_label(name) @gmail.find(.).remove_label(from) if from end |
#msg_id ⇒ Object Also known as: message_id
19 20 21 |
# File 'lib/gmail/message.rb', line 19 def msg_id @msg_id ||= fetch("X-GM-MSGID") end |
#read! ⇒ Object
Mark as read.
80 81 82 |
# File 'lib/gmail/message.rb', line 80 def read! flag(:Seen) end |
#read? ⇒ Boolean
Check whether message is read
75 76 77 |
# File 'lib/gmail/message.rb', line 75 def read? flags.include?(:Seen) end |
#remove_label(name) ⇒ Object Also known as: remove_label!
Use Gmail IMAP Extensions to remove a Label from an email
155 156 157 158 159 160 |
# File 'lib/gmail/message.rb', line 155 def remove_label(name) @gmail.mailbox(@mailbox.name) do @gmail.conn.uid_store(uid, "-X-GM-LABELS", [Net::IMAP.encode_utf7(name.to_s)]) clear_cached_attributes end end |
#respond_to?(meth, *args, &block) ⇒ Boolean
182 183 184 185 |
# File 'lib/gmail/message.rb', line 182 def respond_to?(meth, *args, &block) return true if envelope.respond_to?(meth) || .respond_to?(meth) super(meth, *args, &block) end |
#respond_to_missing?(meth, include_private = false) ⇒ Boolean
187 188 189 |
# File 'lib/gmail/message.rb', line 187 def respond_to_missing?(meth, include_private = false) envelope.respond_to?(meth) || .respond_to?(meth) || super end |
#spam! ⇒ Object
Marking as spam is done by adding the ‘Spam` label. To undo this, you just re-apply the `Inbox` label (see `#unspam!`)
106 107 108 |
# File 'lib/gmail/message.rb', line 106 def spam! add_label("\\Spam") end |
#star! ⇒ Object
Mark message with star.
95 96 97 |
# File 'lib/gmail/message.rb', line 95 def star! flag(:Flagged) end |
#starred? ⇒ Boolean
Check whether message is starred
90 91 92 |
# File 'lib/gmail/message.rb', line 90 def starred? flags.include?(:Flagged) end |
#thr_id ⇒ Object Also known as: thread_id
24 25 26 |
# File 'lib/gmail/message.rb', line 24 def thr_id @thr_id ||= fetch("X-GM-THRID") end |
#uid ⇒ Object
15 16 17 |
# File 'lib/gmail/message.rb', line 15 def uid @uid ||= fetch("UID") end |
#unarchive! ⇒ Object Also known as: unspam!, undelete!
129 130 131 |
# File 'lib/gmail/message.rb', line 129 def unarchive! @gmail.find(.).add_label('\Inbox') end |
#unflag(name) ⇒ Object
Unmark message.
55 56 57 58 59 60 |
# File 'lib/gmail/message.rb', line 55 def unflag(name) !!@gmail.mailbox(@mailbox.name) do @gmail.conn.uid_store(uid, "-FLAGS", [name]) clear_cached_attributes end end |
#unread! ⇒ Object
Mark as unread.
85 86 87 |
# File 'lib/gmail/message.rb', line 85 def unread! unflag(:Seen) end |
#unstar! ⇒ Object
Remove message from list of starred.
100 101 102 |
# File 'lib/gmail/message.rb', line 100 def unstar! unflag(:Flagged) end |