我正在尝试通过自制脚本进行某种自动订阅。我知道这可以通过 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,所以我的谷歌搜索引导我到这个链接。显然,与该文件有关......不确定。
该命令是可执行的,事实上我尝试将其设置为 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;
}
是错的。
如果您尝试将 STDIN 的行打印到 mail_received.txt,您将需要:
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
.