LP-BR-SP/ConfigNights/2013-02-24: MUA

From LibrePlanet
Jump to: navigation, search

Config Night: MUA

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

  1. 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

  1. Lists

subscribe \ list1 \ list 2

  1. Hooks

folder-hook . "exec collapse-all" # collapses all threads

  1. Editing

set editor="vim" set edit_headers=yes # See the headers when editing set include # include original message

  1. 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

  1. set pgp_mime_signature_filename="signature.asc"
  2. set pgp_mime_signature_description="Digital signature"
  1. 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:

  1. 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"

  1. 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>"

  1. mark as unread

macro index,pager .u "<set-flag>N" "Mark as unread"

  1. star message

macro index,pager .! "<set-flag>!" "Star message"

  1. 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"

gpg