[qmail][perl] qmail, perlで自動返信メール

qmailで自動返信メールを送信する必要があったので、その実装についてのメモを記載しておく。

参考URL

qmail側の設定

  • qmailディレクトリは以下とする
    • /var/qmail/


aliasの設定を変更して対応する。

/var/qmail/alias の下に.qmail-fugaのようなファイルを作成する。
するとfuga@example.com にメール送信するとこのファイルが実行されるようになる。
権限はalias.qmailに変えておく。

# vi /var/qmail/alias/.qmail-fuga
-----
| /home/fuga/script/automail.pl  ← メール内容をパイプでつなぎ標準入力として処理
&tensousaki@2example.com ← メール転送先
-----
# chown alias.qmail /var/qmail/alias/.qmail-fuga

メール受信プログラム

主な部分を抜粋。
標準入力を受け取り、MIME::Parserで解析してメール送信。

&main;

sub main {
    my $lv_org_mail = "";
    my $replyto = "";
    my $from = "";
    while(<STDIN>) {
        $lv_org_mail .= $_;
    }
    my $parser = new MIME::Parser;
    my $entity = $parser->parse_data($lv_org_mail);
    my $header = $entity->head;
    my $addr = $entity->head->get('from');
    $addr =~ s/.*<(.*?)>.*/$1/g; # <>の中身がある場合にメアドを取り出す
    my $body = "
ボディーです
----
$lv_org_mail
----
";
    &send_reply_mail($addr, $body);
}

sub send_reply_mail {
     my ($addr, $body) = @_;
     // メール送信の処理を記載する
           :
           :
}