end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

Email::Stuffer for perl による HTMLメール送信 (HTML+TXTマルチパート)

Email::Stuffer や Email::Sender::Transport::SMTP 、 Email::Sender::Transport::SMTP::TLS に殆どおまかせなので、 以下のように書くだけでOK。

#!/usr/local/bin/perl
use strict;
use warnings;
use utf8;
use Email::Stuffer;
use Email::Sender::Transport::SMTP;
use Email::Sender::Transport::SMTP::TLS;
use Data::Dumper;

my $FROM = 'ないしょ@gmail.com';
my $SUBJECT = 'TEST MAIL';
# auth smtpの場合
my $SMTP_CONF = {host => 'ないしょ.co.jp',
                 port => 587,
                 sasl_username => 'ないしょ',
                 sasl_password => 'ないしょ',
                 debug=>1
                };
# 素の場合
# my $SMTP_CONF = {host => 'ないしょ.co.jp',
#                  port => 25};
# auth smtp(tls)の場合
my $SMTP_TLS_CONF = {host => 'smtp.gmail.com',
                     port => 587,
                     username=>'ないしょ',
                     password=>'ないしょ', # APPのパスワード
                     debug=>1
                    };


main( @ARGV);

sub main {
    my ($mailto) = @_;
    
    my $email = Email::Stuffer->new();

#    my $smtp = get_smtp_obj();
    my $smtp = get_smtp_obj_tls();
    $email->transport( $smtp );

    $email->subject($SUBJECT);
    $email->from($FROM);
    $email->to($mailto);

    my $txt_mime =  get_txt_mime();  ## 代替text part
    my $html_mime = get_html_mime(); ## html part

    push(@{$email->{parts}}, $txt_mime);
    push(@{$email->{parts}}, $html_mime);

    
    $email->send_or_die;
}

sub get_smtp_obj_tls {
    my $smtp = Email::Sender::Transport::SMTP::TLS->new($SMTP_TLS_CONF);
    return $smtp;
}

sub get_smtp_obj {
    my $smtp = Email::Sender::Transport::SMTP->new($SMTP_CONF);
    return $smtp;
}


sub get_txt_mime {

    my $attr = {content_type => 'text/plain',
                charset      => 'utf-8',
                encoding     => 'quoted-printable',
                format       => 'flowed'};
    my $body =<<EOF;
これは、テキストメールのテストです。
EOF

    my $mime = Email::MIME->create(attributes => $attr,
                                   body_str   => $body);
    return $mime;
}

sub get_html_mime {

    my $attr = {content_type => 'text/html',
                charset      => 'utf-8',
                encoding     => 'quoted-printable'};
    my $body =<<EOF;
<html>
<head></head>
<body>
これは、<b>HTML</b>メールのテストです。
</body>
</html>
EOF

    my $mime = Email::MIME->create(attributes => $attr,
                                   body_str   => $body);
    return $mime;
}

1;