我想制作一个简单的 bash 脚本,如果 HTTP_Code 高于 299,则卷曲网站并发送电子邮件。
我不太喜欢mail
CLI 工具。我想使用 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
额外信息:
- 如果您使用 postfix/exim/... 作为您的本地 MTA/SMTP 服务器,那么它应该提供“类似 sendmail”的程序 - 名为 sendmail 的程序,支持用于发送电子邮件的基本 sendmail 命令行选项。
- 如果你使用较新的 postfix,也会
Date:
使用当前日期以提供的格式生成标题/bin/date -R