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/perluse 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;
mk
  • mk

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

Loading Facebook Comments ...

1件のコメント

  • PerlでSMTP-AUTH認証をする

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

コメントする

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

No Trackbacks.