Home > 自宅マシンメール送信計画 > Perlモジュールで自力送信の巻
自宅マシンメール送信計画
- 自宅サーバからメール送信 -
ずっと使えるレンタルサーバー@YMC

Perlモジュールで自力送信の巻

Perl4では共通部品はライブラリ(cgi-lib.plやjcode.pl)が中心でしたが、Perl5からはモジュールに進化しました。
ライブラリは requireとして使って単にプログラムをロードするだけに対して、パッケージは useとして使って、オブジェクトを使ったプログラムを作れるところにあります。
このように、Perl5からは「オブジェクト指向」という考え方が現れます。これはソフトウェア開発用語の1つですが、簡単に言うと「アイデアがそのままコードになる」ということです。つまり、内部動作の詳細を隠し、利用しやすくしようとする考え方です。

このPerlモジュールには、標準で付いてくるモジュール(これを標準モジュールといいます)と、必要に応じて自分でインストールするモジュールがあります。
今回のメール送信計画では、標準モジュールである IO:Socketモジュールを使ってメール送信を実現してみましょう。これを利用すれば、sendmailを使うことなくメールを送信することができます。

■IO::Socketモジュールの使い方
IO::Socketモジュールは標準モジュールですので、ActivePerlにも付属されています。
基本的な使い方は以下のとおりです。
use IO::Socket;
$sock = IO::Socket::INET->new(
                               Proto    => 'tcp',
                               PeerAddr => $host,
                               PeerPort => $port,
                              );
【解説】
1行目は、IO::Socketモジュールを使うことを宣言します。Perlモジュールを利用するときは、このように useを使います。
2行目以降でソケット通信を使って、メールサーバへ接続する関数です。
Proto → プロトコル名(通信手順)です。ここでは「tcp」を指定します。
PeerAddr → 接続するサーバのホスト名を指定します。
PeerPort → 接続するサーバのポート番号を指定します。

これだけでメールサーバはもちろん、FTPサーバやWWWサーバにも接続することができます。まさにオブジェクトなモジュールです。

■SMTPサーバと会話する
メールの送受信について簡単に説明しておきますと、一般的にインターネットでメールを送信するときは「SMTPサーバ」へ、メールを受信するときは「POP3サーバ」へ接続して TCP/IPというプロトコル(通信手段)で会話をする必要があります。
SMTPサーバへ接続した後には、メール送信するまでの会話は「SMTPコマンド」で行います。「SMTPコマンド」の基本は以下のとおりです。

SMTPコマンド
[送信元] [SMTPサーバ] [会話の内容]
HELOコマンド
250 メール送信します
MAILコマンド
250 送信元は●●です
RCPTコマンド
250 or 251 送信先は▲▲です
DATAコマンド
354 それでは本文を送ります
[本文] + ピリオド
250 [本文]送信。最後のピリオド
は本文ENDを意味する
QUITコマンド 送信を完了しました


上記のSMTPコマンドでの会話を、CGIが行うことになります。次ページで具体的に行ってみます。

UP NEXT
Top Next