I happened to have some Perl code lying around which sends an email by logging into by Gmail account and sending my email through Gmail. This is nice because I don’t have to run my own mail server, and if I can successfully send an email from my Gmail account and it doesn’t get eaten as spam or whatever, I know it will also work when my application sends an email.
Personally I don’t care what language a useful library is written in as long as I can really easily call it from Arc. So here’s what a Perl program embedded in Arc looks like, at least when using my template hack:
(= gmailprog ‡
use strict;
use MIME::Lite;
use Net::SMTP::TLS;
my $msg = MIME::Lite->new(
From => «from»,
To => «to»,
Subject => «subject»,
Type => 'TEXT',
Data => «message»
)->as_string();
my $mailer = new Net::SMTP::TLS(
"smtp.gmail.com",
Port => 587,
User => «user»,
Password => «password»);
$mailer->mail(«user»);
$mailer->to(«to»);
$mailer->data;
$mailer->datasend($msg);
$mailer->dataend;
$mailer->quit;
‡)
(def sendgmail (data)
(thread (fromstring (gmailprog strperl:data) (system "perl"))))
The ‡...‡ hack constructs a template, which is filled in by passing it a table (or a table-like object that can be called with a key to return a value) to fill in the field values. strperl converts an Arc string to a Perl string literal, carefully escaping quote and backslash characters as needed. Composing the table object data passed to sendgmail with strperl means that a data value such as “what's that?” will be inserted into the template as a Perl string like 'what\'s that?'. I run the whole thing in a separate thread, since it can take a few seconds to connect to Gmail.
Call sendgmail with a table containing your Gmail account name and password, and the From, To, Subject, and text of your email message:
(sendgmail (obj user "andrew.wilcox" ; put your Gmail account name here password "xxxsecret" ; and your Gmail password here from "Andrew Wilcox <andrew.wilcox@gmail.com>" to "fred@example.com" subject "Greetings Earthling!" message "Press the green button... press it now..."))
You’ll need Perl and the Perl modules MIME::Lite and Net::SMTP::TLS. You can check if you have these modules installed by typing at the command line:
$ perl -MMIME::Lite -e '' $ perl -MNet::SMTP::TLS -e '' $
If you have the modules installed, Perl will print nothing (no news is good news), otherwise you’ll get an error. For information on how to install the modules, see How do I install Perl modules?
Then you’ll need this hack, sendgmail0.arc, and the hacks it relies on: scheme-values, ac, span, template, and toperl.
Or, using the hackinator:
$ hack \
ycombinator.com/arc/arc3.1.tar \
awwx.ws/scheme-values0.patch \
awwx.ws/ac0.patch \
awwx.ws/ac1.arc \
awwx.ws/span0.arc \
awwx.ws/template2.arc \
awwx.ws/toperl0.arc \
awwx.ws/sendgmail0.arcThis code is in the public domain.