ฉันใช้วิธีการต่อไปนี้ซึ่งใช้งานได้ดี:
1) จัดเก็บรหัสผ่านของคุณในไฟล์ที่เข้ารหัสแบบแยกต่างหาก gpg ตัวอย่างเช่น~/.passwd/<accountname>.gpg
2) สร้างไฟล์นามสกุลหลามด้วยชื่อที่คุณเลือก (เช่น, ~/.offlineimap.py
), โดยมีเนื้อหาดังต่อไปนี้:
def mailpasswd(acct):
acct = os.path.basename(acct)
path = "/home/<username>/.passwd/%s.gpg" % acct
args = ["gpg", "--use-agent", "--quiet", "--batch", "-d", path]
try:
return subprocess.check_output(args).strip()
except subprocess.CalledProcessError:
return ""
3) แก้ไขไฟล์. offlineimaprc ของคุณเพื่อบอกเกี่ยวกับไฟล์ python และบอกวิธีอ่านรหัสผ่านของคุณ
[general]
pythonfile = ~/.offlineimap.py
# ...
[Repository <reponame>]
# add this line for each remote repository
remotepasseval = mailpasswd("<accountname>")
หากคุณมีหลายบัญชีที่ได้รับการตรวจสอบพร้อมกัน (แยกเธรด) และคุณใช้ gpg-agent มันจะขอข้อความรหัสผ่านสำหรับแต่ละบัญชี ฉันทำเอเจนต์ด้วยการสร้างไฟล์ ( echo "prime" | gpg -e -r foo@bar.com > ~/.passwd/prime.gpg
) และเตรียมตัวแทนเอเจนต์ gpg ไว้ด้วยการถอดรหัสไฟล์นี้เมื่อเปิดใช้งานออฟไลน์แผนที่ เมื่อต้องการทำสิ่งนี้เพิ่มสิ่งต่อไปนี้ในตอนท้ายของ~/.offlineimap.py
:
def prime_gpg_agent():
ret = False
i = 1
while not ret:
ret = (mailpasswd("prime") == "prime")
if i > 2:
from offlineimap.ui import getglobalui
sys.stderr.write("Error reading in passwords. Terminating.\n")
getglobalui().terminate()
i += 1
return ret
prime_gpg_agent()