Current section
Files
Jump to
Current section
Files
lib/imap/mailbox.ex
defmodule Blop.Mailbox do
@moduledoc """
Message flags:
(RFC 3501)
- \\Seen - Message has been read
- \\Answered - Message has been replied to
- \\Flagged - Message is marked as important or flagged for attention
- \\Deleted - Message is marked for deletion
- \\Draft - Message is a draft
- \\Recent - Message is new in the mailbox since last access
Mailbox flags:
(RFC 3501)
- \\Noinferiors - Mailbox cannot have child mailboxes
- \\Noselect - Mailbox cannot be selected (often used for namespace containers)
- \\Marked - Mailbox contains new messages
- \\Unmarked - Mailbox has no new messages
(RFC 3348)
- \\HasChildren - Mailbox has child mailboxes
- \\HasNoChildren - Mailbox has no child mailboxes
Special-use mailbox attributes (RFC 6154):
- \\All - Contains all messages
- \\Archive - Used for archiving messages
- \\Drafts - Contains draft messages
- \\Flagged - Contains flagged messages
- \\Junk - Contains spam/junk messages
- \\Sent - Contains sent messages
- \\Trash - Contains deleted messages
- \\Important - Contains important messages
"""
defstruct [:name, :delimiter, :flags, :exists, :recent]
def decode_name(mailbox) do
Blop.UTF7.decode(mailbox.name)
end
def find(mailbox_name) do
Access.find(fn %{name: name} -> name == mailbox_name end)
end
end
defimpl Inspect, for: Blop.Mailbox do
import Inspect.Algebra
def inspect(mailbox, opts) do
concat([
"#Blop.Mailbox<",
to_doc(Blop.Mailbox.decode_name(mailbox), opts),
" (",
to_doc(mailbox.delimiter, opts),
") ",
to_doc(mailbox.flags, opts),
" ",
if(mailbox.exists, do: "#{mailbox.exists}", else: "TBD"),
">"
])
end
end