跳转至内容

sSMTP

来自 ArchWiki

sSMTP 是一个将电子邮件从本地计算机发送到配置的邮件主机(mailhub)的程序。它不是一个邮件服务器(如功能丰富的邮件服务器 sendmail),不接收邮件、扩展别名或管理队列。它的主要用途之一是将自动化邮件(如系统警报)从您的机器转发到外部电子邮件地址。

注意 sSMTP 已经不再维护。请考虑改用 msmtpOpenSMTPD 等替代品。

安装

安装软件包 ssmtpAUR

转发到 Gmail 邮件服务器

本文或本章节已过时。

原因: 没有两步验证的情况下,已无法访问 不安全的应用程序。 (请在 Talk:SSMTP 中讨论)

要配置 sSMTP,您需要编辑其配置文件 (/etc/ssmtp/ssmtp.conf) 并输入您的帐户设置。

  • 如果您的 Gmail 帐户受两步验证保护,您需要生成一个唯一的 应用密码,用于 ssmtp.conf。您可以在您的 应用密码 页面进行生成。在 AuthUser 行中使用您的 Gmail 用户名(不是应用名称),并在 AuthPass 行中使用生成的 16 位密码,密码中的空格可以省略。
  • 如果您使用两步验证,您需要 允许访问不安全的应用程序。您可以在您的 不安全的应用程序 页面进行设置。
/etc/ssmtp/ssmtp.conf
# The user that gets all the mails (UID < 1000, usually the admin)
root=username@gmail.com

# The mail server (where the mail is sent to), both port 465 or 587 should be acceptable
# See also https://support.google.com/mail/answer/78799
mailhub=smtp.gmail.com:465

# The address where the mail appears to come from for user authentication.
rewriteDomain=gmail.com

# The full hostname.  Must be correctly formed, fully qualified domain name or GMail will reject connection.
hostname=yourlocalhost.yourlocaldomain.tld

# Use implicit TLS (port 465). When using port 587, change UseSTARTTLS=Yes
TLS_CA_FILE=/etc/ssl/certs/ca-certificates.crt
UseTLS=Yes
UseSTARTTLS=No

# Username/Password
AuthUser=username
AuthPass=password
AuthMethod=LOGIN

# Email 'From header's can override the default domain?
FromLineOverride=yes
注意 请注意,这里显示的配置是 Gmail 的示例,您可能需要使用其他设置。如果无法按预期工作,请阅读 man 手册页 ssmtp(8)

为本地用户名创建别名(可选)

/etc/ssmtp/revaliases
root:username@gmail.com:smtp.gmail.com:465
mainuser:username@gmail.com:smtp.gmail.com:465

测试 Gmail 服务器是否能正确转发您的邮件

$ echo -e 'Subject: test\n\nTesting ssmtp' | sendmail -v tousername@example.com

通过编辑 /etc/passwd 来更改“From”文本,以便接收来自“root at myhost”的邮件,而不仅仅是“root”。

# chfn -f 'root at myhost' root
# chfn -f 'mainuser at myhost' mainuser

这将把 /etc/passwd 修改为

$ grep myhost /etc/passwd
root:x:0:0:root at myhost,,,:/root:/bin/bash
mainuser:x:1000:1000:mainuser at myhost,,,:/home/mainuser:/bin/bash

安全

由于您的电子邮件密码以明文形式存储在 /etc/ssmtp/ssmtp.conf 中,因此该文件必须安全。默认情况下,整个 /etc/ssmtp 目录仅供 root 和 mail 组访问。/usr/bin/ssmtp 二进制文件以 mail 组身份运行,可以读取此文件。没有理由将您自己或其他用户添加到 mail 组。

发送电子邮件

要从终端发送电子邮件,请执行

$ echo -e "Subject: this is the subject\n\nthis is the body" | mail user@example.com

或以交互方式发送,如下所示:

$ sendmail username@example.com
Subject: this is my subject
CC: optional@example.com

Now I can type the body here
注意 使用 mail 命令进行交互式发送时,键入主题:主题和其他标题后,按两次 Enter 键,然后键入正文。在空白行上按 Ctrl+d 结束您的消息并自动发送。

发送电子邮件的另一种方法是创建一个文本文件,然后使用 ssmtpmail 命令发送

test-mail.txt
To:username@example.com
From:youraccount@gmail.com
Subject: Test

This is a test mail.

发送 test-mail.txt 文件

$ sendmail -t < test-mail.txt

一些用户可能更喜欢 s-nails-nail)、mailutilsmailutils)或其他 mailx 提供商的 mail 语法。例如,mail 提供了将主题作为参数的选项。mail 需要 sendmail 并且可以使用 ssmtpAUR 作为 sendmail

附件

如果您需要添加附件,请安装并配置 MuttMsmtp,然后参考 nixcraft 上的提示。

或者,您可以使用 uuencode(来自 sharutils)来附加文件。要将 'file.txt' 附加为 'myfile.txt'

$ uuencode file.txt myfile.txt | sendmail user@example.com

发送邮件给本地用户

发送给本地用户(或任何不以 @fqdn 结尾的地址)的消息会以两种方式之一处理:

  • 目标用户 UID < 1000 - 地址将被 root=user@fqdn/etc/ssmtp/ssmtp.conf 中定义的地址替换。
  • 目标用户 UID ≥ 1000 或用户未知 - rewriteDomain=/etc/ssmtp/ssmtp.conf 中的值将被附加到用户 ID 的末尾。

如果您的系统上的本地用户在您的 rewriteDomain 处不是有效用户,但这却收到了来自系统服务的邮件,这可能会导致问题,尤其是当您的 rewrite domain 是一个公共服务,如 gmail.com 时。

为了解决这个问题,您可以使用 s-nails-nail)中的 mail 命令。mail 命令可以读取 /etc/mail.rc 中定义的别名。示例:

$ grep alias /etc/mail.rc
alias git git<username@example.com>
alias archuser 'My Name'<someone@example.com>

然后,您可以将消息通过管道传递给 mail,而不是 sendmail

$ echo -e "Hey archuser." | mail archuser
注意 您可能会考虑将 sendmail 符号链接到 /bin/mail。请不要这样做。sendmailmail 在参数和标准输入方面有不同的语法。最好找到直接使用 sendmail 的进程,并配置它们使用 mail 来代替。

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.