Sync mail deletion with Notmuch + mbsync for gmail

Sebastian Fischmeister sfischme at uwaterloo.ca
Wed Sep 21 05:54:23 PDT 2016


Thanks. I'll try this, because it looks simpler than what I have. Here's
what's working so far:

Note: Gmail has a proprietary implementation of IMAP. To delete an
email, you first must move the email to the trash folder on the
server. You can find this info through archive.org, because Google now
redirects the page where they originally explained this.

https://web.archive.org/web/20151013132129/https://support.google.com/mail/answer/78755

Concept:

- Deleting emails adds the +delete tag.
- Archiving emails add the +processed tag.

- Before syncing emails, process archived messages by copying them to
  the archive folder and moving them to the trash folder. Moving is more
  elaborate, because you have to remove the UID for mbsync

notmuch search --output=files tag:processed and folder:inbox | grep -v archived | xargs -I{} cp -f {} ~/.mail/archived/cur/
notmuch search --output=files tag:processed and folder:sent | grep -v archived | xargs -I{} cp -f {} ~/.mail/archived/cur/

function moveIt { s=${1##*/}; s=${s%%,*}; mv -f $1 $2/$s
s=$(notmuch search --output=files tag:processed and folder:sent | grep -v archived)
for i in $s; do moveIt $i /home/sfischme/.mail/totrash/new; done
}

- Before syncing, move deleted messages to the trash

s=$(notmuch search --output=files tag:delete and not folder:totrash | grep -v archived)
for i in $s; do moveIt $i /home/sfischme/.mail/totrash/new; done

- Invoke mbsync

Caveats:

- You need more bandwidth as you copy emails back to the server just to
  delete them.

- Make sure your scripts work, otherwise things get out of sync.


  Sebastian


"aaermolov at gmail.com" <aaermolov at gmail.com> writes:

>  Hi Sebastian,
>
>  I also use mbsync + notmuch
>
>  here is mbsync config for my personal Gmail mailbox:
>  =====================================================
>  SyncState *
>
>  IMAPAccount aaermolov at gmail.com
>  Host imap.gmail.com
>  User aaermolov at gmail.com
>  PassCmd "gpg2 -q --for-your-eyes-only --no-tty -d ~/docs/enc/cred/aaermolov at gmail.com.gpg"
>  CertificateFile /etc/ssl/certs/ca-certificates.crt
>  SSLType IMAPS
>
>  IMAPStore aaermolov at gmail.com-remote
>  Account aaermolov at gmail.com
>
>  MaildirStore aaermolov at gmail.com-local
>  Path ~/Maildir/aaermolov at gmail.com/
>  Inbox ~/Maildir/aaermolov at gmail.com/INBOX
>  SubFolders Verbatim
>
>  MaildirStore aaermolov at gmail.com-archive
>  Path ~/Maildir/archive-aaermolov at gmail.com/
>
>  Channel aaermolov at gmail.com-archive
>  Master ":aaermolov at gmail.com-remote:[Gmail]/All Mail"
>  Slave ":aaermolov at gmail.com-archive:Archive"
>  Create Slave
>  SyncState *
>  Sync Push Flags
>
>  Channel aaermolov at gmail.com-trash
>  Master ":aaermolov at gmail.com-remote:[Gmail]/Trash"
>  Slave ":aaermolov at gmail.com-archive:Trash"
>  Create Slave
>  Sync All
>
>  Channel aaermolov at gmail.com-drafts
>  Master ":aaermolov at gmail.com-remote:[Gmail]/Drafts"
>  Slave ":aaermolov at gmail.com-local:Drafts"
>  Create Slave
>  Sync All
>  Expunge Both
>
>  Channel aaermolov at gmail.com-sent
>  Master ":aaermolov at gmail.com-remote:[Gmail]/Sent Mail"
>  Slave ":aaermolov at gmail.com-local:Sent"
>  Create Slave
>  Sync All
>  Expunge Both
>
>  Channel aaermolov at gmail.com-inbox
>  Master ":aaermolov at gmail.com-remote:INBOX"
>  Slave ":aaermolov at gmail.com-local:INBOX"
>  Create Slave
>  Sync All
>  Expunge Both
>
>  Channel aaermolov at gmail.com-user-labels
>  Master :aaermolov at gmail.com-remote:
>  Slave :aaermolov at gmail.com-local:
>  Create Slave
>  Sync All
>  Patterns "*" "!Drafts" "!Sent" "!Trash" "![Gmail]*" "!INBOX" "!Lists*" "!Cron*"
>  Expunge Both
>
>  Channel aaermolov at gmail.com-mailing-lists-and-notifications
>  Master :aaermolov at gmail.com-remote:
>  Slave :aaermolov at gmail.com-local:
>  Create Slave
>  Sync All
>  Patterns "Lists*" "Cron*"
>  # MaxMessages 2000
>  Expunge Both
>
>  Group aaermolov at gmail.com
>  Channel aaermolov at gmail.com-trash
>  Channel aaermolov at gmail.com-inbox
>  Channel aaermolov at gmail.com-drafts
>  Channel aaermolov at gmail.com-sent
>  Channel aaermolov at gmail.com-user-labels
>  Channel aaermolov at gmail.com-mailing-lists-and-notifications
>  Channel aaermolov at gmail.com-archive
>  =====================================================
>
>  But I also use imapfilter for trashed and spam messages management, so
>  when I delete something locally, AFAIK it correctly propagates to Gmail.
>
>  Here is imapfilter's config:
>  =====================================================
>  options.timeout = 120
>  options.subscribe = true
>
>  cmd_personal = io.popen('gpg2 -q --for-your-eyes-only --no-tty -d ~/docs/enc/cred/aaermolov at gmail.com.gpg', 'r')
>  out_personal = cmd_personal:read('*a')
>  pass_personal = string.gsub(out_personal, '[\n\r]+', '')
>
>  account_personal = IMAP {
>   server = 'imap.gmail.com',
>   username = 'aaermolov at gmail.com',
>   password = pass_personal,
>   ssl = 'ssl3'
>   }
>
>  trash_personal = account_personal['[Gmail]/Trash']:is_undeleted()
>  account_personal['[Gmail]/Trash']:delete_messages(trash_personal)
>
>  spam_personal = account_personal['[Gmail]/Spam']:is_unanswered()
>  account_personal['[Gmail]/Spam']:delete_messages(spam_personal)
>  =====================================================
>
>  Cheers, Alex
>
> PS Sorry for double posting, have forgot all recepients the first time.
>
> Sebastian Fischmeister <sfischme at uwaterloo.ca> writes:
>
>> Hi,
>>
>> I use mbsync + notmuch to sync my gmail. The problem is that Google's
>> IMAP implementation is non-standard and when I deleted a file locally,
>> mbsync propagates the deletion, but gmail doesn't delete the
>> message. 
>>
>> This is part of mbsync:
>>
>> SyncState *
>> Sync All
>> Expunge Both
>> Create Both
>>
>> When I delete a message, the macro passes the tag 'delete'. Before
>> syncing, the script runs:
>>
>> notmuch search --output=files tag:delete | xargs -l rm
>>
>> By playing with the IMAP settings in gmail, I got it so that the mail
>> vanishes from the 'inbox' label, but it's still in 'All Mails'. I also
>> tried moving it to a "[GMail]/Trash" folder locally and syncing that,
>> but it didn't work.
>>
>> Any ideas?
>>
>>   Sebastian
>> _______________________________________________
>> notmuch mailing list
>> notmuch at notmuchmail.org
>> https://notmuchmail.org/mailman/listinfo/notmuch


More information about the notmuch mailing list