在没有网络的情况下旅行,仍然可以使用 putmail 发送电子邮件

配置您的邮件客户端,以便在下次连接到互联网时自动发送电子邮件。
2 位读者喜欢这篇文章。
Chat via email

自动化是目前的热门话题。在我的日常工作中,作为 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 而不是 sendmailmsmtp 发送邮件,然后发送一条消息。

接下来最好的东西是 putmail_enque.pyputmail_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 发送邮件,并在下次我连接到互联网时将其传递。最棒的是,无论我是在家还是在旅行,我都不必更改我的电子邮件工作流程——这一切都在后台自动发生。

接下来阅读
标签
User profile image.
Kevin Sonney 是一位技术专业人士、媒体制作人和播客主持人。作为 Linux 系统管理员和开源倡导者,Kevin 在 IT 行业拥有超过 25 年的经验,在开源领域拥有超过 15 年的经验。他目前在 elastic 担任 SRE。

评论已关闭。

© . All rights reserved.