最近发现手机上 GMAIL 总是不提醒新的邮件,并且消息都变成了已读。这使得我总是收不到来自 github 和 gitlab 的消息通知。这个问题很早就出现过了,最近出现得十分频繁,今天我把它解决了。
邮箱服务器与客户端 首先我思考了以下我最近关于邮件做了哪些设置,邮件服务器是我自己配的,客户端则有三个:
Ubuntu 上的mutt
+fetchmail
+maildrop
Andriod 上的GMAIL
Microsoft Flow 其中最后一个是手机上一个提供简易自动化任务的软件,一个月前我设置过检测 GMAIL 邮件并弹出提示,不过因为不好用就把任务删除了。再次检查确定没有任务读取 GMAIL,虽然它看起来最可疑,但却是最先被排除的。其次思考 GMAIL,GMAIL 可能会收到消息但不提醒,但是不会收到消息直接变成已读,所以先保留。最后就是 fetchmail 的检查了。
cron 任务与 fetchmail 以 man page 的自我介绍来说,fetchmail
is a mail-retrieval and forwarding utility.
我用它来拉取邮件列表,cron 任务如下所示
然后我恍然大悟,原本的 cron 任务是每 15 分钟一次,现在被我改成了 5 分钟一次,自此我的 GMAIL 才无法正常获取邮件列表。
真相大白 原来问题处在 fetchmail 身上! GMAIL 能够设置的最短拉取邮件列表的时间就是 15 分钟,以往两者的时间间隔相等,所以 GMAIL 有一定的的概率先拉取邮件,但是当 fetchmail 查询间隔变为 5 分钟之后,GMAIL 就没有一丝机会获取到新的邮件了。
问题解决 刚才的讨论推测出了问题的起因,但是没有涉及到问题的本质,那就是,为什么 fetchmail 拉取邮件之后,邮件被标记成已读?通过查阅资料得知,
fetchmail 标记信息为已读的问题自古就已经存在 有的人没有办法,有的人自己写了插件 我怎么办呢,我端详我的 fetchmail 配置文件,在里面找到一个关键字,imap
。编辑~/.fetchmailrc
:
defaults mda "/usr/bin/maildrop" poll imap.jason233.top proto imap port 143 user jason@jason233.top password ****** mimedecode keep
众所周知,IMAP 和 POP3 都是邮件服务器常用的协议,对于两者的详细区别不再赘述。通俗来讲,POP3 是 “只读” 的,IMAP 是 “同步修改” 的。所以,把 IMAP 换成 POP3 就可以了。
只要过了这一波测试... 还不行。不过小场面,不要慌,继续查阅资料,添加一个 UIDL 参数就可以了。
defaults mda "/usr/bin/maildrop" poll pop3.jason233.top proto po3 port 110 uidl user jason@jason233.top password ****** mimedecode keep
进阶 crontab 通过 cron 任务发桌面提醒我有新邮件。
cron:
*/5 * * * * /home/jason/.local /bin/fetchmail-and-notify
编辑文件fetchmail-and-notify
:
#!/bin/bash export DISPLAY=:0export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus" MAIL_INBOX=~/mail/personal/jason/INBOX LOG_FILE=~/mail/log /notify.log TIMESTAMP_FILE=~/mail/last_check exec 3>>$LOG_FILE write_log () { echo "[$(date +'%Y-%m-%d %H:%M:%S') ] $1 " >&3 } fetchmail last=$(cat $TIMESTAMP_FILE ) echo $(date +%s) >$TIMESTAMP_FILE write_log "Updated timestamp cache." modified=$(stat -c '%Y' "$MAIL_INBOX " ) if [ $((modified - last)) -gt 10 ]; then notify-send "mail" "You have new mail." -i mutt write_log "Sent a notify." fi exec 3>&-
P.S. 关于邮箱服务器的配置
鉴于我的阿里云服务器 25 端口(SMTP)封禁,正常的邮箱设置也就是通过邮件服务器发送邮件给其他人是行不通的。所以我就在本机上又搭了一个邮件服务器,没错我又装了一个 Postfix。