Переглянути джерело

[muchsync] Fix local mail role

Colin Powell 4 роки тому
батько
коміт
5ce471b9ac

+ 67 - 0
ansible/roles/muchsync/files/afew-config

@@ -0,0 +1,67 @@
+[global]
+
+[SpamFilter]
+[KillThreadsFilter]
+[DMARCReportInspectionFilter]
+[FolderNameFilter]
+folder_lowercases = true
+maildir_separator = /
+[ArchiveSentTrashFilter]
+[ArchiveSentMailsFilter]
+sent_tag = sent
+
+[InboxFilter]
+
+# Jira tag as Jira
+[Filter.1]
+query = 'from:jira@15five-dev.atlassian.net'
+tags = +jira;-inbox
+message = Jira message
+
+# Orgmode
+[Filter.2]
+query = 'emacs-orgmode'
+tags = -new;-inbox;+orgmode
+message = orgmode message
+
+# Delete some spam
+[Filter.3]
+query = '\'Office365 Message Center\' via Developers OR from:govdelivery@subscriptions.defense.gov OR from:notifications@facebookmai.com OR from:MPP@em.home.dell.com'
+tags = -inbox;+spam
+message = spam message
+
+# Tag interview emails
+[Filter.4]
+query = 'subject:Interview'
+tags = -inbox;+interview
+message = personal message
+
+[Filter.6]
+query = 'tag:sent'
+tags = -inbox
+message = no archives in inbox
+
+[Filter.7]
+query = 'from:notifications@github.com'
+tags = +github
+message = Github message
+
+[MailMover]
+folders = colin@unbl.ink/INBOX colin@unbl.ink/Archive colin@unbl.ink/Trash colin@castine.town/INBOX colin@castine.town/Archive colin@castine.town/Trash
+
+rename = True
+max_age = 15
+
+colin@unbl.ink/INBOX = 'tag:spam':colin@unbl.ink/Junk 'NOT tag:inbox':colin@unbl.ink/Archive 'tag:trash':colin@unbl.ink/Trash
+colin@unbl.ink/Archive = 'tag:inbox':colin@unbl.ink/INBOX 'tag:trash':colin@unbl.ink/Trash
+colin@unbl.ink/Trash = 'tag:inbox':colin@unbl.ink/INBOX 'tag:archive':colin@unbl.ink/Archive
+
+colin@castine.town/INBOX = 'tag:spam':colin@castine.town/Junk 'NOT tag:inbox':colin@castine.town/Archive 'tag:trash':colin@castine.town/Trash
+colin@castine.town/Archive = 'tag:inbox':colin@castine.town/INBOX 'tag:trash':colin@castine.town/Trash
+colin@castine.town/Trash = 'tag:inbox':colin@castine.town/INBOX 'tag:archive':colin@castine.town/Archive
+
+secstate@sdf.org/INBOX = 'tag:spam':secstate@sdf.org/Junk 'NOT tag:inbox':secstate@sdf.org/Archive 'tag:trash':secstate@sdf.org/Trash
+secstate@sdf.org/Archive = 'tag:inbox':secstate@sdf.org/INBOX 'tag:trash':secstate@sdf.org/Trash
+secstate@sdf.org/Trash = 'tag:inbox':secstate@sdf.org/INBOX 'tag:archive':secstate@sdf.org/Archive
+
+colin.powell@15five.com/INBOX = 'tag:spam':'colin.powell@15five.com/[Gmail]/Spam' 'NOT tag:inbox':'colin.powell@15five.com/[Gmail]/All Mail' 'tag:trash':'colin.powell@15five.com/[Gmail]/Trash'

+ 10 - 0
ansible/roles/muchsync/files/archive_filter.py

@@ -0,0 +1,10 @@
+from afew.filters.BaseFilter  import Filter
+from afew.FilterRegistry import register_filter
+
+@register_filter
+class ArchiveSentTrashFilter(Filter):
+    message = 'Remove any message tagged with archive or trash from inbox'
+    query = 'tag:archive or tag:trash or tag:sent'
+
+    def handle_message(self, message):
+        self.remove_tags(message, 'new', 'inbox')

