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

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

我如何让 crontab 通过电子邮件将其作业的输出发送给我?我已[email protected]完成上述作业,但不起作用。

我知道我需要使用 Postfix 或 Sendmail 之类的东西,但我无论如何也找不到如何实现这一点。我找了好久才找到一个关于设置 Postfix 的简单指南,但它们都极其复杂,而且要求你设置一整台服务器来发送和接收电子邮件,并了解所有术语(例如,外发电子邮件的域名是什么?)。

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

附加信息:

我的 crontab 文件如下所示:

[email protected]
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 [email protected]

答案1

最后我使用了。它比或sSMTP都简单得多,而且效果很好。Postfixsendmail

为了将来参考,以下是如何将 sSMTP 与 Yahoo Mail 结合使用(不用担心,它比看起来简单得多):

  • 使用包管理器下载 ssmtp。我使用了 Synaptic,但sudo apt-get install ssmtp应该也可以正常工作。

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

  • 使配置看起来像这样:

    [email protected]       <--- Use your real email here
    mailhub=smtp.mail.yahoo.com:587       <--- This will depend on your email provider
    FromLineOverride=YES
    UseSTARTTLS=YES
    [email protected]   <--- Use your real email here
    AuthPass=yourRealYahooPassword        <--- Use your real email password here
    TLS_CA_File=~/cert.pem
    
  • 使用 OpenSSL 创建 cert.pem 文件。我使用了openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 9999 -nodes(更多信息请访问如何使用 OpenSSL 创建自签名证书)。您可以将文件粘贴到任何地方,但我只是将其放在 ~/ 中。无论您将其放在何处,请确保将TLS_CA_File=ssmtp.conf 中的行指向正确的位置。

  • 打开文件/etc/ssmtp/revaliases并添加以下行(用您的详细信息替换相应的部分):

    yourPCUsername:[email protected]:smtp.mail.yahoo.com:587
    

    如果您以 root 身份运行,我认为您需要添加另一行将您的名字替换为“root”。

  • 就这样,你就可以开始了!要进行测试,最简单的方法(在我看来)是创建一个包含以下内容的文件:

    To: [email protected]                       <--- Use your real email here...
    From: "whateverYaWant" <[email protected]>  <--- ...and here
    Subject: Some Notifying Email
    MIME-Version: 1.0
    Content-Type: text/plain
    
    Body of your email goes here. Hello world!
    
  • 检查你没有真正的发送邮件通过运行进行安装sendmail -V。它应该显示“sSMTP”。

  • 最后,运行cat fileWithEmailInIt.txt | sendmail -i -t,然后等待几秒钟(10-30)并检查您的电子邮件!

补充说明1:如果您在使用 Gmail 时遇到问题,请尝试以下选项 1这个答案
(谢谢本·克瑞西

补充说明2:如果邮件是从命令行发送的,而不是通过 crontab 发送的,请尝试更改FromLineOverride为。您还可以通过添加到 来获取更详细的日志记录NO-额外的日志记录将发送到。 (感谢/etc/ssmtp/ssmtp.confDebug=YESssmtp.conf/var/log/mail.log
雅库布·库库尔

答案2

安装 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会在正确的位置,因为它很可能不会。

答案3

我对 exim4 的运气非常好。

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

(Alpine 是我喜欢使用的邮件客户端)

之后我就跑了

sudo dpkg-reconfigure exim4-config

并按照提示操作。此页面:https://help.ubuntu.com/community/Exim4也非常有帮助。我花了大约 10 分钟才让它运行起来。

答案4

来自 sSMTP 手册页:“它不执行别名,而别名必须在用户代理或邮件中心上执行。它也不遵守 .forwards,而这必须在接收主机上执行。它尤其不会传递到管道。”

因此,如果您想在外部电子邮件上接收发送给根的所有消息,使用 sSMTP 不是一个好主意,因为它不支持别名。

相反,您可以使用 postfix。它仍然非常简单。以下是如何将它与 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 [email protected]: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 protected]

最后,运行:

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

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

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

希望能帮助到你。

相关内容