「smtp」タグアーカイブ

Perl でメールを送信する方法


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::MD5Authen::SASL も必要ありません。 もちろん auth と書いてある行も不要です。 しかし今回は CRAM-MD5 でパスワード認証をしているので、 モジュールが必要になります。 Net::SMTPauth メソッド が 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 モジュール は最初から使えるのですが、 認証するとなると別途インストールが必要になります。