maildroprc 自动创建邮箱文件夹并订阅

2011年6月20日 发表评论 阅读评论

roundcube有个bug,没有自动订阅邮箱的4个folder(Sent Trash Drafts Junk),于是写了一个插件,放在login_after回调里:

public function login_after($data){
        $rcmail = rcmail::get_instance();
        $default_imap_folders = $rcmail->config->get('default_imap_folders');
        $rcmail->imap_connect();
        if(is_object($rcmail->imap)){
            $a_mailboxes = $rcmail->imap->list_unsubscribed();
            $need_subscribed = array_intersect($default_imap_folders, $a_mailboxes);
            $need_subscribed = $default_imap_folders;
            if(count($need_subscribed)>0){
                foreach($need_subscribed as $folder){
                    if (!$rcmail->imap->mailbox_exists($folder))
                          $rcmail->imap->create_mailbox($folder, true);
                      else $rcmail->imap->subscribe($folder);
                }
            }
        }
    }

这样每次登录都回去检查没订阅的邮箱,并且自动订阅,如果不存在则创建(兼容一部分转移过来的丢失folder的老用户)
今天细想,这个工作应该是在maildrop里完成,于是改进了一下maildroprc:

`/usr/bin/test -d $HOME/Maildir/.Sent`
if( $RETURNCODE == 1 )
{
EXTENSION = "Sent"
log "\"$MAILDIRMAKE -f $EXTENSION $DEFAULT\""
`$MAILDIRMAKE -f $EXTENSION "$DEFAULT"`
`if ! grep -q INBOX.$EXTENSION $DEFAULT/courierimapsubscribed; then echo INBOX.$EXTENSION >> $DEFAULT/courierimapsubscribed; fi`
}

`/usr/bin/test -d $HOME/Maildir/.Trash`
if( $RETURNCODE == 1 )
{
EXTENSION = "Trash"
log "\"$MAILDIRMAKE -f $EXTENSION $DEFAULT\""
`$MAILDIRMAKE -f $EXTENSION "$DEFAULT"`
`if ! grep -q INBOX.$EXTENSION $DEFAULT/courierimapsubscribed; then echo INBOX.$EXTENSION >> $DEFAULT/courierimapsubscribed; fi`
}

`/usr/bin/test -d $HOME/Maildir/.Drafts`
if( $RETURNCODE == 1 )
{
EXTENSION = "Drafts"
log "\"$MAILDIRMAKE -f $EXTENSION $DEFAULT\""
`$MAILDIRMAKE -f $EXTENSION "$DEFAULT"`
`if ! grep -q INBOX.$EXTENSION $DEFAULT/courierimapsubscribed; then echo INBOX.$EXTENSION >> $DEFAULT/courierimapsubscribed; fi`
}

`/usr/bin/test -d $HOME/Maildir/.Junk`
if( $RETURNCODE == 1 )
{
EXTENSION = "Junk"
log "\"$MAILDIRMAKE -f $EXTENSION $DEFAULT\""
`$MAILDIRMAKE -f $EXTENSION "$DEFAULT"`
`if ! grep -q INBOX.$EXTENSION $DEFAULT/courierimapsubscribed; then echo INBOX.$EXTENSION >> $DEFAULT/courierimapsubscribed; fi`
}

if (/^X-Spam-Status: Yes/ )
{
 EXTENSION = "Junk"
 log "\"$MAILDIRMAKE -f $EXTENSION $DEFAULT\""
 `$MAILDIRMAKE -f $EXTENSION "$DEFAULT"`
 `if ! grep -q INBOX.$EXTENSION $DEFAULT/courierimapsubscribed; then echo INBOX.$EXTENSION >> $DEFAULT/courierimapsubscribed; fi`
  to $HOME/Maildir/.$EXTENSION/
}

要是maildroprc的语言支持循环的话,就能更省一些。简单备注一下:
$RETURNCODE==1,表示为false(估计是沿用c++的)
$DEFAULT是预定义的变量,为邮件投递的全路径
courierimapsubscribed文件放于邮箱Maildir下,控制邮箱的订阅与否

参考:
http://www.ajaxstu.com/Mailfuwuqi/257893.html
http://gogs.info/wiki/debian/maildrop

声明: 本文采用 BY-NC-SA 协议进行授权. 转载请注明转自: maildroprc 自动创建邮箱文件夹并订阅
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.

*
点击收听验证码
点击收听验证码