当前位置: 首页>>技术教程>>正文


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

, ,

问题描述

如何使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命令。

最佳方法

最后,我使用了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(更多信息here)。您可以将文件粘贴到任何位置,但我只是将其夹在〜/中。无论放在何处,请确保将ssmtp.conf中的TLS_CA_File=行指向正确的位置。

  • 打开文件/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时遇到问题,请尝试this answer的选项1(感谢Ben Creasy提供该信息)。

次佳方法

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

sudo apt-get install postfix

选择”Internet Site”,然后接受所有默认设置。然后,我们只需要停止外部连接,然后将其转换为“ null client”即可。运行:sudoedit /etc/postfix/main.cf并找到inet_interfaces设置(接近末尾),并将其更改为loopback-only,如下所示:

inet_interfaces = loopback-only

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

现在,您将安装一个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不会在正确的位置。

第三种方法

我的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分钟才能使其运行。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8043.html,未经允许,请勿转载。