<p>由于解析dovecot uidlist将无法工作,因为列表将不会更新,直到您与您的电子邮件客户端检查电子邮件,我决定使用其他解决方案。这个解决方案就是dovecot预授权机制。在我的python procmail管道脚本中,我决定这样做:</p>
<pre><code>import subprocess
p = subprocess.Popen( "/usr/libexec/dovecot/imap -u "+user, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
p.stdin.write("b select INBOX\n")
p.stdin.write("e logout\n")
(stdoutdata, stderrdata) = p.communicate()
print stdoutdata
print stderrdata
</code></pre>
<p>stdoutdata给出的输出如下所示:</p>
^{pr2}$
<p>现在我要做的就是解析输出的这一部分:</p>
^{3}$
<p>这个预授权解决了我的问题。解析和我的解决方案将在今天稍后的博客中完成。在</p>
<h2><strong>解决方案:</strong></h2>
<pre><code>import subprocess
pSub = subprocess.Popen( "/usr/libexec/dovecot/imap -u "+username+"@"+domain_parsed, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
pSub.stdin.write("b select INBOX\n")
pSub.stdin.write("e logout\n")
(stdoutdata, stderrdata) = pSub.communicate()
dovecotStream = open("/var/www/domain.com/scripts/server/dovecot","w")
dovecotStream.write(stdoutdata)
dovecotStream.close()
nextuidNo = []
with open("/var/www/domain.com/scripts/server/dovecot") as dovecotFile:
dovecotFilelines = dovecotFile.read()
for dovecotFileline in dovecotFilelines.split('\n'):
matchCheck = re.findall(r'\[UIDNEXT.+\]', dovecotFileline)
if len(matchCheck):
nextuidNo = re.findall(r'\d+', matchCheck[0])
print nextuidNo #this is list
</code></pre>
<p>完成博文:<a href="https://pregmatch.org/read/dovecot-preauth-python" rel="nofollow">https://pregmatch.org/read/dovecot-preauth-python</a></p>