perlでsmtpサーバーに接続して送信
2010年5月28日
2016年1月18日
何年かぶりに、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;
PerlでSMTP-AUTH認証をする
Noel Cafeで使用しているサーバーLolipopがパワーアップした。 いろいろ喜ばしいことではあるが、 自作CGIの改良が必要になってしまった。 …