デフォルトでは、POP3またはIMAP経由でアクセスできる電子メールアカウントがあります。すべての受信メールを受け取って暗号化し、暗号化されたバージョンを自分のGmailアカウントに転送したいと思います(それで、自分の携帯電話/ Gmailアカウントでトピック/通知を表示したり、パスワードを使用してメールを復号化することもできます)。最初に実装する必要はありません)。
これを行うためにPythonスクリプトを書くこともできますが、適切なLinuxツールを使用する方が良い方法です。送信メールを送信するためにpostfix(衛星設定)を設定しました。
LinuxシステムでPOP3 / IMAPを読み、gpgに自分の公開鍵を使用して電子メールの本文と添付ファイル(タイトルヘッダーではない)を暗号化して自分のGmailアカウントに転送する最も簡単な方法は何ですか?
(ただし、暗号化されていないバージョンの電子メールを自分の携帯電話に送信することは、業務ポリシー(一部の米国のHIPAA法に準拠)に違反します。誰かが意図的に(または誤って)保護されたデータを電子メールで送信する可能性があるためです。 .私の携帯電話はGPGが安全だと思います)。
答え1
私は他の答えを見ましたが、私が実際に実装したソリューションについて書いたことがないようです。 Python imaplibは簡単で非常に高速なスクリプトを書いたことがわかりました。一部の変更が行われない限り(たとえば、さまざまなユーザー名、電子メールパスワード、ビジネスドメイン名、MYGPGKEYIDの匿名化など)、暗号化して送信するのではなく、件名の前に発信者のユーザー名を追加し、GPGの前にいくつかのヘッダー項目を入れます(携帯電話で読んでも解読できない場合に備えて)。
#!/usr/bin/python
import imaplib
import email
from datetime import datetime,timedelta
import shelve
from subprocess import Popen, PIPE
def piped_call(command1, arg1_list, command2, arg2_list):
"""
if arg1_tuple = (a10, a11, a12); arg2_tuple is (a20, a21)
This executes "command1 a10 a11 a12 | command2 a20 a21 a22"
"""
if type(arg1_list) not in (list, tuple):
arg1_list = [arg1_list,]
if type(arg2_list) not in (list, tuple):
arg2_list = [arg2_list,]
p1 = Popen([command1,]+list(arg1_list), stdout=PIPE)
p2 = Popen([command2,]+list(arg2_list), stdin=p1.stdout, stdout=PIPE)
p1.stdout.close()
return p2.communicate()[0]
shlf = shelve.open('/home/USERNAME/mail/mail.shlf')
# This shelf (a persistent python dictionary written to file) has as its key
# the IMAP message ids of all emails that have been processed by this script.
# Every time the script runs, I fetch all emails from the current day
# (except from midnight to 1am, where I fetch all emails since yesterday)
# and then send all emails that haven't been sent previously
# by checking message ids against the python shelf.
M = imaplib.IMAP4_SSL(host='imap.WORKDOMAINNAME.com', port=993)
M.login('EMAILUSERNAME', 'EMAILPASSWORD')
M.select()
dt = datetime.now() - timedelta(0,5*60*60)
# Only search for messages since the day of an hour earlier.
# This way messages from yesterday don't get lost at midnight; as well as limiting the number of messages to process through to just todays.
typ, uid_data = M.uid('search', None, '(SINCE %s)' % dt.strftime('%d-%b-%Y'))
for num in uid_data[0].split():
typ, data = M.uid('fetch', num, '(RFC822)')
e = email.message_from_string(data[0][1])
print 'Message %s\n%s\n' % (num, e['subject'])
if num not in shlf:
sender_email = e['return-path']
for s in ('<', '>', '@WORKDOMAINNAME.com'):
sender_email = sender_email.replace(s,'')
subject = "%s: %s" % (sender_email, e['Subject'])
body = ("From: %s\n"
"To: %s\n"
"Cc: %s\n"
"Subject: %s\n\n" % (e['From'], e['To'], e['Cc'], e['subject']))
payload = e.get_payload()
if type(payload) in (list, tuple):
payload = str(payload[0])
else:
payload = str(payload)
encrypted_payload = piped_call('echo', (payload,),
'gpg', ('-e', '-a', '-r', 'MYGPGKEYID'))
body += encrypted_payload
piped_call('echo', (body,),
'mail', ['[email protected]', '-s', subject])
shlf[num] = datetime.now()
M.close()
M.logout()
それから私のcrontabに次の行を追加しました(上記のスクリプトはmailというディレクトリにmail.pyと呼ばれます)。これは、通常の平日(月曜日から金曜日の午後8時から午後7時)の間に5分ごとに実行され、他の時間では頻繁に実行されません。タイムズ。 (クローンタブ-e)
# Every 5 minutes, M-F from 8am - 7pm.
*/5 8-19 * * 1-5 cd /home/USERNAME/mail && ./mail.py >> /home/USERNAME/mail/mail.log 2>&1
# Every 30 minutes, Sat&Sun from 8am-7pm
0,30 8-19 * * 6,7 cd /home/USERNAME/mail && ./mail.py >> /home/USERNAME/mail/mail.log 2>&1
# Every 30 minutes, M-F 8pm-2am; (no emails 2am-8am)
0,30 0-2,20-23 * * 1-5 cd /home/USERNAME/mail && ./mail.py >> /home/USERNAME/mail/mail.log 2>&1
# Every 60 minutes, Sat&Sun hours 8pm-2am; (no emails 2am-8am)
0 0-2,20-23 * * 6-7 cd /home/USERNAME/mail && ./mail.py >> /home/USERNAME/mail/mail.log 2>&1
答え2
メールを受け取ります!
答え3
また、暗号化されたルートメールを転送する必要があり、ここで結果を要約しました。http://www-public.it-sudparis.eu/~berger_o/weblog/2006/01/20/secure-forwarding-of-roots-mail-through-gpg/
おそらく、これはあなたの要件を解決するでしょう。