2016-05-01 4 views
-1

Я пытаюсь получить offlineimap для запуска в фоновом режиме на OSX El Capitan с помощью запуска.В автономном режиме запускать с запуском не удается найти модули python, используемые для скрыть пароль

Вот мой PLIST:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Label</key> 
    <string>com.andypierz.offlineimap.plist</string> 
    <key>ProgramArguments</key> 
    <array> 
    <string>/usr/local/bin/offlineimap</string> 
    <string>-u</string> 
    <string>quiet</string> 
    </array> 
    <key>StartInterval</key> 
    <integer>60</integer> 
    <key>StandardErrorPath</key> 
    <string>/Users/Andy/.Mailder/offlineimap_err.log</string> 
    <key>StandardOutPath</key> 
     <string>/Users/Andy/.Mailder/offlineimap.log</string> 
</dict> 
</plist> 

Эти нагрузки и работает, однако мои журналы показывают offlineimap работает в ошибку:

OfflineIMAP 6.7.0 
    Licensed under the GNU GPL v2 or any later version (with an OpenSSL exception) 
ERROR: No module named keyring 
ERROR: Exceptions occurred during the run! 
ERROR: No module named keyring 

Чтобы избежать мои пароли в незашифрованном виде в моем .offlineimaprc Я использую метод python keyring, описанный here.

Когда я запускаю offlineimap с терминала, он отлично работает, и я могу использовать брандмауэр python для импорта моих паролей без проблем. Точно так же, когда я запускаю offlineimap как cronjob, это также, кажется, работает без инцидентов. Тем не менее, cron устарел на OSX, поэтому я предпочел бы использовать launchd.

Соответствующие части моего .offlineimaprc:

[general] 
accounts = personal, work 
maxsyncaccounts = 3 
pythonfile = /Users/Andy/offlineimap.py 

[Repository personalRemote] 
type = IMAP 
remotehost = myhost.com 
remoteuser = [email protected] 
remotepasseval = keyring.get_password('email', 'personal') 

[Repository workRemote] 
type = IMAP 
remotehost = myhost.com 
remoteuser = [email protected] 
remotepasseval = keyring.get_password('email', 'work') 

Мой файл offlineimap.py является просто

#!/usr/bin/python 
import keyring 

ответ

0

ответить на ошибку:

$sudo pip install keyring 

, и если это не работает для вас,

0) создать пароль в связке ключей, как сделать here in Retrieving Passwords section

1) создать файл

$touch ~/offlineimap.py 

offlineimap.py

#!/usr/bin/python 
import re, subprocess 
def get_keychain_pass(account=None, server=None): 
    params = { 
     'security': '/usr/bin/security', 
     'command': 'find-internet-password', 
     'account': account, 
     'server': server, 
     'keychain': '/Users/${USER}/Library/Keychains/login.keychain', 
    } 
    command = "sudo -u ${USER} %(security)s -v %(command)s -g -a %(account)s -s %(server)s %(keychain)s" % params 
    output = subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT) 
    outtext = [l for l in output.splitlines() 
       if l.startswith('password: ')][0] 

    return re.match(r'password: "(.*)"', outtext).group(1) 

2) редактировать строку в

.offlineimaprc

pythonfile = ~/offlineimap.py 

3) и обновлять удаленные разделы

remotepasseval = get_keychain_pass(account="[email protected]", server="sub.domain.com") 

4) если все еще возникают проблемы, попробуйте изменить параметр команды в offlineimap.py файл в

find-generic-password 

5) правильные ваш Этикетка строка и запускать ее только один раз во время запуска

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Label</key> 
    <string>com.andypierz.offlineimap</string> 
    <key>LaunchOnlyOnce</key> 
    <true/> 
    <key>ProgramArguments</key> 
    <array> 
    <string>sh</string> 
    <string>-c</string> 
    <string>/usr/local/bin/offlineimap -u quiet</string> 
    </array> 
    <key>RunAtLoad</key> 
    <true/> 
</dict> 
</plist> 

6) загрузить его

launchctl load com.andypierz.offlineimap.plist 
+0

Спасибо, это работало отлично для меня. – tinyspark