とりあえずサンプルスクリプト↓
-----------------------------------------------------------------------
use strict;
use CGI::Carp qw(fatalsToBrowser);
use Net::SMTP;
use Net::SMTP::SSL;
use Net::SMTP::TLS;
use Encode qw(from_to encode);
#メールアドレス設定
my $from = 'hoge@gmail.com';
my $mailto= 'huga@nantoka.com';
#件名設定
my $subject = 'SMTPを指定してメール送信!';
from_to($subject, 'shiftjis', 'iso-2022-jp');
encode('MIME-Header-ISO_2022_JP', $subject);
#メールヘッダー設定
my $header = << "MAILHEADER";
From: $from
To: $mailto
Subject: $subject
Mime-Version: 1.0
Content-Type: text/plain; charset = 'ISO-2022-JP"
Content-Trensfer-Encoding: 7bit
MAILHEADER
#メール本文設定
my $message = << 'MAILBODY';
本日は晴天なり。
あああいいいううう
さよーなら!
MAILBODY
#文字コードをJISに変換
from_to($message, 'shiftjis', 'iso-2022-jp');
#SMTP設定(適宜変更してください)
my $server = 'smtp.gmail.com'; #ホスト名
my $auth = 1; #SMTPAuthを使用する場合は1
my $tls = 0; #TLS接続を使う場合は1
my $ssl = 1; #SSL接続を使う場合は1
my $port = 465; #ポート指定。指定しないと25番が勝手に設定される
my $user = 'hoge@gmail.com'; #SMTPAuthのユーザ名
my $pass = 'passwaord'; #SMTPAuthのパスワード
#メール送信オブジェクト設定
my $smtp = '';
#TLSのときは、オブジェクト生成時にAuthデータを渡す
if($tls){
$smtp = Net::SMTP::TLS->new(
$server,
Port => $port ,
User => $user ,
Password => $pass
) || die "Connect failed over tls";
}
elsif($ssl){
$smtp = Net::SMTP::SSL->new(
$server,
Port => $port
) || die "Connect failed over ssl";
}
else{
$smtp = Net::SMTP->new($server, Port => $port) || die "Connect failed";
}
if(!$tls && $auth){
$smtp->auth($user, $pass) || die "auth failed";
}
#メール送信
$smtp->mail($from);
$smtp->to($mailto);
$smtp->data();
$smtp->datasend($header);
$smtp->datasend($message);
$smtp->dataend();
$smtp->quit;
print <<EOM;
Content-type: text/html
送信しました~!
EOM
exit;
1;
---------------------------------------------------------------------------------
※Net::SMTP::SSLおよびNet::SMTP::TLSを使うには、IO::Socket::SSLモジュールが必要。
※IO::Socket::SSLをインストールするには、Net::SSLeayモジュールが必要
※試したところ、gmailの場合は、TLS使用&ポート587でも送信できた。
※例ではエンコードにEncodeモジュールを使っているが、Jcodeとか使いたい人はお好きなように。
-----------------------------------------------------------------------
use strict;
use CGI::Carp qw(fatalsToBrowser);
use Net::SMTP;
use Net::SMTP::SSL;
use Net::SMTP::TLS;
use Encode qw(from_to encode);
#メールアドレス設定
my $from = 'hoge@gmail.com';
my $mailto= 'huga@nantoka.com';
#件名設定
my $subject = 'SMTPを指定してメール送信!';
from_to($subject, 'shiftjis', 'iso-2022-jp');
encode('MIME-Header-ISO_2022_JP', $subject);
#メールヘッダー設定
my $header = << "MAILHEADER";
From: $from
To: $mailto
Subject: $subject
Mime-Version: 1.0
Content-Type: text/plain; charset = 'ISO-2022-JP"
Content-Trensfer-Encoding: 7bit
MAILHEADER
#メール本文設定
my $message = << 'MAILBODY';
本日は晴天なり。
あああいいいううう
さよーなら!
MAILBODY
#文字コードをJISに変換
from_to($message, 'shiftjis', 'iso-2022-jp');
#SMTP設定(適宜変更してください)
my $server = 'smtp.gmail.com'; #ホスト名
my $auth = 1; #SMTPAuthを使用する場合は1
my $tls = 0; #TLS接続を使う場合は1
my $ssl = 1; #SSL接続を使う場合は1
my $port = 465; #ポート指定。指定しないと25番が勝手に設定される
my $user = 'hoge@gmail.com'; #SMTPAuthのユーザ名
my $pass = 'passwaord'; #SMTPAuthのパスワード
#メール送信オブジェクト設定
my $smtp = '';
#TLSのときは、オブジェクト生成時にAuthデータを渡す
if($tls){
$smtp = Net::SMTP::TLS->new(
$server,
Port => $port ,
User => $user ,
Password => $pass
) || die "Connect failed over tls";
}
elsif($ssl){
$smtp = Net::SMTP::SSL->new(
$server,
Port => $port
) || die "Connect failed over ssl";
}
else{
$smtp = Net::SMTP->new($server, Port => $port) || die "Connect failed";
}
if(!$tls && $auth){
$smtp->auth($user, $pass) || die "auth failed";
}
#メール送信
$smtp->mail($from);
$smtp->to($mailto);
$smtp->data();
$smtp->datasend($header);
$smtp->datasend($message);
$smtp->dataend();
$smtp->quit;
print <<EOM;
Content-type: text/html
送信しました~!
EOM
exit;
1;
---------------------------------------------------------------------------------
※Net::SMTP::SSLおよびNet::SMTP::TLSを使うには、IO::Socket::SSLモジュールが必要。
※IO::Socket::SSLをインストールするには、Net::SSLeayモジュールが必要
※試したところ、gmailの場合は、TLS使用&ポート587でも送信できた。
※例ではエンコードにEncodeモジュールを使っているが、Jcodeとか使いたい人はお好きなように。

コメントする