2

我家里有一台电脑,工作时无法访问。我希望能够查看我的家用计算机产生的工作结果。我想出的最好的主意是在我的家用计算机上运行一个自动化脚本,它在完成后通过电子邮件将结果(来自文本文件或 stderr/out)发送给我自己。

我对 bash (我有一台linux机器)和 java 很满意,所以使用其中一个或两个的答案将是理想的,但如果有更简单的东西也可以。

我通常使用 gmail,但也有 yahoo 邮件。

我的问题是:解决这个问题的基本步骤是什么?我可以做一些琐碎的事情,但不能真正了解这样的事情是如何工作的。

请帮忙。

吉布

4

7 回答 7

3

如何设置 ssmtp 以通过 Gmail 帐户发送

这里的一些步骤起初可能看起来很奇怪,但基本原理放在脚注中,希望能解释原因。

首先在 gmail 上创建一个备用帐户,您将仅用于发送电子邮件。例如,如果您的普通帐户是user@gmail.com,请使用新创建的密码创建一个帐户user.noreply@gmail.com,该密码仅用于此帐户 [1]。

设置新帐户以将所有电子邮件转发到普通帐户 [2] 并在帐户设置下添加您使用的所有其他电子邮件地址 [3]。

然后安装 ssmtp(在 Debian: 上aptitude install ssmtp)并编辑 ssmtp 的配置文件/etc/ssmtp/ssmtp.conf

根=用户@gmail.com
mailhub=smtp.gmail.com:587
使用STARTTLS=YES
AuthUser=user.noreply
AuthPass=passwdusedonlyforthisaccount
FromLineOverride=YES

并通过编辑来配置本地邮件传递,/etc/ssmtp/revaliases 假设您的本地登录为localuser

根:user@gmail.com:smtp.gmail.com:587
本地用户:user@gmail.com:smtp.gmail.com:587

确保所有应该能够发送电子邮件的用户都可以读取这两个配置文件 [4]。

通过例如mailx(在 Debian: 上aptitude install bsd-mailx)测试设置:

echo '测试,一,二' | mailx -s 'test 1' user@gmail.com

希望这可以帮助。


[1] 新的 gmail 用户名和密码将对所有可以登录您计算机的人可见,因此您不希望此帐户以任何方式成为关键,这意味着如果有人可以访问它,您可以立即关闭它.

[2] 如果您发送的某些电子邮件被退回给您,您可能想了解它,并且实际上存在会很乐意回复来自johnsmith.noreply.

From[3]如果 Gmail 无法识别地址,它将重写电子邮件的标题。

[4] Ssmtp 以发送邮件的本地用户身份运行,因此用户需要对配置文件具有读取权限。

于 2008-12-04T20:20:20.603 回答
2

在我使用过的任何 Linux 上,从命令行发送邮件都很简单:

mail -s "My subject here" recipient@wherever.com <message_body.txt

AFAIK 这充当 sendmail 的前端,您必须配置 sendmail 以将消息转发到您的 ISP 邮件服务器。

于 2008-11-06T00:32:24.790 回答
1

您无法从工作中访问您的家庭计算机,这排除了“远程支持”选项。

您可以访问 Internet 上的其他计算机吗?如果是这样,您可以简单地设置其中一个在线存储选项,然后从您的家用计算机 ftp 中的结果。这比尝试编写脚本或代码来生成带有附件或其他内容的电子邮件要简单得多。

然后,您可以查看工作中的外部计算机。

于 2008-11-06T00:32:23.573 回答
1

如果您有 netcat,此命令将向您发送一封电子邮件:

给定一个这种格式的文件(来自维基百科):

HELO relay.example.org
MAIL FROM:<bob@example.org>
RCPT TO:<alice@example.com>
RCPT TO:<theboss@example.com>
DATA
From: "Bob Example" <bob@example.org>
To: Alice Example <alice@example.com>
Cc: theboss@example.com
Date: Tue, 15 Jan 2008 16:02:43 -0500
Subject: Test message

Hello Alice.
This is a test message with 5 headers and 4 lines in the body.
Your friend,
Bob
.
QUIT

然后将其 netcat 到您有权访问的 SMTP 服务器:

nc mail.somewhere.com 25 < file.txt

这将发送电子邮件。您可以了解如何创建一个 Java 程序来为您执行此操作(只需执行命令)。

于 2008-11-06T00:37:59.070 回答
0

传统上,对于像 Linux 这样的 unix 系统,您的计算机上有一个 MTA,一个邮件传输代理,用于处理发送电子邮件。

这可能是一个完整的电子邮件服务器,如 exim,或者像 ssmtp 这样简单的东西,它只是将消息发送到中继 SMTP 服务器,如您的 ISP 提供的。

现在不再需要这种情况了,因为像 Thunderbird 这样的邮件客户端包括自己的 MTA,就像 Windows 上的邮件客户端一样。

但是,您的发行版可能会默认安装一些 MTA 或其他,如果没有其他原因,只是系统上的其他东西(如 cron)希望能够发送电子邮件。通常会有一个名为 sendmail 的命令行工具(sendmail 是最初的 MTA [需要引用],其他 MTA 保持与其接口的兼容性,并且它已成为标准),可用于从 shell 脚本发送电子邮件邮件。

于 2008-11-06T00:02:23.040 回答
0

我的解决方案假设您有一个可用的 SMTP 服务器,它允许您以编程方式发送电子邮件。或者,您可以使用本地安装的 sendmail,该安装通常可用于大多数 linux 发行版。

创建一个独立的 java 程序来监视您的家庭计算机将文件保存到的目录。使用JavaMail API附加文件并将其发送到您希望的任何电子邮件。

如果您还熟悉Spring 框架,它有一个很好的抽象层用于处理 JavaMail,并使这类事情变得微不足道。

于 2008-11-06T00:13:48.947 回答
0

当然,您的家庭 ISP 可能也阻止了公共 SMTP 端口。

于 2008-12-04T20:21:39.320 回答