+ 7 - 0
ansible/roles/muchsync/files/checkmail

@@ -0,0 +1,7 @@
+#!/bin/sh
+
+afew -m -a
+mbsync -a
+notmuch new
+afew -t -n
+exit 0

+ 67 - 0
ansible/roles/muchsync/files/config

@@ -0,0 +1,67 @@
+[global]
+
+[SpamFilter]
+[KillThreadsFilter]
+[DMARCReportInspectionFilter]
+[FolderNameFilter]
+folder_lowercases = true
+maildir_separator = /
+[ArchiveSentTrashFilter]
+[ArchiveSentMailsFilter]
+sent_tag = sent
+
+[InboxFilter]
+
+# Jira tag as Jira
+[Filter.1]
+query = 'from:jira@15five-dev.atlassian.net'
+tags = +jira;-inbox
+message = Jira message
+
+# Orgmode
+[Filter.2]
+query = 'emacs-orgmode'
+tags = -new;-inbox;+orgmode
+message = orgmode message
+
+# Delete some spam
+[Filter.3]
+query = '\'Office365 Message Center\' via Developers OR from:govdelivery@subscriptions.defense.gov OR from:notifications@facebookmai.com OR from:MPP@em.home.dell.com'
+tags = -inbox;+spam
+message = spam message
+
+# Tag interview emails
+[Filter.4]
+query = 'subject:Interview'
+tags = -inbox;+interview
+message = personal message
+
+[Filter.6]
+query = 'tag:sent'
+tags = -inbox
+message = no archives in inbox
+
+[Filter.7]
+query = 'from:notifications@github.com'
+tags = +github
+message = Github message
+
+[MailMover]
+folders = colin@unbl.ink/INBOX colin@unbl.ink/Archive colin@unbl.ink/Trash colin@castine.town/INBOX colin@castine.town/Archive colin@castine.town/Trash
+
+rename = True
+max_age = 15
+
+colin@unbl.ink/INBOX = 'tag:spam':colin@unbl.ink/Junk 'NOT tag:inbox':colin@unbl.ink/Archive 'tag:trash':colin@unbl.ink/Trash
+colin@unbl.ink/Archive = 'tag:inbox':colin@unbl.ink/INBOX 'tag:trash':colin@unbl.ink/Trash
+colin@unbl.ink/Trash = 'tag:inbox':colin@unbl.ink/INBOX 'tag:archive':colin@unbl.ink/Archive
+
+colin@castine.town/INBOX = 'tag:spam':colin@castine.town/Junk 'NOT tag:inbox':colin@castine.town/Archive 'tag:trash':colin@castine.town/Trash
+colin@castine.town/Archive = 'tag:inbox':colin@castine.town/INBOX 'tag:trash':colin@castine.town/Trash
+colin@castine.town/Trash = 'tag:inbox':colin@castine.town/INBOX 'tag:archive':colin@castine.town/Archive
+
+secstate@sdf.org/INBOX = 'tag:spam':secstate@sdf.org/Junk 'NOT tag:inbox':secstate@sdf.org/Archive 'tag:trash':secstate@sdf.org/Trash
+secstate@sdf.org/Archive = 'tag:inbox':secstate@sdf.org/INBOX 'tag:trash':secstate@sdf.org/Trash
+secstate@sdf.org/Trash = 'tag:inbox':secstate@sdf.org/INBOX 'tag:archive':secstate@sdf.org/Archive
+
+colin.powell@15five.com/INBOX = 'tag:spam':'colin.powell@15five.com/[Gmail]/Spam' 'NOT tag:inbox':'colin.powell@15five.com/[Gmail]/All Mail' 'tag:trash':'colin.powell@15five.com/[Gmail]/Trash'

+ 121 - 0
ansible/roles/muchsync/files/mbsyncrc

