Получите электронное письмо Поп/IMAP и затем передайте, как зашифровано Gmail

Как Gilles сказал, Вы являетесь лучшими из изучения обновления Вашей конфигурации soundserver.

Можно использовать pulseaudio для слушания порта TCP. Обязательно проверьте padevchooser, который является GUI frontend для обновления конфигурации.

Можно найти учебное руководство на archlinux Wiki.

8
19.08.2011, 23:12
3 ответа

Я просто видел другой ответ и предположение, я никогда не описывал решение, которое я на самом деле реализовал. Оказывается, что Python imaplib прост, и я записал очень быстрый сценарий. Запрещая несколько изменений (например, анонимизируя мои различные ИМЕНА ПОЛЬЗОВАТЕЛЕЙ, EMAILPASSWORD, WORKDOMAINNAME, 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', ['USERNAME@gmail.com', '-s', subject])
        shlf[num] = datetime.now()


M.close()
M.logout()

Я затем добавил следующие строки к своему crontab (сценарий выше называют mail.py в каталоге, названном почтой), таким образом, это будет работать каждые 5 минут в течение нормальных часов в рабочие дни (8-7pm M-F) и менее часто в другие часы. (crontab-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
3
27.01.2020, 20:13
1
27.01.2020, 20:13
  • 1
    Вы могли включать некоторое объяснение того, как настроить fetchmail, чтобы сделать все это? –  Michael Mrozek♦ 14.09.2011, 15:22
  • 2
    я не думаю, что это добилось бы цели. Это, кажется, получает и пересылает почту достаточно легко, но я не вижу, как я вставил бы шаг шифрования GPG перед передачей. Исправьте меня, если я неправ. –  dr jimbob 14.09.2011, 21:56
  • 3
    Эй доктор jimbob, я предположил, что, после того как у Вас была почта локально, Вы будете использовать свою постфиксную установку, чтобы передать ее по каналу/сцепить через gpg и передать результат. Ваш сценарий добивается цели, но в Вашем вопросе Вы упомянули, что желали использовать инструменты, найденные на Linux. Довольный Вы решили его! –  rjp 15.09.2011, 08:00

Я имел потребность переслать почту корня, зашифрованную также, и суммировал мои результаты здесь: http://www-public.it-sudparis.eu/~berger_o/weblog/2006/01/20/secure-forwarding-of-roots-mail-through-gpg/

Возможно, это может решить Ваши потребности также.

1
27.01.2020, 20:13

Теги

Похожие вопросы