Back to Top

Friday, April 02, 2010

Sending an X-Face email with Perl+GMail

In the latest Software Freedom Law Show Bradley mentioned the X-Face email header and challenged listeners to send them an email containing the X-Face header. So here is the small Perl script I’ve whipped together to send them an email trough GMail:

use strict;
use warnings;
use Net::SMTP::TLS;

my ($from, $password) = ('', 'MySuperSecretPassword');
my $mailer = new Net::SMTP::TLS(
  Hello => '',
  Port => 587,
  User => $from,
  Password => $password);


my $data = <<'EOF';
X-Face: "8.]Z_3ptu\NK'CA~DM>M,G.T(h=1.y9"0gXW3V91E:dw2?|&G2R(?/no'F2g4%8Fv.
Subject: Hello X-Faced World!

email body.


The code is largely based on this snippet: Sending Mail Through Gmail with Perl. The X-Face header was generated using the Online X-Face Converter (yes, I know that there is a Image::XFace module, but it was very cryptic – it didn’t mention supported input / output formats). One word of warning: if you are using ActivePerl under Windows, Net::SMTP::TLS isn’t available in the default module list (AFAIK, because of encryption restrictions), so you might need to experiment with alternative package sources or using Linux :-). I’ve also tested the script with an email account I control (using Thunderbird with the Mnenhy plugin – which can read but not create X-Face emails) and it worked nicely.

There you have it: how to use an old (from the 1980s according to Wikipedia) method for embedding pictures which is not supported by most of the email clients :-)


  1. Very good script. Thanks for the good work.

  2. Net::SMTP::TLS is included into Strawberry Perl for Windows, as many other modules that depend on C libraries.

  3. @chorny: thank you for reminding me of Strawberry Perl. Also you have an interesting blog. Count me in as a subscriber :-)