目标:将文件服务器上的文本文件放入我的 gmail 收件箱。
文件服务器正在运行 Ubuntu Server 8.04,我目前不时通过 SSH 连接到它并检查日志、硬盘驱动器的 SMART 统计信息等。我正在研究设置一个运行一些命令并通过电子邮件向我发送输出的预定脚本。
我遇到的唯一问题是实际发送电子邮件。我对 linux 下的电子邮件配置没有经验,所有指向 sendmail 的指南似乎都代表我自己和我当前的配置假设了很多事情。这些服务器设置为与 samba 共享文件,而不是作为邮件、Web 或 dns 服务器。我不想运行邮件服务器或从服务器路由任何内容或在服务器上(或随服务器)接收任何邮件,除非其中任何一项有助于我实现目标。文件服务器在我们的正常网络上,并且可以访问互联网。
我拥有几个网站域(并且有一个托管包)。通过填写 smtp.mydotcom.com 供外发服务器使用并更改端口等以匹配我网站的 cpanel 配置页面中的信息,我已经能够设置 Thunderbird 等应用程序,以使用我网站上的一个帐户发送邮件. 有没有办法做类似的事情,所以我可以从我的文件服务器发送一封电子邮件到我的外部电子邮件?
编辑:这是我在阅读下面丹尼斯威廉姆森的回答后采取的步骤。我只用了几分钟就启动并运行了!
安装 esmtp:
sudo apt-get install esmtp
我在我的网站上创建了一个新的电子邮件帐户(称为“警报”)并像这样编辑 /etc/esmtprc:
主机名=mail.mydomain.com:26
用户名=alerts+mydomain.com
(这些值由 cpanel 管理页面提供)
然后我用默认的电子邮件顶部创建了一个名为“eheader”的文件:
收件人:我 <[email protected]>
发件人:警报 <[email protected]>
主题:主题邮件正文
因此,为了关闭邮件,可以使用以下命令:
cat eheader <file1> <file2> ... <fileN> | /usr/bin/esmtp -t
因此,很容易改变为每日/每周/等作业发送哪些文件。
为此,我使用
esmtp
,这是一个只发送的 MTA。设置非常简单。它具有与 sendmail 兼容的命令行选项(有些被忽略)。它在存储库中。这是一个简单的例子:
这将发送名为“somefile”的文件的内容。
有一个非常简单的配置文件,
/etc/esmtprc
其中包含您的上游电子邮件提供商的主机名、用户名和密码(我假设您的是 gmail)。为 Gmail 设置它的说明在这里。
查看 ssmtp,它是一个 sendmail 替代品,它只是将电子邮件传递到您配置它的 SMTP 服务器。这可能是您能够以编程方式发送电子邮件的最简单方法之一。在网络上搜索“ssmtp”应该会提供大量关于如何配置它的教程和说明。
此外,大多数编程/脚本语言都有可用的 SMTP 库,所以如果您熟悉 Perl 或 Python,您可以编写一个连接到 SMTP 服务器以发送邮件的小脚本 - 基本上您将编写您的自己的,更简单的 ssmtp 版本。
您需要做的是在 Ubuntu 机器上设置一个 SMTP 服务器,该服务器配置为转发到真正的 SMTP 服务器(在您的网络上或在您的 ISP 上),例如 ssmtp 或 esmtp。这是轻量级列表(mutt docs):
http://wiki.mutt.org/?LightSMTPagents
更新:
由于您运行的是 Ubuntu,因此您将安装 Exim。
您可以使用
sudo dpkg-reconfigure exim4-config
. 一旦您阅读了一些文档,就很容易设置中继邮件。/更新
以下是用于从任何电子邮件客户端程序通过 Gmail 发送邮件的 Gmail SMTP 服务器设置:
最后,您将编写一个脚本来调用像 mutt 这样的命令行邮件客户端(我不相信 mail 或 mailx 会做附件)。您还可以使用 Perl 或 Python 的邮件 API。该脚本会创建一封电子邮件并附加您想要的文件。
最后,您将为每天运行的脚本添加一个 crontab 条目(或您想要的任何时间间隔):
见
man crontab
和man cron
另一个更新:
您可以使用SendEmail 从命令行发送电子邮件
您想发送邮件,但不配置邮件服务器。不是一个艰难的命令,但很奇怪。Postfix 可以设置为在几秒钟内发送电子邮件,并且将正常的电子邮件发送到 root 通常很有用,例如 MD raid 组件失败的通知。
如果您不能或不会在该系统上设置电子邮件,我们还剩下什么?
如果您的服务器或 Web 托管站点之一确实有 ssh,并且可能已经配置了邮件服务,那么一个 cron 会如何,它 scp 来自服务器的日志文件并从有邮件的系统发送它?邮件通常使用 mail 或 mailx 命令从 unix 发送。
在此之前,您可以将您想要报告的内容与您需要执行的任何脚本或 cp 命令一起放入该文件中。如果它工作得更好,您可以将 cron 放在 Ubuntu 服务器上,并让它向第二台服务器发出 ssh 命令,以将数据拉下来并邮寄。
我使用带有Mail::Sendmail的 perl 脚本从我的服务器发送报告(和 Net::Twitter 用于状态更新)。当然,这意味着处理 CPAN 可能不值得,因为您必须处理
make
软件包。尝试这个。它将适用于大多数开箱即用的 Linux 发行版。
试试笨蛋。这是一个非常通用的。允许使用命令行,包括发送附件的能力。Mutt 默认安装在 Ubuntu 服务器中。所以你应该拥有它。典型的命令行如下所示:
有关完整的使用选项,请参见“man mutt”。如果您只是在终端中输入“mutt”,它还具有交互模式。