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의 구문이 올바른지 테스트해 보세요.

그런데 이메일을 보내려고 하면[이메일 보호됨], 다음과 같은 결과를 반환합니다.

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매개변수가 하나만 있는 경우 이 매개변수는 인쇄할 파일 핸들이 아니라 인쇄할 목록을 나타내기 때문입니다 .

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

또한 에 있을 필요도 없습니다 open.RCV_MAIL

관련 정보