配置 openSUSE 系统本地账户的邮件发送和接收方式

在本地安装的 openSUSE Tumbleweed 通常没有固定 IP 地址,也就无法设置自己的域名。此时发送系统邮件的地址为 root@localhost 或者 username@localhost,而且是未加密的。系统邮件的接收者也通常是这两种邮件地址。水景一页希望系统发送的邮件提醒能以加密连接的方式送到指定的电邮帐户。

为了让系统将错误报告或者提醒之类的通过加密连接发送到自己常用的电邮账户,并且顺便修改一下发送地址,可进行如下的设置。

检查 postfix 状态

检查是否开启 postfix,

$ sudo systemctl status postfix
 [sudo] password for root:
 ● postfix.service - Postfix Mail Transport Agent
 Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: enabled)
 Active: active (running) ... ...
 ... ... ...

如果未开启,可以启用它,

$ sudo systemctl enable postfix
$ sudo systemctl start postfix

设置 TLS 加密连接发送邮件

检查状态,

$ cat /etc/postfix/main.cf | grep smtp_tls_security_level

如果没有返回内容则说明多半还未配置。配置为「可以」的话就启用加密,

$ sudo bash -c 'echo "smtp_tls_security_level = may" >> /etc/postfix/main.cf'

更详细的介绍可以参考「加密服务器发出的电子邮件」。

设置发送方邮件地址格式

:如果拥有自己的域名,比如水景一页的 cnzhx.net,就可以设置很复杂的多主机邮件系统(可以参考 postfix readmeopenSUSE Wiki),甚至可以配置系统用户接收系统邮件的地址为一般邮件地址。但是这里并不打算用个人电脑执行一些邮件服务器的操作,而只是想让系统发出的邮件不是类似于 root@localhost 这样的无法区分的格式,虽然这样也没什么大碍。

默认的发送地址为 *@localhost,这个由设置中的 myhostname 指定。先检查一下,

$ cat /etc/postfix/main.cf | grep -n '^myhostname ='
 698:myhostname = localhost

表示在第 698 行定义了。注释掉此行即可。下面是省事的命令行指令,

$ sed -i 's/myhostname = localhost/#myhostname = localhost/' /etc/postfix/main.cf

然后在该文件结尾添加上自己的。可以用自己的域名,也可以随便选个自己喜欢的字符串(但要稍稍注意格式,最好是全都是字母,且最好不要与著名的域名同名)。我选择了自己的子域名(但是并没有配置该子域名的 DNS 解析),

$ sudo bash -c 'echo "myhostname = laptop.cnzhx.net" >> /etc/postfix/main.cf'

到这里就可以重新启动 postfix 并测试一下了。向自己的邮箱发封邮件试试看,

$ mail -s "Test local sent mail" sjyy@cnzhx.net
.

(那个点 .mail 指令的结束符号)一般这种邮件都会被邮件服务器自动放到垃圾邮件箱里。如果收到了,将发件人地址添加到地址簿就好了。

当然还有更好的方法就是设置 postfix 使用别的邮件服务器,比如 gmail 的 smtp,来发送邮件。这里就不弄了,可以参考 Linode 上的一篇教程

设置系统用户接收邮件地址

默认的系统邮件比如错误报告或者提醒之类的都是发送给本地地址,如 root@localhost 或者 username@localhost。要查看的话需要登录到对应的用户下然后在命令行输入 mail 并回车就可以看到邮件数量提示。然后根据提示可以将文件内容 cat 显示到终端上。估计一般人是懒得时不时去查看系统邮件的。还是让它发送到自己的常用邮箱里比较好,可以及时看到。

修改系统用户的接收邮件地址可以通过给相应的系统用户设置邮件转发地址来实现。比如,要将 root 用户的邮件转发到管理员自己的邮箱,在 root 用户目录下创建一个文件 .forward,文件内容写入希望转发到的地址即可。参考 postfix document

例如,为用户 username 设置转发地址 sjyy@cnzhx.net,

$ touch /home/username/.forward
$ echo 'sjyy@cnzhx.net' > /home/username/.forward

这样设置之后收到的邮件的收件人还是前面设置的系统用户的本地地址(比如 username@localhost 或者 username@laptop.cnzhx.net),但是会出现在 sjyy@cnzhx.net 邮箱里(转发的嘛)。

问题、检查和管理

但是有的时候电脑所连接的网络,比如公司网、校园网或者 ISP 的网络可能会封锁一些端口的访问,那么系统可能无法通过当前连接发送邮件。使用 mailq 可以查看通过 postfix 发送但还没有发送成功的邮件,

$ mailq
 -Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
 93BE811DF* 588 Fri Aug 4 10:08:59 username@laptop.cnzhx.net
 sjyy@cnzhx.net

-- 0 Kbytes in 1 Request.

要删除队列中的所有待发邮件(需要管理员权限),

$ sudo postsuper -d ALL

要删除推迟(defer)队列中的邮件,

$ sudo postsuper -d ALL deferred

大概这些就够日常使用了。

实际上所有使用 postfix 的系统基本上都可以用类似的方法来设置吧。只不过我只在 openSUSE Tumbleweed 上试过。

因为对 postfix 了解不多,所以只能找到目前这样一个粗糙得很的配置方法。如果有朋友了解更好的配置方式,还请在评论区分享一下 :-)©

本文发表于水景一页。永久链接:<https://cnzhx.net/blog/opensuse-tumbleweed-local-mail-setting/>。转载请保留此信息及相应链接。

雁过留声,人过留名

电子邮件地址不会被公开。 必填项已用*标注

特别提示:与当前文章主题无关的讨论相关但需要较多讨论求助信息请发布到水景一页讨论区的相应版块,谢谢您的理解与合作!请参考本站互助指南
您可以在评论中使用如下的 HTML 标记来辅助表达: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>