gmail 0.4.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +13 -0
  4. data/.rubocop_todo.yml +239 -0
  5. data/.travis.yml +19 -0
  6. data/CHANGELOG.md +75 -18
  7. data/Gemfile +1 -1
  8. data/README.md +214 -131
  9. data/Rakefile +11 -0
  10. data/gmail.gemspec +8 -8
  11. data/lib/gmail.rb +31 -18
  12. data/lib/gmail/client.rb +11 -7
  13. data/lib/gmail/client/base.rb +52 -48
  14. data/lib/gmail/client/plain.rb +9 -5
  15. data/lib/gmail/client/xoauth.rb +23 -6
  16. data/lib/gmail/client/xoauth2.rb +39 -0
  17. data/lib/gmail/imap_extensions.rb +150 -0
  18. data/lib/gmail/labels.rb +33 -16
  19. data/lib/gmail/mailbox.rb +60 -42
  20. data/lib/gmail/message.rb +142 -101
  21. data/lib/gmail/version.rb +2 -2
  22. data/spec/account.yml.obfus +2 -0
  23. data/spec/gmail/client/base_spec.rb +5 -0
  24. data/spec/gmail/client/plain_spec.rb +168 -0
  25. data/spec/gmail/client/xoauth2_spec.rb +186 -0
  26. data/spec/gmail/client/xoauth_spec.rb +5 -0
  27. data/spec/gmail/client_spec.rb +5 -0
  28. data/spec/gmail/imap_extensions_spec.rb +12 -0
  29. data/spec/gmail/labels_spec.rb +18 -0
  30. data/spec/{mailbox_spec.rb → gmail/mailbox_spec.rb} +14 -14
  31. data/spec/gmail/message_spec.rb +181 -0
  32. data/spec/gmail_spec.rb +21 -21
  33. data/spec/recordings/gmail/_new_connects_with_client_and_give_it_context_when_block_given.yml +28 -0
  34. data/spec/recordings/gmail/_new_connects_with_gmail_service_and_return_valid_connection_object.yml +28 -0
  35. data/spec/recordings/gmail/_new_does_not_raise_error_when_couldn_t_connect_with_given_account.yml +13 -0
  36. data/spec/recordings/gmail/_new_raises_error_when_couldn_t_connect_with_given_account.yml +13 -0
  37. data/spec/recordings/gmail_client_plain/instance/_connection_automatically_logs_in_to_gmail_account_when_it_s_called.yml +42 -0
  38. data/spec/recordings/gmail_client_plain/instance/delivers_inline_composed_email.yml +42 -0
  39. data/spec/recordings/gmail_client_plain/instance/does_not_log_in_when_given_gmail_account_is_invalid.yml +13 -0
  40. data/spec/recordings/gmail_client_plain/instance/does_not_raise_error_even_though_gmail_account_is_invalid.yml +13 -0
  41. data/spec/recordings/gmail_client_plain/instance/labels/checks_if_there_is_given_label_defined.yml +196 -0
  42. data/spec/recordings/gmail_client_plain/instance/labels/creates_given_label.yml +151 -0
  43. data/spec/recordings/gmail_client_plain/instance/labels/removes_existing_label.yml +146 -0
  44. data/spec/recordings/gmail_client_plain/instance/labels/returns_list_of_all_available_labels.yml +113 -0
  45. data/spec/recordings/gmail_client_plain/instance/properly_logs_in_to_valid_gmail_account.yml +42 -0
  46. data/spec/recordings/gmail_client_plain/instance/properly_logs_out_from_gmail.yml +42 -0
  47. data/spec/recordings/gmail_client_plain/instance/properly_switches_to_given_mailbox.yml +109 -0
  48. data/spec/recordings/gmail_client_plain/instance/properly_switches_to_given_mailbox_using_block_style.yml +109 -0
  49. data/spec/recordings/gmail_client_plain/instance/raises_error_when_given_gmail_account_is_invalid_and_errors_enabled.yml +13 -0
  50. data/spec/recordings/gmail_client_xo_auth2/instance/does_not_log_in_when_given_gmail_account_is_invalid.yml +13 -0
  51. data/spec/recordings/gmail_client_xo_auth2/instance/labels/checks_if_there_is_given_label_defined.yml +27 -0
  52. data/spec/recordings/gmail_client_xo_auth2/instance/labels/creates_given_label.yml +39 -0
  53. data/spec/recordings/gmail_client_xo_auth2/instance/labels/removes_existing_label.yml +39 -0
  54. data/spec/recordings/gmail_client_xo_auth2/instance/labels/returns_list_of_all_available_labels.yml +27 -0
  55. data/spec/recordings/gmail_client_xo_auth2/instance/properly_logs_in_to_valid_gmail_account.yml +15 -0
  56. data/spec/recordings/gmail_client_xo_auth2/instance/properly_logs_out_from_gmail.yml +15 -0
  57. data/spec/recordings/gmail_client_xo_auth2/instance/properly_switches_to_given_mailbox.yml +40 -0
  58. data/spec/recordings/gmail_client_xo_auth2/instance/properly_switches_to_given_mailbox_using_block_style.yml +40 -0
  59. data/spec/recordings/gmail_client_xo_auth2/instance/raises_error_when_given_gmail_account_is_invalid_and_errors_enabled.yml +13 -0
  60. data/spec/recordings/gmail_labels/localize/when_given_the_xl_is_tflag/all/localizes_into_the_appropriate_label.yml +116 -0
  61. data/spec/recordings/gmail_labels/localize/when_given_the_xl_is_tflag/drafts/localizes_into_the_appropriate_label.yml +116 -0
  62. data/spec/recordings/gmail_labels/localize/when_given_the_xl_is_tflag/flagged/localizes_into_the_appropriate_label.yml +116 -0
  63. data/spec/recordings/gmail_labels/localize/when_given_the_xl_is_tflag/important/localizes_into_the_appropriate_label.yml +116 -0
  64. data/spec/recordings/gmail_labels/localize/when_given_the_xl_is_tflag/inbox/localizes_into_the_appropriate_label.yml +42 -0
  65. data/spec/recordings/gmail_labels/localize/when_given_the_xl_is_tflag/junk/localizes_into_the_appropriate_label.yml +116 -0
  66. data/spec/recordings/gmail_labels/localize/when_given_the_xl_is_tflag/sent/localizes_into_the_appropriate_label.yml +116 -0
  67. data/spec/recordings/gmail_labels/localize/when_given_the_xl_is_tflag/trash/localizes_into_the_appropriate_label.yml +116 -0
  68. data/spec/recordings/gmail_mailbox/instance/counts_all_emails.yml +277 -0
  69. data/spec/recordings/gmail_mailbox/instance/finds_messages.yml +586 -0
  70. data/spec/recordings/gmail_mailbox/on_initialize/sets_client_and_name.yml +42 -0
  71. data/spec/recordings/gmail_mailbox/on_initialize/works_in_inbox_by_default.yml +42 -0
  72. data/spec/recordings/gmail_message/initialize/sets_prefetch_attrs.yml +578 -0
  73. data/spec/recordings/gmail_message/initialize/sets_uid_and_mailbox.yml +580 -0
  74. data/spec/recordings/gmail_message/instance_methods/deletes_itself.yml +637 -0
  75. data/spec/recordings/gmail_message/instance_methods/marks_itself_read.yml +682 -0
  76. data/spec/recordings/gmail_message/instance_methods/marks_itself_unread.yml +686 -0
  77. data/spec/recordings/gmail_message/instance_methods/moves_from_one_tag_to_other.yml +862 -0
  78. data/spec/recordings/gmail_message/instance_methods/removes_a_given_label.yml +776 -0
  79. data/spec/recordings/gmail_message/instance_methods/removes_a_given_label_with_old_method.yml +776 -0
  80. data/spec/recordings/gmail_message/instance_methods/sets_given_label.yml +690 -0
  81. data/spec/recordings/gmail_message/instance_methods/sets_given_label_with_old_method.yml +691 -0
  82. data/spec/spec_helper.rb +34 -10
  83. data/spec/support/imap_mock.rb +129 -0
  84. data/spec/support/obfuscation.rb +52 -0
  85. metadata +79 -30
  86. data/TODO.md +0 -12
  87. data/lib/gmail/client/imap_extensions.rb +0 -54
  88. data/spec/client_spec.rb +0 -178
  89. data/spec/message_spec.rb +0 -51
