自动化是目前的热门话题。在我的日常工作中,作为 SRE,我的职责之一是尽可能自动化许多重复性任务。但是我们中有多少人在日常的非工作生活中这样做呢?今年,我专注于自动化繁琐的工作,以便我们可以专注于重要的事情。
在“正常时期”,我和我的妻子经常旅行。正如任何经常旅行的人都知道的那样,网络连接可能非常昂贵。我们最近乘坐了一次邮轮,“高级”船上互联网 7 天的费用高达 200 美元,即使这样,它在速度和拥塞方面也具有卫星互联网的所有缺点。因此,为了让我的生活更轻松,我设置了 offlineimap 来下载我的邮件,dovecot 让我使用 IMAP 客户端来阅读我的邮件,以及 msmtp 从我的各种帐户发送邮件。我在 2020 年 介绍了大部分设置,其余部分在网上很多地方都有文档记录。
通常没有讨论的是,您仍然需要在线才能发送邮件。最常用的邮件发送推荐解决方案是 msmtp,如果它无法连接到所需的主机,它总是会拒绝邮件。但它确实有一个守护进程选项 (msmtpd
) 可用于接受本地 SMTP 连接并将它们转发到另一个程序。默认情况下,这是 msmtp
本身。但是,我不想现在发送东西,我想在我有连接时发送东西,这时我偶然发现了 putmail。
Putmail
是一组 Python 脚本,它根据邮件消息中的 From
地址将邮件发送到预配置的 smtp 服务器。它很稳定(自 2011 年以来未修改),并且可以正常工作。如果您像我一样,有多个电子邮件地址必须通过多个 SMTP 中继发送,那么这就是您需要的。您从中发送的每个电子邮件地址都有自己的配置文件,并且由于 putmail
根据消息本身决定使用哪个配置文件,因此无需在单个邮件客户端中设置多个发送设置。
例如,要使用 gmail
帐户发送邮件,您需要创建文件 .putmail/yourname@gmail.com
并填写以下信息。
yourname@gmail.com putmail configuration
[config]
email = yourname@gmail.com
server = smtp.gmail.com
port = 587
username = yourname@gmail.com
password = XXXXXXXXXXXXXXXXX
tls = on
就是这样。配置邮件客户端以通过 putmail.py
而不是 sendmail
或 msmtp
发送邮件,然后发送一条消息。
接下来最好的东西是 putmail_enque.py
和 putmail_dequeue.py
脚本。第一个脚本接收一封电子邮件并存储它以供稍后发送。第二个脚本循环遍历队列并传递邮件。通过指定 putmail_enqueue.py
作为 msmtpd
运行的程序,我现在可以“发送”电子邮件,它只是等待我稍后运行 putmail_dequeue.py
。这是我的 msmtpd
启动命令,指定 putmail_enqueue.py
作为用于邮件传递的项目。
msmtpd --port=1025 --log=/tmp/msmtpd.log --command='putmail_enqueue.py -f %F' -
我在 offlineimap
中使用以下脚本作为 presynchook
来检查我是否已连接,如果已连接,则发送邮件。
#!/bin/bash
echo Sending queued messages \(if any\)
QUEUEDMAIL=$(find $HOME/.putmail/queue -type f | wc -l)
if [ $QUEUEDMAIL -ne 0 ]; then
ping -n -c 1 imap.gmail.com >/dev/null 2>/dev/null
if [ $? -eq 0 ]; then
putmail_dequeue.py
fi
fi
完成所有这些操作后,我可以使用任何我想要的邮件客户端,并通过标准的 SMTP 调用 localhost:1025
发送邮件,并在下次我连接到互联网时将其传递。最棒的是,无论我是在家还是在旅行,我都不必更改我的电子邮件工作流程——这一切都在后台自动发生。
评论已关闭。