WWW::Facebook::API, and I tried to wrestle with Facebook's OAuth or similar implementation to get the access I need to do what I want. And then I figured out another way.#!/usr/bin/perl
# usage: echo big long string of text | facebook.pl
# returns "big long string of text"
use 5.010 ;
use strict ;
use warnings ;
use Carp ;
use Data::Dumper ;
use Net::SMTP::TLS ;
use Getopt::Long ;
use IO::Interactive qw{ interactive } ;
use subs qw{ send_mail get_credentials } ;
my $status = join ' ', @ARGV ;
if ( length $status < 1 ) {
while ( ) {
$status .= $_ ;
}
chomp $status ;
}
my $identity = 'MY_IDENTITY_STRING' ;
my @to ;
push @to, 'GETYOUROWNSPECIALEMAILFROM@m.facebook.com' ;
my $body = $status ;
my %msg ;
$msg{ body } = $body ;
$msg{ to } = \@to ;
$msg{ cc } = \@cc ;
say send_mail %msg ;
exit ;
sub get_credentials {
#this is the point where my setup sucks
my %creds ;
my $config = '/home/jacoby/.smtp_identities' ;
if ( open my $fh, '<', $config ) {
while ( <$fh> ) {
my $line = $_ ;
chomp $line ;
$line = ( split m{\#}mx )[ 0 ] ;
next if length $line < 1 ;
$line =~ s{\s}{}gmx ;
my @line = split m{,}mx, $line ;
next if $line[ 0 ] ne $identity ;
$creds{ from } = $line[ 1 ] ;
$creds{ server } = $line[ 2 ] ;
$creds{ username } = $line[ 3 ] ;
$creds{ password } = $line[ 4 ] ;
}
close $fh ;
}
if ( defined $creds{ username } ) {
return %creds ;
}
say 'No identity chosen' ;
exit 1 ;
}
sub send_mail {
my %msg = @_ ;
my %creds = get_credentials ;
my $body = $msg{ body } ;
my $to = $msg{ to } ;
my @to = @$to ;
my $mailer = new Net::SMTP::TLS( $creds{ server },
Hello => $creds{ server },
Port => 587,
User => $creds{ username },
Password => $creds{ password }, ) or croak $!;
$mailer->mail( $creds{ from } ) ;
$mailer->to( @to ) ;
$mailer->data ;
$mailer->datasend( 'Subject: ' . $body . "\n" ) ;
$mailer->datasend( 'From: ' . $creds{ from } . "\n" ) ;
$mailer->datasend( 'To: ' . ( join ',', @to ) . "\n" ) ;
$mailer->datasend( "\n" ) ;
$mailer->datasend( '' ) ;
$mailer->dataend ;
$mailer->quit ;
return $msg{ body } ;
}
I already had it, so I just had to modify it slightly, but it came to me. You can set status and upload images via email. I just hand to double-check the right way — statuses in subject, not body — and came right up.
get_credentials is my method for not hard-coding information into the code, and here I do exactly that for the $to email and the $identity string.I could see using the big and scary Facebook API if I wanted to code up the next Farmville. I know my wife wants me to do that. But for this small purpose, there's little need to go through all that.





