我在Ubuntu 16.04服务器上运行 Postfix 以发送"内部电子邮件"消息和crontab Perl作业,用于解析相关的退回邮件(传递到本地邮箱 / var / mail / bounceparser )。 Perl代码基本上检查 bounceparser 邮箱,解析所有邮件并采取一些操作(删除退回的地址等)。
问题是当我尝试使用 Mail :: Box 库删除那些已解析的邮件时,邮箱会被锁定,如果收到新邮件,则后缀守护程序会抛出异常,尝试传递消息:"无法为用户bounceparser更新邮箱/ var / mail / bounceparser。无法打开文件:权限被拒绝"。
有没有办法在不锁定邮箱文件的情况下删除邮件?如果不可能,还有其他建议的策略吗?
我用来删除邮件的代码:
my $mbox = Mail::Box::Mbox->new(folder =>'/var/mail/bounceparser', access => 'rw');
# @mailbox_pending_deletes contains the list of message ids to delete
for my $message_id (@mailbox_pending_deletes){
$message = $mbox->find($message_id);
$message->delete;
}
my $delete_result = $mbox->close(write=>'MODIFIED');
谢谢!
答案 0 :(得分:0)
正如@SteffenUllrich使用邮箱单个文件框所建议的那样,这不是一个好主意(我真的只是因为它是默认的Postfix配置值^ _ ^而使用它。)
所以,如果你有类似的问题1.-配置Postfix使用 Maildir 而不是邮箱进行消息传递(main.cf文件):
# Set Postfix to deliver messages to Maildir user folder
home_mailbox = Maildir/
和2.-使用 Mail :: Box:Maildir 而不是Mail :: Box:Mbox我用来查找 - 删除邮件。
my $mbox = Mail::Box::Maildir->new(folder =>'/home/bounceparser/Maildir', access => 'rw');
# @mailbox_pending_deletes contains the list of message ids to delete
for my $message_id (@mailbox_pending_deletes){
$message = $mbox->find($message_id);
$message->delete;
}
my $delete_result = $mbox->close(write=>'MODIFIED');
幸运的是,我用来解析退回/发送/等消息的Sisimai库也接受Maildir路径来获取消息:
my $v = Sisimai->make('/home/bounceparser/Maildir/new','hook'=>$x);
感谢您的帮助!