目标:将文件服务器上的文本文件放入我的 Gmail 收件箱中。
文件服务器正在运行 Ubuntu Server 8.04,我目前不时通过 SSH 进入它并检查日志、硬盘的 SMART 统计信息等。我正在研究设置一个计划脚本,该脚本运行一些命令并通过电子邮件将输出发送给我。
我遇到的唯一问题是实际发送电子邮件。我没有在 Linux 下配置电子邮件的经验,所有指向 sendmail 的指南似乎都代表我自己和我当前的配置假设了很多事情。服务器设置为与 samba 共享文件,而不是作为邮件、Web 或 DNS 服务器。我不想运行邮件服务器或从服务器路由任何内容或在服务器上(或使用服务器)接收任何邮件,除非这些有助于我实现目标。文件服务器在我们的正常网络上并且可以访问互联网。
我拥有多个网站域名(并拥有托管包)。我能够设置像 thunderbird 这样的应用程序,使用我网站上的一个帐户发送邮件,方法是填写 smtp.mydotcom.com 作为发送服务器,并更改端口等以匹配我网站的 cpanel 配置页面中的信息。有没有办法做类似的事情,以便我可以将电子邮件从我的文件服务器发送到我的外部电子邮件?
编辑:以下是我阅读 Dennis Williamson 的回答后采取的步骤。我只用了几分钟就启动并运行了!
安装 esmtp:
sudo apt-get 安装 esmtp
我在我的网站上创建了一个新的电子邮件帐户(称为“alerts”),并像这样编辑了 /etc/esmtprc:
主机名=mail.mydomain.com:26
用户名=alerts+mydomain.com
(这些值由 cpanel 管理页面提供)
然后我创建了一个名为“eheader”的文件,其中包含电子邮件的默认顶部:
收件人:我 <[电子邮件保护]>
来自:警报 <[电子邮件保护]>
主题:主题邮件正文
因此,为了发送邮件,可以使用以下命令:
cat eheader <文件1> <文件2> ... <文件N> | /usr/bin/esmtp -t
因此,可以轻松改变为每日/每周/等作业发送的文件。
答案1
我用esmtp
,这是一个仅用于发送的 MTA,用于此目的。它的设置非常简单。它具有与 sendmail 兼容的命令行选项(一些被忽略)。它在存储库中。
这是一个简单的例子:
echo -e "To: Recipient Name <[email protected]>\n\
From: Me Myself and I <[email protected]>\n\
Subject: Here is the example I promised\n\n\
$(<somefile)" | /usr/bin/esmtp -t
这将发送名为“somefile”的文件的内容。
有一个非常简单的配置文件,/etc/esmtprc
其中包含上游电子邮件提供商的主机名、用户名和密码(我假设您的是 gmail)。
Gmail 的设置说明如下这里。
答案2
查看 ssmtp,它是 sendmail 的替代品,它只会将电子邮件发送到您为其配置的 SMTP 服务器。这可能是您以编程方式发送电子邮件的最简单方法之一。在网上搜索“ssmtp”应该会找到大量有关如何配置它的教程和说明。
此外,大多数编程/脚本语言都有可用的 SMTP 库,因此如果您熟悉 Perl 或 Python,您可以编写一个连接到 SMTP 服务器的小脚本来发送邮件 - 基本上您将编写自己的更简单的 ssmtp 版本。
答案3
您需要做的是在 Ubuntu 机器上设置一个 SMTP 服务器,该服务器配置为转发到真正的 SMTP 服务器(在您的网络或 ISP 上),例如 ssmtp 或 esmtp。以下是轻量级服务器的列表(mutt 文档):
http://wiki.mutt.org/?LightSMTPagents
更新:
由于您正在运行 Ubuntu,因此您将安装 Exim。
您可以使用 来配置它sudo dpkg-reconfigure exim4-config
。只要您阅读了一些文档,就可以很容易地设置中继邮件。
/更新
以下是从任何电子邮件客户端程序通过 Gmail 发送邮件的 Gmail SMTP 服务器设置:
- 设置Gmail SMTP服务器地址:smtp.gmail.com
- 将 Gmail SMTP 用户名配置为:您的完整 Gmail 地址(包括 @gmail.com)Google Apps 用户可能必须输入 username@your_domain.com
- 将 Gmail SMTP 密码配置为:您的 Gmail 密码
- 将 Gmail SMTP 端口配置为:465 或 587
- 配置 Gmail SMTP TLS/SSL 要求为:是
最后,您将编写一个脚本来调用命令行邮件客户端,如 mutt(我不相信 mail 或 mailx 可以添加附件)。您也可以使用 Perl 或 Python 的邮件 API。该脚本会创建一封电子邮件并附加您想要的文件。
最后,您需要在 crontab 中放入一个每天运行一次的脚本条目(或者按照您想要的任何间隔运行):
01 * * * * root echo "This command is run at one min past every hour"
17 8 * * * root echo "This command is run daily at 8:17 am"
17 20 * * * root echo "This command is run daily at 8:17 pm"
00 4 * * 0 root echo "This command is run at 4 am every Sunday"
* 4 * * Sun root echo "So is this"
42 4 1 * * root echo "This command is run 4:42 am every 1st of the month"
01 * 19 07 * root echo "This command is run hourly on the 19th of July"
查看man crontab
man cron
另一更新:
您可以使用命令行发送电子邮件发电子邮件
答案4
我使用 perl 脚本邮件::Sendmail通过电子邮件从我的服务器发送报告(并使用 Net::Twitter 发送状态更新)。当然,这意味着要处理 CPAN,这可能不值得,因为您必须处理make
软件包。
!#/usr/bin/perl
use Mail::Sendmail;
%mail = ( To => '[email protected]',
From => '[email protected]',
Message => "This is a very short message"
);
sendmail(%mail) or die $Mail::Sendmail::error;
print "OK. Log says:\n", $Mail::Sendmail::log;