홈브류 스크립트를 통해 일종의 자동 구독을 수행하려고 합니다. 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