end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

さくらレンタルサーバでのsmtpメール送信は、Net::SMTPS for perlのauth()で、LOGIN を指定

end0tknr.hateblo.jp

以前、書いたgmail.comのstmp送信をそのまま利用できなかったので、いろいろ試してみたら、以下のように auth() で AUTHMETHOD='LOGIN' を指定したら動きました。

http://search.cpan.org/perldoc?Net%3A%3ASMTPS

#!/usr/local/bin/perl
use strict;
use utf8;
use Encode;
use Net::SMTPS;
use Data::Dumper;

my $SMTP_CONF =
    {host     => 'ないしょ.sakura.ne.jp',
     port     => '587',
     from     => 'ないしょ',
     auth_uid => 'ないしょ',
     auth_pw  => 'ないしょ',
     ssl=>        'starttls', # ssl / starttls / undef
     auth_method=>'LOGIN'     # CRAM-MD5 (default) / LOGIN / PLAIN / DIGEST-MD5
    };


    
main( @ARGV );

sub main {
    my ($mailto) = @_;
    
    my $smtp = Net::SMTPS->new(
        $SMTP_CONF->{host},
        Port  => $SMTP_CONF->{port},
        doSSL => $SMTP_CONF->{ssl},
        Debug => 1
    );

    $smtp->auth( $SMTP_CONF->{auth_uid},
                 $SMTP_CONF->{auth_pw},
                 $SMTP_CONF->{auth_method} )
        or die "can't login smtp server";

    my $mailto = [ $mailto ];
    my $mailto_str = join( ',', @$mailto );

    my $subject_org = 'これはテストです';
    my $subject = Encode::encode( 'MIME-Header-ISO_2022_JP', $subject_org );

    my $message = <<EOF;
このメールはテストです
EOF

    #メールのヘッダーを構築
    my $header = << "MAILHEADER_1";
From: $SMTP_CONF->{from}
Return-path: $SMTP_CONF->{from}
Reply-To: $SMTP_CONF->{from}
To: $mailto_str
MAILHEADER_1

    $header .= <<"MAILHEADER_2";
Subject: $subject
Mime-Version: 1.0
Content-Type: text/plain; charset = "ISO-2022-JP"
Content-Transfer-Encoding: 7bit
MAILHEADER_2

    $message = Encode::encode( 'iso-2022-jp', $message );

    $smtp->mail( $SMTP_CONF->{from} );
    $smtp->to(@$mailto);
    $smtp->data();
    $smtp->datasend("$header\n");
    $smtp->datasend("$message\n");
    $smtp->dataend();
    $smtp->quit;
}