如何使crontab通过输出向我发送电子邮件?


45

如何使crontab通过其工作输出向我发送电子邮件?我有MAILTO=redacted@yahoo.com.au上述工作,但没有用。

我知道我需要使用Postfix或Sendmail之类的东西,但是对于我一生来说,我无法找到实现该目标的方法。我已经搜索了有关设置Postfix的简单指南,但是它们都非常复杂,希望您能够设置整个服务器来发送和接收电子邮件并了解所有条款(例如什么是域名)发送邮件?)。

我只想让crontab给我发电子邮件。为什么这么难?

附加信息:

我的crontab文件如下所示:

MAILTO=redacted@yahoo.com.au
1 0 * * * ~/Desktop/toskymesh.sh
59 6 * * * ~/Desktop/tooptus.sh
0 3 * * * snapraid sync

更多其他信息:

输出 ps -ef | grep '[s]endmail'

root 6840 1370 0 10:26 ? 00:00:00 sendmail: MTA: accepting connections

我确定cron可以正常工作,但是echo Test | mail -s Test redacted@yahoo.com.au无论如何我都在测试mail命令。


@shellter忘记标记您了。
Clonkex 2014年

很好的测试!您应该在原始问题中包含此信息。在这一点上,我已经能够提供帮助。您的方向正确,但是,“为什么如此困难” ..对不起,那就是Linux / Unix是一个高度可配置的系统。每个人都有自己的特殊情况,必须更改其配置。
剥壳机2014年

得到您的回应,但我会花几个小时(可能)。再次在此处搜索sendmail setup。祝好运!
剥壳机2014年

@shellter我刚刚意识到这里有日志mail。在其中之一中,它表示:这Diagnostic-Code: SMTP; 553 5.7.1 [BL21] Connections will not be accepted from [MyIPRedacted], because the ip is in Spamhaus's list; see http://postmaster.yahoo.com/550-bl23.html是否表示命令正在运行,但Yahoo阻止了邮件?
Clonkex 2014年

超出了我的薪水等级,但这是一个非常明确的信息,因此看起来是这样。您可能知道,请尝试从其他IP发送,看看它是否可以通过,或者错误消息是否更改。你知道http://webmasters.stackexchange.com吗?他们可能会更好地帮助您,但是chat.stackexchange.com/rooms/524/webmasters似乎所有问题都受到欢迎(嗯,您可能需要更多代表才能加入,您是否在任何其他stackexchange网站上?)祝您好运。
剥壳机2014年

Answers:


33

最后我用了sSMTP。这是远远比简单或者Postfixsendmail和精美的做这项工作。

为了将来参考,以下是将sSMTP与Yahoo Mail结合使用的方法(不用担心,它远比看起来复杂得多):

  • 使用Synaptic下载ssmtp。或者,您可以运行sudo apt-get install ssmtp

  • 在/etc/ssmtp/ssmtp.conf中打开配置文件。

  • 使配置如下所示:

root=[yourRealEmail@yahoo.com.au]
mailhub=smtp.mail.yahoo.com:587
FromLineOverride=YES
UseSTARTTLS=YES
AuthUser=[yourRealEmail@yahoo.com.au]
AuthPass=[yourRealYahooPassword]
TLS_CA_File=~/cert.pem
  • 使用OpenSSL创建cert.pem文件。我使用了命令openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 9999 -nodes此处有更多信息)。您可以将文件粘贴到任何位置,但我只是将其夹在〜/中。无论放在何处,请确保将TLS_CA_File=ssmtp.conf中的行指向正确的位置。

  • 打开文件/etc/ssmtp/revaliases并添加行[yourPCUsername]:[yourRealEmail@yahoo.com.au]:smtp.mail.yahoo.com:587。如果您以root身份运行,我认为您需要添加另一行以“ root”替换您的名字。

  • 就是这样,您很好!要测试,最简单的方法(IMO)是创建一个包含以下内容的文件:

To: [yourRealEmail@yahoo.com.au]
From: "whateverYaWant" <[yourRealEmail@yahoo.com.au]>
Subject: Some Notifying Email
MIME-Version: 1.0
Content-Type: text/plain

Body of your email goes here! Hello world!
  • 保存并关闭文件,然后检查是否未安装真正的sendmail,请运行sendmail -V-它应显示为“ sSMTP”。
  • 最后,运行cat fileWithEmailInIt.txt | sendmail -i -t,然后等待几秒钟(10-30),然后检查您的电子邮件!

显然,[yourRealEmail@yahoo.com.au]用您的电子邮件(不带括号)和[yourRealYahooPassword]Yahoo Mail密码(同样,不带括号)替换。

