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が行うことになります。次ページで具体的に行ってみます。
 |
|
 |
| Top |
|
Next |
|