larch 1.1.0.dev.20091206 → 1.1.0.dev.20100120
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/HISTORY +3 -0
- data/README.rdoc +33 -0
- data/lib/larch/imap.rb +15 -3
- data/lib/larch/imap/mailbox.rb +2 -0
- data/lib/larch/version.rb +1 -1
- metadata +3 -3
data/HISTORY
CHANGED
@@ -12,6 +12,9 @@ Version 1.1.0 (git)
|
|
12
12
|
command-line, Larch will use the options in that section for the session;
|
13
13
|
otherwise it will use the options in the "default" section. See the README
|
14
14
|
for more details.
|
15
|
+
* Added experimental support for Yahoo! Mail IMAP when connecting to
|
16
|
+
imap.mail.yahoo.com or imap-ssl.mail.yahoo.com. See the README for caveats
|
17
|
+
and known issues.
|
15
18
|
* Folders are now copied recursively by default.
|
16
19
|
* Progress information is now displayed regularly while scanning large
|
17
20
|
mailboxes.
|
data/README.rdoc
CHANGED
@@ -213,6 +213,10 @@ servers:
|
|
213
213
|
* Gmail
|
214
214
|
* Microsoft Exchange 2003
|
215
215
|
|
216
|
+
The following servers are known to work, but with caveats:
|
217
|
+
|
218
|
+
* Yahoo! Mail
|
219
|
+
|
216
220
|
The following servers do not work well with Larch:
|
217
221
|
|
218
222
|
* BlitzMail - Buggy server implementation; fails to properly quote or escape
|
@@ -258,6 +262,35 @@ such as " folder ". Gmail does not. When copying folders to Gmail, Larch will
|
|
258
262
|
automatically remove leading and trailing whitespace in folder names to prevent
|
259
263
|
errors.
|
260
264
|
|
265
|
+
=== Yahoo! Mail Quirks
|
266
|
+
|
267
|
+
Yahoo! doesn't officially support IMAP access for general usage, but Larch is
|
268
|
+
able to connect to imap.mail.yahoo.com and imap-ssl.mail.yahoo.com by using a
|
269
|
+
fairly well-known trick. That said, as with anything tricky, there are caveats.
|
270
|
+
|
271
|
+
==== No hierarchical folders
|
272
|
+
|
273
|
+
Similar to Gmail, Yahoo!'s IMAP gateway doesn't allow hierarchical (nested)
|
274
|
+
folders. If you try to copy a folder hierarchy to Yahoo!, it will work, but
|
275
|
+
you'll end up with a set of folders named "folder" and "folder.subfolder"
|
276
|
+
rather than seeing "subfolder" as an actual subfolder of "folder".
|
277
|
+
|
278
|
+
==== No custom flags
|
279
|
+
|
280
|
+
Yahoo! Mail IMAP doesn't appear to support custom message flags, such as the
|
281
|
+
labels and junk/not junk flags used by Thunderbird. When transferring messages
|
282
|
+
with custom flags to a Yahoo! Mail IMAP account, the custom flags will be lost.
|
283
|
+
Also, Larch's <tt>sync-flags</tt> option will not work correctly if you have
|
284
|
+
messages with custom flags.
|
285
|
+
|
286
|
+
==== Here there be dragons
|
287
|
+
|
288
|
+
Larch's support for Yahoo! Mail is very new and very lightly tested. Given its
|
289
|
+
newness and the fact that Yahoo!'s IMAP gateway isn't official, there are likely
|
290
|
+
to be other quirks we're not yet aware of. There's also no guarantee that Yahoo!
|
291
|
+
won't shut down its IMAP gateway, deprecate the trick Larch uses to connect, or
|
292
|
+
just outright block Larch. Use at your own risk.
|
293
|
+
|
261
294
|
== Known Issues
|
262
295
|
|
263
296
|
* Larch uses Ruby's Net::IMAP standard library for all IMAP operations. While
|
data/lib/larch/imap.rb
CHANGED
@@ -64,8 +64,10 @@ class IMAP
|
|
64
64
|
|
65
65
|
@conn = nil
|
66
66
|
@mailboxes = {}
|
67
|
+
|
67
68
|
@quirks = {
|
68
|
-
:gmail => false
|
69
|
+
:gmail => false,
|
70
|
+
:yahoo => false
|
69
71
|
}
|
70
72
|
|
71
73
|
@db_account = Database::Account.find_or_create(
|
@@ -99,7 +101,7 @@ class IMAP
|
|
99
101
|
|
100
102
|
# Gets the server's mailbox hierarchy delimiter.
|
101
103
|
def delim
|
102
|
-
@delim ||= safely { @conn.list('', '')[0].delim }
|
104
|
+
@delim ||= safely { @conn.list('', '')[0].delim || '.'}
|
103
105
|
end
|
104
106
|
|
105
107
|
# Closes the IMAP connection if one is currently open.
|
@@ -258,6 +260,10 @@ class IMAP
|
|
258
260
|
if @conn.greeting.data.text =~ /^Gimap ready/
|
259
261
|
@quirks[:gmail] = true
|
260
262
|
debug "looks like Gmail"
|
263
|
+
|
264
|
+
elsif host =~ /^imap(?:-ssl)?\.mail\.yahoo\.com$/
|
265
|
+
@quirks[:yahoo] = true
|
266
|
+
debug "looks like Yahoo! Mail"
|
261
267
|
end
|
262
268
|
end
|
263
269
|
|
@@ -312,6 +318,12 @@ class IMAP
|
|
312
318
|
|
313
319
|
check_quirks
|
314
320
|
|
321
|
+
# If this is Yahoo! Mail, we have to send a special command before
|
322
|
+
# it'll let us authenticate.
|
323
|
+
if @quirks[:yahoo]
|
324
|
+
@conn.instance_eval { send_command('ID ("guid" "1")') }
|
325
|
+
end
|
326
|
+
|
315
327
|
auth_methods = ['PLAIN']
|
316
328
|
tried = []
|
317
329
|
capability = @conn.capability
|
@@ -362,7 +374,7 @@ class IMAP
|
|
362
374
|
name = Net::IMAP.decode_utf7(mb.name)
|
363
375
|
name = 'INBOX' if name.downcase == 'inbox'
|
364
376
|
|
365
|
-
@mailboxes[name] ||= Mailbox.new(self, name, mb.delim,
|
377
|
+
@mailboxes[name] ||= Mailbox.new(self, name, mb.delim || '.',
|
366
378
|
subscribed.any?{|s| s.name == mb.name}, mb.attr)
|
367
379
|
end
|
368
380
|
|
data/lib/larch/imap/mailbox.rb
CHANGED
@@ -438,6 +438,7 @@ class Mailbox
|
|
438
438
|
|
439
439
|
@imap.safely do
|
440
440
|
begin
|
441
|
+
@imap.conn.close unless @state == :closed
|
441
442
|
@state = :closed
|
442
443
|
|
443
444
|
debug "examining mailbox"
|
@@ -466,6 +467,7 @@ class Mailbox
|
|
466
467
|
|
467
468
|
@imap.safely do
|
468
469
|
begin
|
470
|
+
@imap.conn.close unless @state == :closed
|
469
471
|
@state = :closed
|
470
472
|
|
471
473
|
debug "selecting mailbox"
|
data/lib/larch/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: larch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.0.dev.
|
4
|
+
version: 1.1.0.dev.20100120
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Grove
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-01-20 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 3.
|
33
|
+
version: "3.8"
|
34
34
|
version:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: sqlite3-ruby
|