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