maildroprc 自动创建邮箱文件夹并订阅
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