sendmailの/etc/aliasesのパイププログラム

sendmailの/etc/aliasesのパイププログラム

ホームブリッジスクリプトで一種の自動購読を実行しようとしています。 Mailmanのようなメーリングリストでこれを行うことができることを知っていますが、手動で行う方法も学びたいと思います。

簡単なスクリプトは次のとおりです。

#!/usr/bin/perl

use strict;
use warnings;

open ("RCV_MAIL", ">>/home/icasimpan/mail_received.txt") or die $!;
while(<STDIN>){
   print RCV_MAIL;
}
close(RCV_MAIL);

次の構文を使用して、上記のスクリプトを/ etc / aliasesに追加しました。

subscribe: | /home/icasimpan/parse-subscribe.pl

そして走る

$ sudo newaliases

これはまだ非常に単純なスクリプトです。 /etc/aliasesの構文が正しいことをテストしてください。

しかし、Eメールを送信しようとすると[Eメール保護]、次の結果を返します。

Delivery failure 69

私はLotus Notesを使用しており、Googleで検索すると次のリンクになります。このリンク。どうやらファイルと関連があるようですが…わかりません。

コマンドは実行可能です。私は実際に777に設定しようとしましたが、ファイル権限の問題がないことを確認するためにディレクトリにmail_received.txtを作成しましたが、まだ同じです。

答え1

smrsh設定(多くのデフォルト設定で一般的です)でsendmailを実行している場合は、/ etc / smrsh /の外部でパイプコマンドを実行する必要があります。シンボリックリンクでもスクリプトコピーでも構いませんが、sendmailにsmrshが定義されている場合は、そのディレクトリで実行する必要があります。たとえば、

subscribe: | /etc/smrsh/parse-subscribe.pl

詳しくはsmrshのsendmailのドキュメントをご覧ください。

答え2

「エイリアス」にスペースがある場合は、それを引用する必要があります。

subscribe: "| /home/icasimpan/parse-subscribe.pl"

または、スペースを削除します。

subscribe: |/home/icasimpan/parse-subscribe.pl

答え3

open ("RCV_MAIL", ">>/home/icasimpan/mail_received.txt") or die $!;
while(<STDIN>){
   print RCV_MAIL;
}

間違った。

mail_received.txtにSTDIN行を印刷するには、次のものが必要です。

open (RCV_MAIL, ">>/home/icasimpan/mail_received.txt") or die $!;
while (<STDIN>) {
   print RCV_MAIL $_;
}

printパラメータが1つしかない場合、このパラメータは印刷するファイルハンドルではなく印刷するリストを表すためです。

$ perldoc -f print
print FILEHANDLE LIST
print LIST
...

またにいる必要もありませんopenRCV_MAIL

関連情報