山科 氷魚 (YAMASHINA Hio)
and 1 contributors

NAME

Tripletail::Sendmail::MailQueue - 独自のメールキューを使用するメール送信

SYNOPSIS

  my $smail = $TL->newSendmail('SendMailQueue');
  
  $smail->send(...);
  $smail->send(...);
  $smail->send(...);
  
  $smail->process;

DESCRIPTION

送信要求されたメールを、 TripletaiL のメールキューに保存する.

キュー内に保存されたメールは、"process" 呼び出し時に一括して配送される。

METHODS

new

Tripletail::Sendmail 参照。

connect
disconnect

何もしない。

setTimeout

Tripletail::Sendmail::Smtp 参照。配信時のタイムアウト時間を設定する。

send

Tripletail::Sendmail 参照。

process
  $smail->process

実際の配信処理を行う。一般にこのメソッドは処理に時間が掛かる為、 CGIのプロセスから直接呼ぶべきではない。

Ini パラメータ

queuedir
  queuedir = /home/www/mqueue/

メールキューディレクトリ。

timeout
host

Tripletail::Sendmail::Smtp 参照

erroraddr
  erroraddr = null@example.org%localhost

配信エラー時にエラーメールを送るなら、その送信先を指定。

null@example.org%localhost のように使用する smtp サーバーを指定する。 % 以降は省略可能で、省略された場合は localhost となる。

errorlog
  errorlog = 1

配信エラー時にエラーログを記録するかどうか。 0の場合、保存しない。 1の場合、保存する。

実装

メールキュー

メールキューのディレクトリには、queue,incoming,outgoing の3つのディレクトリが 作成済みで、同一のパーティションになければならない。

メールは、1行目にエンベロープFrom、2行目以降にエンベロープToが1行1アドレスで あり、空行を挟み、その後に本文データが続く。改行コードは \r\n とする。

送信時 (Tripletail::MailQueue)

新規にキューにメールを入れる場合は、incoming ディレクトリ内に作成してから queue へ rename(2) する。ファイル名は、時刻、プロセスID等を使い、 ユニークになるようなものとする。

配信時 (mailqueue-process)

メールを処理するときは,outgoing に rename してから処理を行い、終わったら rm する。rename(2) する際、ファイル名の末尾に「.」とプロセスIDを記述する。

メールを定期的に調査し、設定されたMTAへSMTPで送信を行う。failure の場合は 指定アドレスにメールを送るか、ログに書き込む(設定で変更可能)。deferral の場合は queue ディレクトリに rename(2) で戻す。末尾の .$pid は削除する。

修復 (mailqueue-recover)

プロセスが存在しないのに、outgoing にファイルがある場合は、deferral として queue ディレクトリにrename(2) で戻す。末尾の .$pid は削除する。

プロセスが存在しないのにincomingにファイルがある場合は、それを削除する。

SEE ALSO

Tripletail
Tripletail::Sendmail

AUTHOR INFORMATION

    Copyright 2006 YMIRLINK Inc.

    This framework is free software; you can redistribute it and/or modify it under the same terms as Perl itself

    このフレームワークはフリーソフトウェアです。あなたは Perl と同じライセンスの 元で再配布及び変更を行うことが出来ます。

    Address bug reports and comments to: tl@tripletail.jp

    HP : http://tripletail.jp/