home · contact · privacy
Add fetchmail and pingmail to mail setup.
authorChristian Heller <c.heller@plomlompom.de>
Mon, 18 May 2020 21:53:20 +0000 (23:53 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Mon, 18 May 2020 21:53:20 +0000 (23:53 +0200)
buster/apt-mark/mail
buster/etc_files/mail/etc/systemd/system/fetchmail.service [new file with mode: 0644]
buster/etc_files/mail/etc/systemd/system/pingmail.service [new file with mode: 0644]
buster/etc_files/mail/etc/systemd/system/timers.target.wants/fetchmail.timer [new file with mode: 0644]
buster/etc_files/mail/etc/systemd/system/timers.target.wants/pingmail.timer [new file with mode: 0644]
buster/other_files/fetchmailrc [new file with mode: 0755]
buster/other_files/pingmailrc [new file with mode: 0644]
buster/setup_scripts/setup_mail.sh

index 0956960c7c98ae4e3d9e343822da15b5c1104b50..1ef369d80aa5b02795ec4d241cab2db696372737 100644 (file)
@@ -13,3 +13,5 @@ dovecot-imapd
 # sieve filtering
 dovecot-lmtpd
 dovecot-sieve
+# to funnel mail from additional server
+fetchmail
diff --git a/buster/etc_files/mail/etc/systemd/system/fetchmail.service b/buster/etc_files/mail/etc/systemd/system/fetchmail.service
new file mode 100644 (file)
index 0000000..dc8acb4
--- /dev/null
@@ -0,0 +1,8 @@
+[Unit]
+Description=Run plom's fetchmail
+
+[Service]
+Type=oneshot
+User=plom
+# fetchmail returns 1 when no new mail, we want to catch that
+ExecStart=/bin/sh -c 'fetchmail || [ $? -eq 1 ]'
diff --git a/buster/etc_files/mail/etc/systemd/system/pingmail.service b/buster/etc_files/mail/etc/systemd/system/pingmail.service
new file mode 100644 (file)
index 0000000..e332114
--- /dev/null
@@ -0,0 +1,7 @@
+[Unit]
+Description=Run pingmail check
+
+[Service]
+Type=oneshot
+User=plom
+ExecStart=/bin/sh -c '~/pingmail/pingmail check'
diff --git a/buster/etc_files/mail/etc/systemd/system/timers.target.wants/fetchmail.timer b/buster/etc_files/mail/etc/systemd/system/timers.target.wants/fetchmail.timer
new file mode 100644 (file)
index 0000000..c67e8e7
--- /dev/null
@@ -0,0 +1,8 @@
+[Unit]
+Description=Run fetchmail once every minute
+
+[Timer]
+OnCalendar=*-*-* *:*:00
+
+[Install]
+WantedBy=timers.target
diff --git a/buster/etc_files/mail/etc/systemd/system/timers.target.wants/pingmail.timer b/buster/etc_files/mail/etc/systemd/system/timers.target.wants/pingmail.timer
new file mode 100644 (file)
index 0000000..dba0c9f
--- /dev/null
@@ -0,0 +1,8 @@
+[Unit]
+Description=Run pingmail check once every hour
+
+[Timer]
+OnCalendar=*-*-* *:00:00
+
+[Install]
+WantedBy=timers.target
diff --git a/buster/other_files/fetchmailrc b/buster/other_files/fetchmailrc
new file mode 100755 (executable)
index 0000000..b437563
--- /dev/null
@@ -0,0 +1,2 @@
+# remove "keep" if you're sure about your setup; it keeps mails on server from getting deleted 
+poll mail.example.com protocol pop3 username "foo@example.com" password "PASSWORD" ssl keep
diff --git a/buster/other_files/pingmailrc b/buster/other_files/pingmailrc
new file mode 100644 (file)
index 0000000..46bcbfe
--- /dev/null
@@ -0,0 +1,45 @@
+# place for test files whose modification times are used to track lifesigns
+testdir=$HOME'/.pingmail'
+
+# modification time is the last time a ping was sent or a lifetime received
+ping_touch=$testdir'/ping_touch'
+
+# modification time is when the count for sending checker a warning mail starts
+reminder_touch=$testdir'/reminder_touch'
+
+# how long to wait for lifesigns before sending a ping; double is time to wait
+# for a lifesign before sending a warning message to checker
+wait_time=86400
+
+# address of the checker, receives warning message after too long wait
+checker_address='bar@example.org'
+
+# address of the checked person, ping is sent here
+checked_address='foo@example.org'
+
+# content of ping message sent to checked person
+subj2checked='[pingmail] Ping!'
+msg2checked='Hi!\n
+\nThis is an automated mail ping from '$checker_address'.
+\nRespond to show that you are still alive!'
+
+# content of warning message sent to checker
+id_target='foo'
+subj2checker='[pingmail] No recent life signs from '$id_target
+reminder_time=`expr $wait_time \* 2`
+msg2checker='pingmail reporting in:\n
+\nNo life signs from '$id_target' for the last '$reminder_time' seconds.
+\nMaybe you should give them a call to check if they are okay.'
+
+# mail client command reading message body from stdin and subject from parameter
+mailclient_s='mail -s'
+
+# mailbox file to check for most recent life sign
+mbox=$HOME'/mail/foo'
+
+# to recursively search for most recent matches to $matchstring as lifesigns
+#maildir=$HOME'/mail'
+
+# pattern to search $maildir for recursively for lifesigns
+#checked_address_escaped=`echo $checked_address | sed 's/\./\\./g'`
+#matchstring='^From: .*('$checked_address_escaped'|alternate@example\.org)'
index a72dc2afd7f8570adec688953431b9391a0afbb8..09ae762dda88f387f03080d7e2114f039b4244fa 100755 (executable)
@@ -39,6 +39,14 @@ sed -i "s/REPLACE_selector_ECALPER/${selector}/g" /etc/opendkim.conf
 cp "${config_tree_prefix}/other_files/dovecot.sieve" /home/plom/.dovecot.sieve
 chown plom:plom /home/plom/.dovecot.sieve
 
+cp "${config_tree_prefix}/other_files/fetchmailrc" /home/plom/.fetchmailrc
+chown plom:plom /home/plom/.fetchmailrc
+chmod 0700 /home/plom/.fetchmailrc
+cp "${config_tree_prefix}/other_files/pingmailrc" /home/plom/.pingmailrc
+chown plom:plom /home/plom/.pingmailrc
+su -lc "cd && git clone https://plomlompom.com/repos/clone/pingmail" plom
+systemctl daemon-reload
+
 # To allow IMAPS access.
 echo "ssl_cert = </etc/letsencrypt/live/$(hostname -f)/fullchain.pem" > /etc/dovecot/conf.d/99-ssl-certs.conf
 echo "ssl_key = </etc/letsencrypt/live/$(hostname -f)/privkey.pem" >> /etc/dovecot/conf.d/99-ssl-certs.conf
@@ -46,19 +54,24 @@ password=$(pwgen -s 100 1)
 #echo 'mail_privileged_group = mail' >> /etc/dovecot/conf.d/99-mail.conf
 echo "plom:${password}" | chpasswd
 
-# Get old mail data.
+# Get old mail data, shutdown old postfix server.
 if [ "${old_server}" != "" ]; then
   cp "${config_tree_prefix}/setup_scripts/prepare_to_meet_server.sh" /home/plom/
-  chown plom:plom /home/plom/prepare_to_meet_server.sh
+  #chown plom:plom /home/plom/prepare_to_meet_server.sh
   su -lc "./prepare_to_meet_server.sh ${old_server}" plom
   read -p'Hit Enter when you are done.' ignore
   rm /home/plom/prepare_to_meet_server.sh
+  su -lc "scp plom@${old_server}:.dovecot.sieve ~" plom
+  su -lc "scp plom@${old_server}:.fetchmailrc ~" plom
+  su -lc "scp plom@${old_server}:.pingmailrc ~" plom
+  su -lc "ssh plom@${old_server} \"su -lc 'service postfix stop'\"" plom
   cp "${config_tree_prefix}/setup_scripts/mirror_dir.sh" /home/plom/
   su -lc "./mirror_dir.sh ${old_server} /home/plom/mail" plom
   rm /home/plom/mirror_dir.sh
-  su -lc "scp plom@${old_server}:.dovecot.sieve ~" plom
+  touch /var/mail/plom
+  chown plom:mail /var/mail/plom
+  chmod 0600 /var/mail/plom
   su -lc "scp plom@${old_server}:/var/mail/plom /var/mail/plom" plom
-  su -lc "ssh plom@${old_server} \"su -lc 'service postfix stop'\"" plom
 fi
 
 service opendkim restart