views:

641

answers:

7

Hi all,

I have a computer at home which I can't access from work. I'd like to be able to view results from work that my home computer produces. The best idea I've come up with is an automated script running on my home computer that emails myself the results (from a text file or stderr/out) when complete.

I'm decent with bash (I have a linux machine) and java, so an answer using either or both of those would be ideal, but if there's something easier that's fine too.

I typically use gmail, but also have yahoo mail.

My question is this: what would be the basic steps in solving this problem? I can do the nitty gritty stuff, but can't really get the big picture of how something like this would work.

Please help.

jbu

A: 

Traditionaly, with unix systems like Linux, you'd have an MTA, a mail transfer agent, on the computer that deals with sending e-mail.

This could be a full blown e-mail server like exim, or something simple like ssmtp that just sends messages on to a relaying SMTP server such as would be provided by your ISP.

This isn't neccessarily the case anymore, since mail clients like Thunderbird include their own MTA, much like mail clients on Windows do.

However, it is likely that your distro will install some MTA or other by default, if for no other reason than the fact that other things on your system, like cron, want to be able to send e-mail. Generally there will be a command line tool called sendmail (sendmail being the original MTA [citation needed], other MTAs maintain compatability with its interface and it has sort of become the standard) that can be used from a shell script to send an e-mail.

SpoonMeiser
A: 

My solution assumes that you have a SMTP server available which allows you to send an email programmatically. Alternatively, you can use a local install of sendmail which generally is available with most linux distros.

Create a standalone java program which watches the directory your home computer saves the file to. Use the JavaMail API to attach and send the file to any email you wish.

If you're also familiar with the Spring Framework, it has a nice abstraction layer for working with JavaMail and makes this sort of thing trivial.

digitalsanctum
+1  A: 

You can't access your home computer from work which rules out a "remote support" option.

Can you access other computers on the Internet? If so, you could simply set up one of the online storage options and then ftp the results from your home computer. That's a lot simpler then trying to write scripts or code to generate emails with attachments or whatever.

You could then view the external computer from work.

nzpcmad
+1  A: 

On any Linux I have used the mail sending from command-line is simple:

mail -s "My subject here" [email protected] <message_body.txt

AFAIK this acts as a front-end to sendmail, and you have to have sendmail configured to forward the messages to your ISP mail server.

paavo256
+1  A: 

If you have netcat, this command will send you an e-mail:

Given a file in this format (from Wikipedia):

HELO relay.example.org
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
DATA
From: "Bob Example" <[email protected]>
To: Alice Example <[email protected]>
Cc: [email protected]
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

Then netcat it to an SMTP server you have access to:

nc mail.somewhere.com 25 < file.txt

This will then send the e-mail. You can see how you can create a Java program to do this for you (just execute the commands).

Claudiu
netcat seems an awfully complicated and error prone solution. You aren't for example, handling any responses from the SMTP server, and have no way to determine if this was a success or a failure. If an MTA is configured, this would be far easier.
SpoonMeiser
+1  A: 

Howto set up ssmtp to send through a Gmail account

Some of the steps here might seem strange at first, but the rationale is put in footnotes that should hopefully explain why.

First create a spare account on gmail which you will only use for sending email. For instance, if your normal account is [email protected], create an account [email protected] with a newly created password which you only will use for this account [1].

Set up the new account to forward all email to the normal account [2] and under account settings you should add all other email adresses you use [3].

Then install ssmtp (On Debian: aptitude install ssmtp) and edit ssmtp's configuration file /etc/ssmtp/ssmtp.conf:

[email protected]
mailhub=smtp.gmail.com:587
UseSTARTTLS=YES
AuthUser=user.noreply
AuthPass=passwdusedonlyforthisaccount
FromLineOverride=YES

and configure the local mail delivery by editing /etc/ssmtp/revaliases assuming that your local login is localuser:

root:[email protected]:smtp.gmail.com:587
localuser:[email protected]:smtp.gmail.com:587

Make sure the two configuration files are readable to all users who should be able to send email [4].

Test the setup by e.g. mailx (On Debian: aptitude install bsd-mailx):

echo 'testing, one, two' | mailx -s 'test 1' [email protected]

Hope this helps.


[1] The new gmail user name and password will be visible to everyone who can log onto your machine, so you do not want this account to be critical in any way, meaning you can close it down immediately if someone should get access to it.

[2] If some email you sent bounces back to you, you might want to know about it, and there actually exists people who will happily reply to an email from johnsmith.noreply.

[3] Gmail will rewrite the From header on the email if it does not recognise the address.

[4] Ssmtp runs as the local user who sends the email, so that user needs read access to the configuration files.

JPS
A: 

Of course, your home ISP probably has the common SMTP port blocked as well.

FlySwat