如何删除没有邮箱文件锁定的邮件?我正在使用Perl的Mail :: Box

时间:2017-06-14 13:52:37

标签: perl cpan postfix email-bounces

我在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');

谢谢!

1 个答案:

答案 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);

感谢您的帮助!