Perl でメールを送信する方法を紹介します。 私はこの仕組みを、サーバの状態を必要な時にメールで通知するスクリプトなどで利用しています。 (参考: Perl の経験皆無の私が作ったサーバ監視スクリプト)
環境
スクリプトを実行するコンピュータ
今回は2種類の環境でやってみました。
ケース1
- Ubuntu 15.04
- Perl 5.20.2
ケース2
- EC2 Amazon Linux 2015.03
- Perl 5.16.3
SMTPサーバ
- EC2 Amazon Linux 2015.03
- Postfix
- CRAM-MD5 でパスワード認証を行う。
コード
一番単純なサンプルコードを掲載します。
パスワード認証をしない場合は、 Digest::MD5
も Authen::SASL
も必要ありません。 もちろん auth
と書いてある行も不要です。 しかし今回は CRAM-MD5 でパスワード認証をしているので、 モジュールが必要になります。 Net::SMTP
の auth
メソッド が Authen::SASL
を利用し、 Authen::SASL
の中で Digest::MD5
が利用されるという流れです。
Authen::SASL
が入ってないと auth
を実行しても認証がおこなわれません。 Digest::MD5
が入っていないと、 Error: No SASL mechanism found
と表示されます。
パスワードの認証方式は 自動で判別されています。 認証サーバで Digest-MD5 が有効であれば CRAM-MD5 よりも Digest-MD5 を優先的に使います。
そして、認証をするにはインストールしなければならないパッケージがあります。
- Ubuntu の場合
- libdigest-hmac-perl
- libauthen-sasl-perl
- Amazon Linux の場合
- perl-Authen-SASL
Amazon Linux の場合、 MD5 のモジュールが入っているパッケージ perl-Digest-MD5 はあらかじめインストールされています。
perl は最初からインストールされていることが多く、 Net::SMTP
モジュール は最初から使えるのですが、 認証するとなると別途インストールが必要になります。