perlでsmtpサーバーに接続して送信

何年かぶりに、Perlからメール送信のプログラムを作ってる。

今まではsendmailコマンドをたたいてたけど、昨今の状況だと、適当なサーバーからのsendmailは迷惑メールとして扱われる。

ということで、「差し出し元のEmailアドレス正規のsmtpサーバー」に接続してメール送信を行うことにします。smtp authやらサブミッションポートやらがあるので、
Net::SMTP
を使用。

Authen::SASL
も忘れずにインストール。これが無くてもエラーは出ないが、動作しない。(オイ!)
これで、はまる人多い。(auth – World Wide Walker)

送信ポートの指定も、はまる所のようだ。(G-chan Square – [perl] Net::SMTPでメールを送ろう
本家のドキュメントには書いてないが、実際はポートの指定が出来るようだ。
普通はSMTPサーバーのポートは25番なのですが、CGIの設置はホスティングサーバーを使用して送信する事になると思うので、たいていは25番は不可(OP25B)。
サブミッションポートの587番を指定する。で、サブミッションポートを使うときは、SMTP認証が必須って所も多い。(詳しくは、Emailアドレスの提供元へ。ISPとかGoogleとか・・・。)

 

#!/usr/bin/perl
use Net::SMTP;
my $mailhost = 'smtp.exmple.jp'; # SMTP用のサーバー名
my $mailport = 587; # SMTP用のポート番号。25番のことも多い。
my $mail_username = 'exmple-user'; # メールアカウント
my $mail_password = 'exmple-pass'; # メールのパスワード
my $from_mail = 'from@exmple.jp'; # 送信元のメールアドレス
my $to_mail = 'sendto@exmple.jp'; # 宛先のメールアドレス
my $subject = 'test soushin';
my $message = 'body test mail';
my $header;
$header = "From: $from_mail\n";
$header .= "To: $to_mail\n";
$header .= "Subject: $subject\n";
$header .= "MIME-Version: 1.0"."\n";
$header .= "Content-type: text/plain; charset=ISO-2022-JP"."\n";
$header .= "Content-Transfer-Encoding: 7bit"."\n";
my $smtp = Net::SMTP->new($mailhost, Port => $mailport);
$smtp->auth($mail_username, $mail_password);
$smtp->mail($from_mail);
$smtp->to($to_mail);
$smtp->data();
$smtp->datasend($header);
$smtp->datasend("\n");
$smtp->datasend($message);
$smtp->quit;

参考になった方、誤りを見つけた等、コメントを残してくれるとうれしいです。

Loading Facebook Comments ...

perlでsmtpサーバーに接続して送信」への1件のフィードバック

  1. PerlでSMTP-AUTH認証をする

    Noel Cafeで使用しているサーバーLolipopがパワーアップした。 いろいろ喜ばしいことではあるが、 自作CGIの改良が必要になってしまった。 …

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です