Module: Gurgitate::Deliver::Maildir
- Defined in:
- lib/gurgitate/deliver/maildir.rb
Class Method Summary collapse
-
.check_mailbox(mailbox) ⇒ Object
- Figures out if
mailboxis a Maildir mailbox mailbox -
A string containing the path of the mailbox to save the message to.
- Figures out if
Instance Method Summary collapse
-
#deliver_message(mailbox) ⇒ Object
Delivers a message to the maildir-format mailbox
mailbox. -
#maildir_getfilename(dir) ⇒ Object
Figures out the first available filename in the mail dir
dirand returns the filename to use. -
#make_mailbox(mailbox) ⇒ Object
- Creates a new Maildir folder
mailboxmailbox -
The full path of the new folder to be created.
- Creates a new Maildir folder
Class Method Details
.check_mailbox(mailbox) ⇒ Object
Figures out if mailbox is a Maildir mailbox
- mailbox
-
A string containing the path of the mailbox to save the message to. If it is of the form “=mailbox”, it saves the message to
Maildir/mailbox. Otherwise, it simply saves the message to the filemailbox.
18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/gurgitate/deliver/maildir.rb', line 18 def self::check_mailbox mailbox begin if File.stat(mailbox).directory? then if File.stat(File.join(mailbox,"cur")).directory? then return Maildir end end rescue Errno::ENOENT return nil end end |
Instance Method Details
#deliver_message(mailbox) ⇒ Object
Delivers a message to the maildir-format mailbox mailbox.
- mailbox
-
A string containing the path of the mailbox to save the message to. If it is of the form “=mailbox”, it saves the message to
Maildir/mailbox. Otherwise, it simply saves the message to the filemailbox.
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/gurgitate/deliver/maildir.rb', line 66 def mailbox begin File.stat(mailbox) rescue Errno::ENOENT make_mailbox(mailbox) end unless File.stat(mailbox).directory? raise SystemError, 'not a directory' end tmpfilename=maildir_getfilename(File.join(mailbox,"tmp")) File.open(tmpfilename,File::CREAT|File::WRONLY) do |fh| fh.write(self.to_s) fh.flush # I should put a caveat here, unfortunately. Ruby's # IO#flush only flushes Ruby's buffers, not the # operating system's. If anyone knows how to force # a real fflush(), I'd love to know. Otherwise, I'm # going to hope that closing the file does the trick # for me. end # ...and link to new. # (I guess Maildir mailboxes don't work too well # on Windows, eh?) newfilename = maildir_getfilename( File.join(mailbox,"new")) begin File.link(tmpfilename,newfilename) rescue SystemCallError log("Couldn't create maildir link to \"new\"!") exit 75 # Argh, I tried, it didn't work out end File.delete(tmpfilename) end |
#maildir_getfilename(dir) ⇒ Object
Figures out the first available filename in the mail dir dir and returns the filename to use.
- dir
-
One of “
mailbox/tmp” or “mailbox/new”, but that’s only because that’s what the maildir spec (cr.yp.to/proto/maildir.html) says.
36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/gurgitate/deliver/maildir.rb', line 36 def maildir_getfilename dir time=Time.now.to_f counter=0 hostname=Socket::gethostname filename=nil loop do filename=File.join(dir,sprintf("%.4f.%d_%d.%s", time,$$,counter,hostname)) break if not File.exist?(filename) counter+=1 end return filename end |
#make_mailbox(mailbox) ⇒ Object
Creates a new Maildir folder mailbox
- mailbox
-
The full path of the new folder to be created
53 54 55 56 57 58 |
# File 'lib/gurgitate/deliver/maildir.rb', line 53 def make_mailbox mailbox Dir.mkdir(mailbox) %w{cur tmp new}.each do |dir| Dir.mkdir(File.join(mailbox,dir)) end end |