我使用Zarafa作为组件(仅用于测试目的)与XMail Server。 要将邮件导入Zarafa系统,需要使用名为“zarafa-dagent”的二进制文件进行解析。
文件夹结构为:/var/MailRoot/domains/xxxxx.xxx/$user/Maildir/
这些文件夹包含子目录tmp
,new
和cur
。
我的问题是我无法让脚本解析10或12 $userdirs
中的所有电子邮件。
这是我目前的剧本:
userlist=`ls /var/MailRoot/domains/xxx.xx/`
filelist="/var/MailRoot/domains/xxx.xx/$userlist/Maildir/new/*"
for user in $userlist;
do
cd "/var/MailRoot/domains/xxx.xx/"$user"/Maildir/new/";
"/usr/bin/zarafa-dagent $user -f *"
done
脚本输出一条关于无法找到要解析的文件的消息。
zarafa-dagent二进制文件需要2个参数:1个用户名,-f file_to_parse
答案 0 :(得分:1)
试试:
userlist=/var/MailRoot/domains/xxx.xx/*
#filelist=/var/MailRoot/domains/xxx.xx/$userlist/Maildir/new/*
for user in $userlist; do
cd ${userlist%/*}
/usr/bin/zarafa-dagent ${userlist##*/} -f *
done
${userlist%/*}
等来自bash
的参数展开。
一些建议:
filelist
变量从未在您的脚本中使用ls
输出答案 1 :(得分:1)
首先,您在包含对zarafa-dagent
的调用的行周围有引号;我很惊讶它被处决了。
定义filelist
的行是错误的,但未使用。
看起来zarafa-dagent
需要一个包含电子邮件的文件,而不是目录列表。当shell扩展该命令时,它将扩展为/usr/bin/zarafa-dagent someuser -f tmp new cur
。但它只期望一个参数,它可能期望它是一个基于the documentation的文件而不是目录。
答案 2 :(得分:0)
我能看到的唯一错误是对zarafa-dagent
的调用。删除行周围的引号,这应该至少修复一个错误:
/usr/bin/zarafa-dagent $user -f *
filelist
行也是错误的,但无关紧要,因为它从未使用过。
编辑:当它仅处理一封电子邮件时,您必须循环浏览@Brian已建议的所有文件:
for mail in *; do
/usr/bin/zarafa-dagent $user -f $mail
done