Google is gradually making traditional IMAPS access to gmail.com impossible, in it’s usual opaque way. It is claimed to be a security plus, though, if your data is already on gmail.com, it means that you are already accepting that it can and is spied on, so whether the extra fuss is justified is not so obvious.
Nonetheless, I have a few secondary old boxes on gmail, that I’d like to still extract mails from, not to miss any, without bothering connecting to with a web browser. But the usual fetchmail setup is no longer reliable.
The easiest alternative is to use lieer, notmuch and procmail together.
apt install links notmuch lieer procmail
# set up as regular user
su enduser
boxname=mygoogleuser
mkdir -p ~/mail/$boxname
notmuch
notmuch new
cd ~/mail/$boxname
gmi init $boxname@gmail.com
# at this moment, you'll get an URL to connect to gmail.com
# with a web browser
#
# if it started links instead, exit cleanly (no control-C)
# to get the URL
#
# that will then return an URL to a localhost:8080
# to no effect if you are on a distant server
# in this case, just run, in an another terminal
links "localhost:8080/..."
# or run `gmi --noauth_local_webserver auth` and use the URL
# on another browser on another computer
The setup should be ok. You can check and toy a bit with the setup:
gmi sync
notmuch new
notmuch search tag:unread
notmuch show --format=mbox thread:000000000000009c
Then you should mark all previous messages as read:
for thread in `notmuch search --output=threads tag:unread`; do echo "$thread" && notmuch tag -unread "$thread" ; done
gmi push
Finally, we set up the mail forward (in my case, the fetch action is done in a dedicated container, so it is forwarded to ‘user’ by SMTP to the destination host, but procmail allows any setup) and fetchmail script: each new unread mail is forwarded and then marked as read:
echo ':0
! user' > ~/.procmail
echo '#!/bin/bash
BOXES=""
# no concurrent run
if pidof -o %PPID -x "fetchmail.sh">/dev/null; then
exit 1
fi
for box in $BOXES; do
cd ~/mail/$box/
# get data
gmi pull --quiet
notmuch new --quiet >/dev/null
for thread in `notmuch search --output=threads tag:unread`; do
# send unread through procmail
notmuch show --format=mbox "$thread" | procmail
# mark as read
notmuch tag -unread "$thread"
done
# send data
gmi push --quiet
cd
done
# EOF' > ~/fetchmail.sh
chmod +x ~/fetchmail.sh
Then it is enough to call the script (with BOXES=”boxname” properly set) and to include it in cronjob, like using crontab -e
`
notmuch does not remove mails.