LP-BR-SP/ConfigNights/2013-02-24: MUA
Config Night: MUA
Contents
2013-02-24: mutt, Gnus (parcialmente)
Onde: Unicamp Quando: 2013-02-14 15:00 GMT-3 Quem:
- ISF
- raniere
- panaggio
Como funciona o envio, entrega e tráfego de e-mail
- Mail Tranfer Agent: transfere e-mail de um ponto para outro
Protocolos
- SMTP
- IMAP
- POP
Clientes
- sendmail
- fetchmail
- msmtp
- offlineimap
- Mail Delivery Agent
Formatos de mailbox
- maildir
- mbox
Clientes
- offlineimap
- procmail
- Mail User Agent: o cliente
Clientes
- Mutt
- Gnus
- Notmuch
- Offlineimap
- msmtp
Protocolos
- IMAP
- SMTP
- POP
Serviços
- Gmail
- GMX
- SDF
- Lavabit
- Riseup
Instalação
- cron
- mutt
- offlineimap
- msmtp
- notmuch > no ubuntu, vai exigir instalar o emacs (!)
- goobook
- dovecot
Configuração
$ crontab -e
e adicionar
# Roda um script que faz fetch dos emails a cada 4 minutos */5 * * * * /home/<USER>/.mail/mailrun.sh
mailrun.sh
#!/bin/bash PID=$(pgrep offlineimap) # if it is still running then stop it -n "$PID" && kill $PID offlineimap -o -u quiet &>/dev/null & # sed -i 's/"+[Gmail]\.Spam"\|"+[Gmail]\.Trash"\|"+[Gmail]\.Sent Mail"//' /home/ivan/.mutt/muttrc.mailboxes goobook reload notmuch new exit 0
.offlineimaprc
O offlineimaprc não aceita comentários, você precisa removê-los.
[general] metadata = ~/.offlineimap # .lock, ... accounts = <LISTA DE CONTAS> maxsyncaccounts = 1 # Não trocar, vai dar merda ui = TTYUI # A interface que funciona direito ignore-readonly = no # TODO
A seção mbnames cria a lista de mailboxes que o mutt usa para buscar por novas mensagens
[mbnames] enabled = yes filename = ~/.mutt/muttrc.mailboxes header = "mailboxes " peritem = "+%(foldername)s" sep = " " footer = "\n"
As contas do offlineimap definem opções específicas da conta (e.g., maxage) e define os repositórios: o local mostra onde serão salvos os e-mails localmente na máquina, já o remoto define o protocolo e endereço do servidor
[Account gmail]
localrepository = gmail-local remoterepository = gmail-remote
maxage = 60 # days status_backend = sqlite # mais rápido que plain text para muitos e-mails
[Repository gmail-local]
type = Maildir localfolders = ~/.mail/gmail sep = . restoreatime = no
[Repository gmail-remote]
type = Gmail realdelete = no remotehost = imap.gmail.com ssl = yes sslcacertfile = /etc/ssl/certs/ca-certificates.crt remoteport = 993 remoteuser = <USER>@gmail.com
.msmtprc
O msmtp é utilizado para enviar e-mails via SMTP
account gmail host smtp.gmail.com port 587 protocol smtp auth on logfile ~/.msmtp_log from <USER>@gmail.com user <USER>@gmail.com tls on tls_nocertcheck
Quando múltiplas contas forem especificadas, uma conta padrão pode ser definida com:
account default : <nome da conta>
.muttrc
set realname = "John Doe"
set mbox_type = Maildir set folder = $HOME/.mail/gmail/ set spoolfile = =INBOX source ~/.mutt/muttrc.mailboxes set header_cache = ~/.mutt/cache/headers set message_cachedir = ~/.mutt/cache/bodies set certificate_file = ~/.mutt/cert alternates "(<USER>@gmail\.com)|(<USER>@gmx\.com)"
set abort_nosubject = ask-yes set abort_unmodified = ask-yes set charset = utf-8 set check_new set collapse_unread set fast_reply # No waiting after send set followup_to = yes set ispell="aspell -e -c" set mailcap_path = ~/.mutt/mailcap set pager_context=5 # Retain 5 lines of previous page when scrolling. set pager_index_lines = 10 set query_command="goobook query '%s'" set smart_wrap # Don't wrap mid-word set sort=threads set sort_aux=reverse-last-date-received set sort_browser=alpha set ssl_starttls = yes set strict_threads = no set text_flowed = yes set use_from unset mark_old alternative_order text/plain text/enriched text/html text auto_view text/html mime_lookup application/octet-stream
- Folders
folder-hook . 'set index_format="%4C %Z %{%b %d} %-10B %-15.15n (%?l?%4l&%4c?) %s"' folder-hook '=INBOX$|=\[Gmail\]/*' 'set index_format="%4C %Z %{%b %d} %-15.15n (%?l?%4l&%4c?) %s"' folder-hook gmail/* source ~/.mutt/gmail.muttrc folder-hook gmx/* source ~/.mutt/gmx.muttrc
- Lists
subscribe \ list1 \ list 2
- Hooks
folder-hook . "exec collapse-all" # collapses all threads
- Editing
set editor="vim" set edit_headers=yes # See the headers when editing set include # include original message
- Signature
source ~/.mutt/gpg.muttrc set sig_dashes set signature = "~/.signature" folder-hook . set pgp_autosign = yes folder-hook valgrind set pgp_autosign = no set pgp_sign_as=FEBE1140 set pgp_replyencrypt = yes set pgp_timeout = 1800 # half hour
- set pgp_mime_signature_filename="signature.asc"
- set pgp_mime_signature_description="Digital signature"
- Headers
ignore * unignore Date: From: User-Agent: X-Mailer: X-Operating-System: To: \ Cc: Reply-To: Subject: Mail-Followup-To: X-PGP-Key: hdr_order From: Date: To: Cc: Reply-To: User-Agent: X-Mailer: X-Operating-System: Subject: X-PGP-Key:
- Colors
source ~/.mutt/colors.muttrc
gmail.muttrc
set from = "<USER>@gmail.com" set sendmail = "/usr/bin/msmtp -a gmail" set folder = /home/ivan/.mail/gmail set spoolfile = "=INBOX" set mbox = "=INBOX" set postponed = "=[Gmail].Drafts" set ssl_force_tls = yes unset record # prevent duplicates in Sent
macro index,pager .t '<save-message>=[Gmail].Trash<enter>' "move in Gmail trash" macro index,pager .s "<save-message>=[Gmail].Spam<enter>" "Flag as spam" macro index gm "<change-folder>?" macro index gi "<change-folder>=INBOX<enter>" "Go to inbox" macro index gs "<change-folder>=[Gmail].Sent Mail<enter>" "Go to Sent Mail" macro index gd "<change-folder>=[Gmail].Drafts<enter>" "Go to drafts"
macros.muttrc
macro index .r <collapse-all><tag-pattern>~N<enter><clear-flag>N<clear-flag>O<untag-pattern>~A<enter><collapse-all> macro index .m '<enter-command>source ~/.mutt/muttrc<enter>' "Source muttrc" macro index \Cv "<enter-command> set my_crypt_verify_sig=\$crypt_verify_sig<enter><enter-command> set crypt_verify_sig=yes<enter> <display-message><enter-command> set crypt_verify_sig=\$my_crypt_verify_sig<enter>" 'Verify PGP signature and open the message' macro pager \Cv "<exit><enter-command> set my_crypt_verify_sig=\$crypt_verify_sig<enter> <enter-command> set crypt_verify_sig=yes<enter> <display-message><enter-command> set crypt_verify_sig=\$my_crypt_verify_sig<enter>" 'Verify PGP signature' macro pager \cu <pipe-entry>'url_handler.sh'<enter> 'Follow links with urlview' macro index,pager .b "<pipe-message>goobook add<return>" "Add the sender address to Google contacts"
- movementation between account folders
macro index *g "<change-folder>.mail/gmail/INBOX<enter>" macro index *m "<change-folder>.mail/gmx/INBOX<enter>" macro index *s "<change-folder>.mail/sdf/INBOX<enter>"
- mark as unread
macro index,pager .u "<set-flag>N" "Mark as unread"
- star message
macro index,pager .! "<set-flag>!" "Star message"
- notmuch
macro index <F8> \
"<enter-command>unset wait_key<enter><shell-escape>notmuch-mutt -r --prompt search<enter><change-folder-readonly>~/.cache/notmuch/mutt/results<enter>" \ "notmuch: search mail"
macro index <F9> \
"<enter-command>unset wait_key<enter><pipe-message>notmuch-mutt -r thread<enter><change-folder-readonly>~/.cache/notmuch/mutt/results<enter><enter-command>set wait_key<enter>" \ "notmuch: reconstruct thread"
macro index <F6> \
"<enter-command>unset wait_key<enter><pipe-message>notmuch-mutt tag -- -inbox<enter>" \ "notmuch: remove message from inbox"