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



我在 Ubuntu 16.04 服务器上运行 Postfix 来发送"内部电子邮件"消息,并使用 crontab Perl 作业来解析相关的退回消息(传递到本地邮箱/var/mail/bounceparser(。Perl代码基本上检查弹跳解析器邮箱,解析所有邮件并采取一些操作(删除退回的地址等(。

问题是,当我尝试使用 Mail::Box 库删除那些已经解析的邮件时,邮箱被锁定,如果新邮件到达,postfix 守护程序会引发异常,尝试传递邮件:"无法为用户反弹解析器更新邮箱/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');

谢谢!

正如使用邮箱单个文件框@SteffenUllrich所建议的那样,这不是一个好主意(真诚地,我使用它只是因为它是默认的后缀配置值^_^(。

因此,如果您有类似的问题 1.- 将 Postfix 配置为使用 Maildir 而不是邮箱进行邮件传递(main.cf 文件(:

# Set Postfix to deliver messages to Maildir user folder
home_mailbox = Maildir/
和 2.- 使用邮件::框:邮件

目录,而不是我用来查找-删除邮件的邮件::框: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);

感谢您的帮助!

相关内容

  • 没有找到相关文章

最新更新