补充说明:如果您在使用Gmail时遇到问题,请尝试使用此答案的选项1 (感谢Ben Creasy提供该信息)。


那里。那必须做。我花了太多时间摆弄愚蠢的格式。
Clonkex 2014年

.pem文件的作用是什么?我看到本教程不包含一个教程:havetheknowhow.com/Configure-the-server/Install-ssmtp.html
理查德

1
对于Gmail,我跑进serverfault.com/questions/635139/...和不得不启用不够安全的应用访问
奔折皱

2
感谢您的sSMTP建议。UbuntuWiki提供了有用的指南(但请不要使用电子邮件地址hostname作为当前显示的地址)。该答案表明您可以使用默认服务器证书,但是我发现不需要TLS_CA_File=通过GMail发送的行。
马克·贝里

2
@MattM。未弃用,只是未维护。在非生产环境中使用sSMTP应该很好:)
Clonkex

15

安装Postfix。它比大多数其他软件包都要复杂,但仍然不复杂

sudo apt-get install postfix

选择“ Internet站点”,然后接受所有默认值。然后,我们只需要停止外部连接,就可以将其变成“ 空客户端 ”。运行:sudoedit /etc/postfix/main.cf并找到inet_interfaces设置(接近尾声)并将其更改为loopback-only,如下所示:

inet_interfaces = loopback-only

最后,使用重新启动Postfix sudo /etc/init.d/postfix restart(不会重新加载)。

现在,您将安装一个Postfix安装程序,该程序不会中继外部计算机的电子邮件,它将仅接受127.0.0.1(对于IPv6为:: 1)上的连接。


单独说明,您的cron行可能不起作用,因为您使用的是非相对路径以及使用Bash替换的路径。sh无法理解~,并且可能没有适当的PATH设置。因此,将它们替换为(我只是在猜测实际路径):

1 0 * * *   /home/clonkex/Desktop/toskymesh.sh
59 6 * * *  /home/clonkex/Desktop/tooptus.sh
0 3 * * *   /usr/bin/snapraid sync

并且,如果您的脚本需要从特定目录运行,请确保将其cd放入正确的目录中。不要以为那cron是在正确的地方,因为它可能不会。


谢谢,但是Postfix 复杂,因为仅仅是因为似乎没有简单的指南。无论如何,我使用sSMTP可以正常工作,并且确实很简单(尽管仍然需要很多摆弄和随机猜测才能使其真正起作用),而sSMTP确实可以满足我的需要。我想发布一个答案,但忘记了-我实际上设法销毁了我的OS安装,因此一旦完全恢复正常,我将发布自己的答案:)
Clonkex 2014年

实际上我的计划工作与~/Desktop/
Clonkex 2014年

2
我需要inet_interfaces = localhost。仅回送给了我postfix: fatal: config variable inet_interfaces: host not found: loopback-only
craq

3

我的exim4祝您好运。

sudo apt-get install alpine exim4 mailutils eximon4 spf-tools-perl swaks

(高山只是我喜欢使用的邮件客户端)

之后,我跑了

sudo dpkg-reconfigure exim4-config

然后按照提示进行操作。此页面:https : //help.ubuntu.com/community/Exim4也非常有用。我花了大约10分钟才能使其运行。


1

来自sSMTP联机帮助页:“它不做别名,这必须在用户代理或mailhub中完成。它也不尊重.forwards,这必须在接收主机上完成。特别是不会传递给管道。 ”

因此,如果您想接收所有发送给外部电子邮件的root用户的msg,则使用sSMTP是个坏主意,因为它不支持别名。

相反,您可以使用用户后缀。它仍然非常简单。这是将gmail用作smtp来发送消息的方法:

sudo apt-get install postfix mailutils

邮件配置的常规类型:卫星系统

系统邮件名称:邮件服务器的首选标准名称,例如mail.example.com

SMTP中继主机(无空白):[smtp.gmail.com]:587

添加到/etc/postfix/main.cf:

smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous

创建/ etc / postfix / sasl / sasl_passwd

[smtp.gmail.com]:587 emailtouseforsending@gmail.com:password

然后:

sudo postmap /etc/postfix/sasl/sasl_passwd
sudo chown -R root:postfix /etc/postfix/sasl
sudo chmod 750 /etc/postfix/sasl
sudo chmod 640 /etc/postfix/sasl/sasl_passwd*

编辑/ etc / aliases并添加:

root: email@example.com

最后,运行:

sudo newaliases
sudo systemctl stop postfix.service
sudo systemctl start postfix.service

现在,您可以测试重定向是否有效:

echo "Test to root." | mail -s "Test message to root" root

希望能帮助到你。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.