@@ -0,0 +1,121 @@
+IMAPAccount unblink
+Host box.unbl.ink
+User colin@unbl.ink
+Pass "{{colin_unblink_email_pass}}"
+SSLType IMAPS
+Port 993
+
+IMAPStore unblink-remote
+account unblink
+
+MaildirStore unblink-local
+# trailing "/" is important
+Path ~/Mail/colin@unbl.ink/
+Inbox ~/Mail/colin@unbl.ink/INBOX
+Trash Trash
+
+Channel unblink-folders
+Master :unblink-remote:
+Slave :unblink-local:
+Patterns "INBOX" "Drafts" "Archive" "Sent" "Trash"
+Create Both
+Expunge Both
+SyncState *
+
+Group unblink
+Channel unblink-folders
+
+IMAPAccount castine
+Host box.castine.town
+User colin@castine.town
+Pass "{{colin_castine_email_pass}}"
+SSLType IMAPS
+Port 993
+
+IMAPStore castine-remote
+account castine
+
+MaildirStore castine-local
+# trailing "/" is important
+Path ~/Mail/colin@castine.town/
+Inbox ~/Mail/colin@castine.town/INBOX
+Trash Trash
+
+Channel castine-folders
+Master :castine-remote:
+Slave :castine-local:
+Patterns "INBOX" "Drafts" "Archive" "Sent" "Trash"
+Create Both
+Expunge Both
+SyncState *
+
+Group castine
+Channel castine-folders
+
+IMAPAccount sdf
+Host mx.sdf.org
+User secstate
+Pass "{{secstate_sdf_email_pass}}"
+SSLType IMAPS
+Port 993
+
+IMAPStore sdf-remote
+account sdf
+
+MaildirStore sdf-local
+# trailing "/" is important
+Path ~/Mail/secstate@sdf.org/
+Inbox ~/Mail/secstate@sdf.org/INBOX
+Trash Trash
+
+Channel sdf-folders
+Master :sdf-remote:
+Slave :sdf-local:
+Patterns "INBOX" "Drafts" "Sent"
+Create Both
+Expunge Both
+SyncState *
+
+Group sdf
+Channel sdf-folders
+
+IMAPAccount 15five
+Host imap.gmail.com
+User colin.powell@15five.com
+Pass "{{colin_powell_15five_email_pass}}"
+SSLType IMAPS
+CertificateFile /usr/local/share/certs/ca-root-nss.crt
+Port 993
+
+IMAPStore 15five-remote
+Account 15five
+
+MaildirStore 15five-local
+SubFolders Legacy
+Path ~/Mail/colin.powell@15five.com/
+Inbox ~/Mail/colin.powell@15five.com/INBOX
+
+Channel 15five-default
+Master :15five-remote:
+Slave :15five-local:
+Patterns * ![Gmail]*
+Create Both
+SyncState *
+
+Channel 15five-sent
+Master :15five-remote:"[Gmail]/Sent Mail"
+Slave :15five-local:Sent
+Create Slave
+Sync Pull
+
+Channel 15five-trash
+Master :15five-remote:"[Gmail]/Trash"
+Slave :15five-local:Trash
+Create Slave
+Sync Pull
+
+Group 15five
+Channel 15five-default
+Channel 15five-sent
+Channel 15five-trash
+

+ 38 - 0
ansible/roles/muchsync/tasks/main.ymml

@@ -0,0 +1,38 @@
+---
+- name: Package cache updated
+  shell: pkg update -f
+
+- name: Dependencies installed
+  pkgng:
+    name: "git py37-alot openssl pkgconf sqlite autotools"
+    state: present
+
+- name: Muchsync release fetched
+  unarchive:
+    src: http://www.muchsync.org/src/muchsync-6.tar.gz
+    dest: /usr/local/src/muchsync/
+    remote_src: yes
+
+- name: Muchsync built and installed
+  shell:
+    cmd: ./configure && make && make install
+    chdir: /usr/local/src/muchsync
+
+- name: Checkmail script installed
+  copy:
+    src: checkmail
+    dest: /usr/local/bin/checkmail
+    owner: root
+    mode: 0744
+
+- name: Run checkmail once
+  shell: checkmail
+
+- name: Checkmail cronjob configured
+  cron:
+    name: "Check mail"
+    minute: "*/10"
+    hour: "*"
+    day: "*"
+    month: "*"
+    job: "/usr/local/bin/checkmail