从 unix shell 脚本发送简单的 ASCII 文本电子邮件

从 unix shell 脚本发送简单的 ASCII 文本电子邮件

我想制作一个简单的 bash 脚本,如果 HTTP_Code 高于 299,则卷曲网站并发送电子邮件。

我不太喜欢mailCLI 工具。我想使用 SMTP 服务器发送监控邮件。

如果你们中有人可以指导我如何帮mail我发送东西,那就太好了。

/编辑:澄清一下,每当我尝试使用mail没有 bash 脚本的命令时,电子邮件都会返回主题Undelivered Mail Returned to Sender

答案1

从历史上看,大多数 Linux 和 *NIX 工具都依赖于服务器配置了功能齐全的电子邮件子系统、邮件传输代理或大都会运输署,仅仅将消息从本地账户传递到本地邮箱。

从历史上看,这是 sendmail,但已经开发出了大量替代方案,如维基百科上的这个列表; exim 和 postfix 非常流行。这段历史留下的一件事是,无论实际安装了什么 MTA,它都会提供一个向后兼容的/usr/lib/sendmail接口(通常是符号链接),库、脚本和实用程序可以使用该接口发送电子邮件。这些工具不了解发送电子邮件所需的任何协议,它们只是生成消息并将其提供给sendmail通过 stdin 然后就完成。

您的评论表明您的问题主要是由于您的系统上没有配置 MTA 所致。这就是该mail命令无法发送外部电子邮件的原因,也是其他所有依赖(幕后)默认/usr/lib/sendmail邮件界面的操作也会失败的原因。

您有两个选择:

  • 在您的系统上正确配置 MTA。
    这可以是“适当”的完整 MTA,它自己完成所有投递(例如,老牌的 sendmail、exim 或 postfix 等),或者您可以配置更轻量级的 MTA,它只会将 SMTP 消息转发到另一个 SMTP 服务器(邮件中继或智能主机),以确保为您进行投递(例如,msmtp 或 ssmtpd,尽管大多数完整 MTA 也可以配置为执行此操作)。

  • 使用更复杂的邮件客户端/脚本,它不依赖于系统/usr/lib/sendmail邮件接口,但您可以将其配置为使用外部 (SMTP) 服务器发送电子邮件。该外部 (SMTP) 服务器可以是您的邮件提供商、您的公司/ISP 的中继服务或事务性电子邮件提供商。
    在脚本中使用的这种更强大的命令行工具的一个示例是常见的mailx, 例如:

    mailx -v -s "$EMAIL_SUBJECT" \
      -S smtp-use-starttls \
      -S ssl-verify=ignore \
      -S smtp-auth=login \
      -S smtp=smtp://smtp.example.com:587 \
      -S from="$FROM_EMAIL_ADDRESS($FRIENDLY_NAME)" \
      -S smtp-auth-user=$EMAIL_ACCOUNT \
      -S smtp-auth-password=$EMAIL_ACCOUNT_PASSWORD \
      -S ssl-verify=ignore \
      $TO_EMAIL_ADDRESS
    

答案2

从 unix shell 脚本发送简单的 ASCII 文本电子邮件

我认为直接使用 sendmail(或类似 sendmail 的程序)发送简单的邮件更好,也更便携 ASCII纯文本电子邮件信息。在电子邮件中使用非 ASCII 字母(例如 ń)需要更复杂的方法。

#!/bin/sh

[email protected]

# Empty line after email headers is REQUIRED
/usr/sbin/sendmail -i -- $TO <<END
Subject: Email test message
To: $TO

Email test message body.
END

额外信息:

  1. 如果您使用 postfix/exim/... 作为您的本地 MTA/SMTP 服务器,那么它应该提供“类似 sendmail”的程序 - 名为 sendmail 的程序,支持用于发送电子邮件的基本 sendmail 命令行选项。
  2. 如果你使用较新的 postfix,也会Date:使用当前日期以提供的格式生成标题/bin/date -R

相关内容