@@ -0,0 +1,586 @@
1
+ ---
2
+ LOGIN-9a890af1c86854f5170d99be6e10b8f1:
3
+ - - :return
4
+ - !ruby/struct:Net::IMAP::TaggedResponse
5
+ tag: RUBY0001
6
+ name: OK
7
+ data: !ruby/struct:Net::IMAP::ResponseText
8
+ code:
9
+ text: ki0zvkyi1yzgy7xu4f4dh46nqrcecm@gmail.com authenticated (Success)
10
+ raw_data: "RUBY0001 OK ki0zvkyi1yzgy7xu4f4dh46nqrcecm@gmail.com authenticated
11
+ (Success)\r\n"
12
+ - CAPABILITY:
13
+ - - IMAP4REV1
14
+ - UNSELECT
15
+ - IDLE
16
+ - NAMESPACE
17
+ - QUOTA
18
+ - ID
19
+ - XLIST
20
+ - CHILDREN
21
+ - X-GM-EXT-1
22
+ - UIDPLUS
23
+ - COMPRESS=DEFLATE
24
+ - ENABLE
25
+ - MOVE
26
+ - CONDSTORE
27
+ - ESEARCH
28
+ - UTF8=ACCEPT
29
+ SELECT-505f013d922af4caf157dc91d6b45a60:
30
+ - - :return
31
+ - !ruby/struct:Net::IMAP::TaggedResponse
32
+ tag: RUBY0002
33
+ name: OK
34
+ data: !ruby/struct:Net::IMAP::ResponseText
35
+ code: !ruby/struct:Net::IMAP::ResponseCode
36
+ name: READ-WRITE
37
+ data:
38
+ text: " INBOX selected. (Success)"
39
+ raw_data: "RUBY0002 OK [READ-WRITE] INBOX selected. (Success)\r\n"
40
+ - FLAGS: &4
41
+ - - :Answered
42
+ - :Flagged
43
+ - :Draft
44
+ - :Deleted
45
+ - :Seen
46
+ - "$Phishing"
47
+ - "$NotPhishing"
48
+ OK: &5
49
+ - !ruby/struct:Net::IMAP::ResponseText
50
+ code: !ruby/struct:Net::IMAP::ResponseCode
51
+ name: PERMANENTFLAGS
52
+ data: &1
53
+ - :Answered
54
+ - :Flagged
55
+ - :Draft
56
+ - :Deleted
57
+ - :Seen
58
+ - "$Phishing"
59
+ - "$NotPhishing"
60
+ - :*
61
+ text: " Flags permitted."
62
+ - !ruby/struct:Net::IMAP::ResponseText
63
+ code: !ruby/struct:Net::IMAP::ResponseCode
64
+ name: UIDVALIDITY
65
+ data: 1
66
+ text: " UIDs valid."
67
+ - !ruby/struct:Net::IMAP::ResponseText
68
+ code: !ruby/struct:Net::IMAP::ResponseCode
69
+ name: UIDNEXT
70
+ data: 190
71
+ text: " Predicted next UID."
72
+ - !ruby/struct:Net::IMAP::ResponseText
73
+ code: !ruby/struct:Net::IMAP::ResponseCode
74
+ name: HIGHESTMODSEQ
75
+ data: '14699'
76
+ text: ''
77
+ PERMANENTFLAGS: &6
78
+ - *1
79
+ UIDVALIDITY: &7
80
+ - 1
81
+ EXISTS: &8
82
+ - 181
83
+ RECENT: &9
84
+ - 0
85
+ UIDNEXT: &10
86
+ - 190
87
+ HIGHESTMODSEQ: &11
88
+ - '14699'
89
+ - - :return
90
+ - !ruby/struct:Net::IMAP::TaggedResponse
91
+ tag: RUBY0004
92
+ name: OK
93
+ data: !ruby/struct:Net::IMAP::ResponseText
94
+ code: !ruby/struct:Net::IMAP::ResponseCode
95
+ name: READ-WRITE
96
+ data:
97
+ text: " INBOX selected. (Success)"
98
+ raw_data: "RUBY0004 OK [READ-WRITE] INBOX selected. (Success)\r\n"
99
+ - FLAGS: &12
100
+ - - :Answered
101
+ - :Flagged
102
+ - :Draft
103
+ - :Deleted
104
+ - :Seen
105
+ - "$Phishing"
106
+ - "$NotPhishing"
107
+ OK: &13
108
+ - !ruby/struct:Net::IMAP::ResponseText
109
+ code: !ruby/struct:Net::IMAP::ResponseCode
110
+ name: PERMANENTFLAGS
111
+ data: &2
112
+ - :Answered
113
+ - :Flagged
114
+ - :Draft
115
+ - :Deleted
116
+ - :Seen
117
+ - "$Phishing"
118
+ - "$NotPhishing"
119
+ - :*
120
+ text: " Flags permitted."
121
+ - !ruby/struct:Net::IMAP::ResponseText
122
+ code: !ruby/struct:Net::IMAP::ResponseCode
123
+ name: UIDVALIDITY
124
+ data: 1
125
+ text: " UIDs valid."
126
+ - !ruby/struct:Net::IMAP::ResponseText
127
+ code: !ruby/struct:Net::IMAP::ResponseCode
128
+ name: UIDNEXT
129
+ data: 190
130
+ text: " Predicted next UID."
131
+ - !ruby/struct:Net::IMAP::ResponseText
132
+ code: !ruby/struct:Net::IMAP::ResponseCode
133
+ name: HIGHESTMODSEQ
134
+ data: '14699'
135
+ text: ''
136
+ PERMANENTFLAGS: &14
137
+ - *2
138
+ UIDVALIDITY: &15
139
+ - 1
140
+ EXISTS: &16
141
+ - 181
142
+ RECENT: &17
143
+ - 0
144
+ UIDNEXT: &18
145
+ - 190
146
+ HIGHESTMODSEQ: &19
147
+ - '14699'
148
+ - - :return
149
+ - !ruby/struct:Net::IMAP::TaggedResponse
150
+ tag: RUBY0006
151
+ name: OK
152
+ data: !ruby/struct:Net::IMAP::ResponseText
153
+ code: !ruby/struct:Net::IMAP::ResponseCode
154
+ name: READ-WRITE
155
+ data:
156
+ text: " INBOX selected. (Success)"
157
+ raw_data: "RUBY0006 OK [READ-WRITE] INBOX selected. (Success)\r\n"
158
+ - FLAGS: &20
159
+ - - :Answered
160
+ - :Flagged
161
+ - :Draft
162
+ - :Deleted
163
+ - :Seen
164
+ - "$Phishing"
165
+ - "$NotPhishing"
166
+ OK: &21
167
+ - !ruby/struct:Net::IMAP::ResponseText
168
+ code: !ruby/struct:Net::IMAP::ResponseCode
169
+ name: PERMANENTFLAGS
170
+ data: &3
171
+ - :Answered
172
+ - :Flagged
173
+ - :Draft
174
+ - :Deleted
175
+ - :Seen
176
+ - "$Phishing"
177
+ - "$NotPhishing"
178
+ - :*
179
+ text: " Flags permitted."
180
+ - !ruby/struct:Net::IMAP::ResponseText
181
+ code: !ruby/struct:Net::IMAP::ResponseCode
182
+ name: UIDVALIDITY
183
+ data: 1
184
+ text: " UIDs valid."
185
+ - !ruby/struct:Net::IMAP::ResponseText
186
+ code: !ruby/struct:Net::IMAP::ResponseCode
187
+ name: UIDNEXT
188
+ data: 190
189
+ text: " Predicted next UID."
190
+ - !ruby/struct:Net::IMAP::ResponseText
191
+ code: !ruby/struct:Net::IMAP::ResponseCode
192
+ name: HIGHESTMODSEQ
193
+ data: '14699'
194
+ text: ''
195
+ PERMANENTFLAGS: &22
196
+ - *3
197
+ UIDVALIDITY: &23
198
+ - 1
199
+ EXISTS: &24
200
+ - 181
201
+ RECENT: &25
202
+ - 0
203
+ UIDNEXT: &26
204
+ - 190
205
+ HIGHESTMODSEQ: &27
206
+ - '14699'
207
+ UID SEARCH-b19658413e2b63d2bac9c290a67c2cb3:
208
+ - - :return
209
+ - !ruby/struct:Net::IMAP::TaggedResponse
210
+ tag: RUBY0003
211
+ name: OK
212
+ data: !ruby/struct:Net::IMAP::ResponseText
213
+ code:
214
+ text: SEARCH completed (Success)
215
+ raw_data: "RUBY0003 OK SEARCH completed (Success)\r\n"
216
+ - FLAGS: *4
217
+ OK: *5
218
+ PERMANENTFLAGS: *6
219
+ UIDVALIDITY: *7
220
+ EXISTS: *8
221
+ RECENT: *9
222
+ UIDNEXT: *10
223
+ HIGHESTMODSEQ: *11
224
+ SEARCH:
225
+ - - 1
226
+ - 2
227
+ - 3
228
+ - 4
229
+ - 5
230
+ - 6
231
+ - 7
232
+ - 8
233
+ - 9
234
+ - 10
235
+ - 11
236
+ - 12
237
+ - 13
238
+ - 14
239
+ - 15
240
+ - 16
241
+ - 17
242
+ - 18
243
+ - 19
244
+ - 20
245
+ - 21
246
+ - 22
247
+ - 23
248
+ - 24
249
+ - 25
250
+ - 26
251
+ - 27
252
+ - 28
253
+ - 29
254
+ - 30
255
+ - 31
256
+ - 32
257
+ - 33
258
+ - 34
259
+ - 35
260
+ - 36
261
+ - 37
262
+ - 38
263
+ - 39
264
+ - 40
265
+ - 41
266
+ - 42
267
+ - 43
268
+ - 44
269
+ - 45
270
+ - 46
271
+ - 47
272
+ - 48
273
+ - 49
274
+ - 50
275
+ - 51
276
+ - 52
277
+ - 53
278
+ - 54
279
+ - 55
280
+ - 56
281
+ - 57
282
+ - 58
283
+ - 59
284
+ - 60
285
+ - 61
286
+ - 62
287
+ - 63
288
+ - 64
289
+ - 65
290
+ - 66
291
+ - 67
292
+ - 68
293
+ - 69
294
+ - 70
295
+ - 71
296
+ - 72
297
+ - 73
298
+ - 74
299
+ - 75
300
+ - 76
301
+ - 77
302
+ - 78
303
+ - 79
304
+ - 80
305
+ - 81
306
+ - 82
307
+ - 83
308
+ - 84
309
+ - 85
310
+ - 86
311
+ - 87
312
+ - 88
313
+ - 89
314
+ - 90
315
+ - 91
316
+ - 92
317
+ - 93
318
+ - 94
319
+ - 95
320
+ - 96
321
+ - 97
322
+ - 98
323
+ - 99
324
+ - 100
325
+ - 101
326
+ - 102
327
+ - 103
328
+ - 104
329
+ - 105
330
+ - 106
331
+ - 107
332
+ - 108
333
+ - 109
334
+ - 110
335
+ - 111
336
+ - 112
337
+ - 113
338
+ - 114
339
+ - 115
340
+ - 116
341
+ - 117
342
+ - 118
343
+ - 119
344
+ - 120
345
+ - 121
346
+ - 122
347
+ - 123
348
+ - 124
349
+ - 125
350
+ - 126
351
+ - 127
352
+ - 128
353
+ - 129
354
+ - 130
355
+ - 131
356
+ - 132
357
+ - 133
358
+ - 134
359
+ - 135
360
+ - 136
361
+ - 137
362
+ - 138
363
+ - 139
364
+ - 140
365
+ - 141
366
+ - 142
367
+ - 143
368
+ - 144
369
+ - 145
370
+ - 150
371
+ - 151
372
+ - 156
373
+ - 157
374
+ - 158
375
+ - 159
376
+ - 160
377
+ - 161
378
+ - 162
379
+ - 163
380
+ - 164
381
+ - 165
382
+ - 166
383
+ - 167
384
+ - 168
385
+ - 169
386
+ - 170
387
+ - 171
388
+ - 172
389
+ - 173
390
+ - 174
391
+ - 175
392
+ - 176
393
+ - 177
394
+ - 178
395
+ - 179
396
+ - 180
397
+ - 181
398
+ - 182
399
+ - 183
400
+ - 184
401
+ - 185
402
+ - 186
403
+ - 187
404
+ - 188
405
+ - 189
406
+ UID FETCH-70e92ae4507a5481cf98aac122edceb8:
407
+ - - :return
408
+ - !ruby/struct:Net::IMAP::TaggedResponse
409
+ tag: RUBY0005
410
+ name: OK
411
+ data: !ruby/struct:Net::IMAP::ResponseText
412
+ code:
413
+ text: Success
414
+ raw_data: "RUBY0005 OK Success\r\n"
415
+ - FLAGS: *12
416
+ OK: *13
417
+ PERMANENTFLAGS: *14
418
+ UIDVALIDITY: *15
419
+ EXISTS: *16
420
+ RECENT: *17
421
+ UIDNEXT: *18
422
+ HIGHESTMODSEQ: *19
423
+ FETCH:
424
+ - !ruby/struct:Net::IMAP::FetchData
425
+ seqno: 1
426
+ attr:
427
+ X-GM-THRID: 1490339162618061913
428
+ X-GM-MSGID: 1490339162618061913
429
+ X-GM-LABELS: []
430
+ UID: 1
431
+ FLAGS:
432
+ - :Seen
433
+ ENVELOPE: !ruby/struct:Net::IMAP::Envelope
434
+ date: Wed, 14 Jan 2015 21:03:01 -0800
435
+ subject: Three tips to get the most out of Gmail
436
+ from:
437
+ - !ruby/struct:Net::IMAP::Address
438
+ name: Gmail Team
439
+ route:
440
+ mailbox: mail-noreply
441
+ host: google.com
442
+ sender:
443
+ - !ruby/struct:Net::IMAP::Address
444
+ name: Gmail Team
445
+ route:
446
+ mailbox: mail-noreply
447
+ host: google.com
448
+ reply_to:
449
+ - !ruby/struct:Net::IMAP::Address
450
+ name: Gmail Team
451
+ route:
452
+ mailbox: mail-noreply
453
+ host: google.com
454
+ to:
455
+ - !ruby/struct:Net::IMAP::Address
456
+ name: John Doe
457
+ route:
458
+ mailbox: ki0zvkyi1yzgy7xu4f4dh46nqrcecm
459
+ host: gmail.com
460
+ cc:
461
+ bcc:
462
+ in_reply_to:
463
+ message_id: "<CACNRAYKakHOCaxin=3D-9QAC=GRQgDae66vLpwqPQC6rDAJK2w@mail.gmail.com>"
464
+ BODY[]: "MIME-Version: 1.0\r\nx-no-auto-attachment: 1\r\nReceived: by 10.70.87.10;
465
+ Wed, 14 Jan 2015 21:03:01 -0800 (PST)\r\nDate: Wed, 14 Jan 2015 21:03:01
466
+ -0800\r\nMessage-ID: <CACNRAYKakHOCaxin=3D-9QAC=GRQgDae66vLpwqPQC6rDAJK2w@mail.gmail.com>\r\nSubject:
467
+ Three tips to get the most out of Gmail\r\nFrom: Gmail Team <mail-noreply@google.com>\r\nTo:
468
+ John Doe <ki0zvkyi1yzgy7xu4f4dh46nqrcecm@gmail.com>\r\nContent-Type: multipart/alternative;
469
+ boundary=bcaec51dcff73ca5e9050ca9c59a\r\n\r\n--bcaec51dcff73ca5e9050ca9c59a\r\nContent-Type:
470
+ text/plain; charset=UTF-8\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\n
471
+ Three tips to get the most out of Gmail\r\n[image: Google]\r\n\r\nHi John\r\n\r\nTips
472
+ to get the most out of Gmail\r\n\r\n[image: Contacts]\r\nBring your contacts
473
+ and mail into Gmail\r\n\r\nOn your computer, you can copy your contacts
474
+ and emails from your old email\r\naccount to make the transition to Gmail
475
+ even better. Learn how\r\n<https://support.google.com/mail/answer/164640?hl=3Den&ref_topic=3D1669014>=\r\n.\r\n[image:
476
+ Search]\r\nFind what you need fast\r\n\r\nWith the power of Google Search
477
+ right in your inbox, it's easy to sort your\r\nemail. Find what you're looking
478
+ for with predictions based on email\r\ncontent, past searches and contacts.\r\n[image:
479
+ Search]\r\nMuch more than email\r\n\r\nYou can send text messages and make
480
+ video calls with Hangouts\r\n<https://www.google.com/intl/en/hangouts/>
481
+ right from Gmail. To use this\r\nfeature on mobile, download the Hangouts
482
+ app for Android\r\n<https://play.google.com/store/apps/details?id=3Dcom.google.android.talk&hl=\r\n=3Den>\r\nand
483
+ Apple <https://itunes.apple.com/en/app/hangouts/id643496868?mt=3D8>\r\ndevices.\r\n\r\n\r\n[image:
484
+ Gmail icon]Happy emailing,\r\nThe Gmail Team\r\n =C2=A9 2015 Google Inc.
485
+ 1600 Amphitheatre Parkway, Mountain View, CA 94043\r\n\r\n--bcaec51dcff73ca5e9050ca9c59a\r\nContent-Type:
486
+ text/html; charset=UTF-8\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\n<!DOCTYPE
487
+ html>\r\n<html><head><meta http-equiv=3D\"content-type\" content=3D\"text/html;charset=\r\n=3DUTF-8\"
488
+ /><title>Three tips to get the most out of Gmail</title></head><b=\r\nody
489
+ style=3D\"background-color:#e5e5e5; margin:20px 0;\"><br /><div style=3D\"=\r\nmargin:2%;\"><div
490
+ style=3D\"direction:ltr; text-align:left; font-family:'Open=\r\n sans','Arial',sans-serif;
491
+ color:#444; background-color:white; padding:1.5e=\r\nm; border-radius:1em;
492
+ box-shadow:1px -5px 8px 2px #bbb; max-width:580px; ma=\r\nrgin:2% auto 0
493
+ auto;\"><table style=3D\"background:white;width:100%\"><tr><td>=\r\n<div
494
+ style=3D\"width:90px; height:54px; margin:10px auto;\"><img src=3D\"https=\r\n://services.google.com/fh/files/emails/google_logo_flat_90_color.png\"
495
+ alt=\r\n=3D\"Google\" width=3D\"90\" height=3D\"34\"/></div><div style=3D\"width:90%;
496
+ padd=\r\ning-bottom:10px; padding-left:15px\"><p><img alt=3D\"\" src=3D\"https://ssl.gst=\r\natic.com/accounts/services/mail/msa/gmail_icon_small.png\"
497
+ style=3D\"display:=\r\nblock; float:left; margin-top:4px; margin-right:5px;\"/><span
498
+ style=3D\"font-=\r\nfamily:'Open sans','Arial',sans-serif; font-weight:bold;
499
+ font-size:small; l=\r\nine-height:1.4em\">Hi John</span></p><p><span style=3D\"font-family:'Open
500
+ san=\r\ns','Arial',sans-serif; font-size:2.08em;\">Tips to get the most
501
+ out of Gmail=\r\n</span><br/></p></div><p></p><div style=3D\"float:left;
502
+ clear:both; padding:=\r\n0px 5px 10px 10px;\"><img src=3D\"https://services.google.com/fh/files/emails=\r\n/importcontacts.png\"
503
+ alt=3D\"Contacts\" style=3D\"display:block;\"width=3D\"129\"=\r\nheight=3D\"129\"/></div><div
504
+ style=3D\"float:left; vertical-align:middle; padd=\r\ning:10px; max-width:398px;
505
+ float:left;\"><table style=3D\"vertical-align:midd=\r\nle;\"><tr><td style=3D\"font-family:'Open
506
+ sans','Arial',sans-serif;\"><span st=\r\nyle=3D\"font-size:20px;\">Bring
507
+ your contacts and mail into Gmail</span><br/>=\r\n<br/><span style=3D\"font-size:small;
508
+ line-height:1.4em\">On your computer, y=\r\nou can copy your contacts and
509
+ emails from your old email account to make th=\r\ne transition to Gmail
510
+ even better. <a href=3D\"https://support.google.com/ma=\r\nil/answer/164640?hl=3Den&amp;ref_topic=3D1669014\"
511
+ style=3D\"text-decoration:=\r\nnone; color:#15C\">Learn how</a>.</span></td></tr></table></div><div
512
+ style=\r\n=3D\"float:left; clear:both; padding:0px 5px 10px 10px;\"><img
513
+ src=3D\"https:/=\r\n/ssl.gstatic.com/mail/welcome/localized/en/welcome_search.png\"
514
+ alt=3D\"Searc=\r\nh\" style=3D\"display:block;\"width=3D\"129\"height=3D\"129\"/></div><div
515
+ style=3D=\r\n\"float:left; vertical-align:middle; padding:10px; max-width:398px;
516
+ float:le=\r\nft;\"><table style=3D\"vertical-align:middle;\"><tr><td style=3D\"font-family:'=\r\nOpen
517
+ sans','Arial',sans-serif;\"><span style=3D\"font-size:20px;\">Find what
518
+ y=\r\nou need fast</span><br/><br/><span style=3D\"font-size:small; line-height:1.=\r\n4em\">With
519
+ the power of Google Search right in your inbox, it's easy to sort=\r\n your
520
+ email. Find what you're looking for with predictions based on email c=\r\nontent,
521
+ past searches and contacts.</span></td></tr></table></div><div styl=\r\ne=3D\"float:left;
522
+ clear:both; padding:0px 5px 10px 10px;\"><img src=3D\"https:=\r\n//ssl.gstatic.com/accounts/services/mail/msa/welcome_hangouts.png\"
523
+ alt=3D\"S=\r\nearch\" style=3D\"display:block;\"width=3D\"129\"height=3D\"129\"/></div><div
524
+ styl=\r\ne=3D\"float:left; vertical-align:middle; padding:10px; max-width:398px;
525
+ floa=\r\nt:left;\"><table style=3D\"vertical-align:middle;\"><tr><td style=3D\"font-fami=\r\nly:'Open
526
+ sans','Arial',sans-serif;\"><span style=3D\"font-size:20px;\">Much mo=\r\nre
527
+ than email</span><br/><br/><span style=3D\"font-size:small; line-height:1=\r\n.4em\">You
528
+ can send text messages and make video calls with <a href=3D\"https=\r\n://www.google.com/intl/en/hangouts/\"
529
+ style=3D\"text-decoration:none; color:#=\r\n15C\">Hangouts</a> right from
530
+ Gmail. To use this feature on mobile, download=\r\n the Hangouts app for
531
+ <a href=3D\"https://play.google.com/store/apps/details=\r\n?id=3Dcom.google.android.talk&amp;hl=3Den\"
532
+ style=3D\"text-decoration:none; c=\r\nolor:#15C\">Android</a> and <a href=3D\"https://itunes.apple.com/en/app/hango=\r\nuts/id643496868?mt=3D8\"
533
+ style=3D\"text-decoration:none; color:#15C\">Apple</a=\r\n> devices.</span></td></tr></table></div><br/><br/>\r\n<div
534
+ style=3D\"clear:both; padding-left:13px; height:6.8em;\"><table style=3D=\r\n\"width:100%;
535
+ border-collapse:collapse; border:0\"><tr><td style=3D\"width:68p=\r\nx\"><img
536
+ alt=3D'Gmail icon' width=3D\"49\" height=3D\"37\" src=3D\"https://ssl.gs=\r\ntatic.com/accounts/services/mail/msa/gmail_icon_large.png\"
537
+ style=3D\"display=\r\n:block;\"/></td><td style=3D\"align:left; font-family:'Open
538
+ sans','Arial',san=\r\ns-serif; vertical-align:bottom\"><span style=3D\"font-size:small\">Happy
539
+ email=\r\ning,<br/></span><span style=3D\"font-size:x-large; line-height:1\">The
540
+ Gmail =\r\nTeam</span></td></tr></table></div>\r\n</td></tr></table></div>\r\n<div
541
+ style=3D\"direction:ltr;color:#777; font-size:0.8em; border-radius:1em;=\r\n
542
+ padding:1em; margin:0 auto 4% auto; font-family:'Arial','Helvetica',sans-s=\r\nerif;
543
+ text-align:center;\">=C2=A9 2015 Google Inc. 1600 Amphitheatre Parkway=\r\n,
544
+ Mountain View, CA 94043<br/></div></div></body></html>\r\n\r\n--bcaec51dcff73ca5e9050ca9c59a--"
545
+ UID SEARCH-543c4aa0876fcec438e0bdc20193d4bb:
546
+ - - :return
547
+ - !ruby/struct:Net::IMAP::TaggedResponse
548
+ tag: RUBY0007
549
+ name: OK
550
+ data: !ruby/struct:Net::IMAP::ResponseText
551
+ code:
552
+ text: SEARCH completed (Success)
553
+ raw_data: "RUBY0007 OK SEARCH completed (Success)\r\n"
554
+ - FLAGS: *20
555
+ OK: *21
556
+ PERMANENTFLAGS: *22
557
+ UIDVALIDITY: *23
558
+ EXISTS: *24
559
+ RECENT: *25
560
+ UIDNEXT: *26
561
+ HIGHESTMODSEQ: *27
562
+ SEARCH:
563
+ - - 1
564
+ - 2
565
+ - 3
566
+ LOGOUT-e76a09b7766d60a37ff9e1af527a143e:
567
+ - - :return
568
+ - !ruby/struct:Net::IMAP::TaggedResponse
569
+ tag: RUBY0008
570
+ name: OK
571
+ data: !ruby/struct:Net::IMAP::ResponseText
572
+ code:
573
+ text: 73 good day (Success)
574
+ raw_data: "RUBY0008 OK 73 good day (Success)\r\n"
575
+ - FLAGS: *20
576
+ OK: *21
577
+ PERMANENTFLAGS: *22
578
+ UIDVALIDITY: *23
579
+ EXISTS: *24
580
+ RECENT: *25
581
+ UIDNEXT: *26
582
+ HIGHESTMODSEQ: *27
583
+ BYE:
584
+ - !ruby/struct:Net::IMAP::ResponseText
585
+ code:
586
+ text: LOGOUT Requested