Hallo zusammen.
Ich arbeite grad an einem kleinen Script welches die einkommenden Mails auf einen gewissen Absender überprüfen sollen und falls dieser mit der Vorgabe übereinstimmt an einen Facebook-Gruppenchat eine Nachricht schickt. Leider kriege ich das grad nicht hin dass der Absender richtig ausgelesen wird. Ich wäre daher froh wenn mir da einen kleinen Tipp geben könnte ;). Der rest funktioniert soweit. Die Mails werden ausgelesen und die Nachricht an den Chat kann verschickt werden. Ich vermute dass From(Zeile 61) hier nicht die richtige Wahl ist um die Adresse des Absenders zu prüfen.
#!/usr/bin/python2
# -*- coding: UTF-8 -*-
from __future__ import print_function
import email
import imaplib
import urllib
import requests
import time
from time import gmtime, strftime
import fbchat
from fbchat.models import *
#Konstanten
USERNAME = str("mein fbusername bzw mail")
PASSWORD = str("meinfbpasswort")
MESSAGE = str("Diese Nachricht wurde von einem Script verschickt")
GROUP_ID = str("<Facebook-Gruppen-ID>")
MAIL_SERVERS = {
'gmail':
{
'Login': 'meine@gmail.com',
'Password': 'meinpasswort',
'Server': 'imap.gmail.com',
'Port': 993,
},
}
#Log-Funktion
logtime = time.strftime('%d.%m.%Y - %H:%M:%S')
logmessage = logtime + ' testfbchat.py ausgeführt' + "\n"
with open('/home/pi/scriptexec.log', 'a') as att_file:
att_file.write(logmessage)
#Mail-Funktion
#Nur auf Mails reagieren die von diesem Absender kommen
FROM = 'no-reply@accounts.google.com'
DEBUG = False
# check Mails
def check_mails():
for SRV in MAIL_SERVERS:
if MAIL_SERVERS[SRV]['Login'] == '':
continue
print('Checking: {}'.format(SRV))
m = imaplib.IMAP4_SSL(MAIL_SERVERS[SRV]['Server'], MAIL_SERVERS[SRV].get('Port', 993))
m.login(MAIL_SERVERS[SRV]['Login'], MAIL_SERVERS[SRV]['Password'])
m.select('Inbox')
status, unreadcount = m.status('INBOX', '(UNSEEN)')
unreadcount = int(unreadcount[0].split()[2].strip(').,]'))
if unreadcount > 0:
print('processing {} unreaded emails ...'.format(unreadcount))
items = m.search(None, 'UNSEEN')
items = str(items[1]).strip('[\']').split(' ')
for index, emailid in enumerate(items):
resp, data = m.fetch(emailid, '(RFC822)')
email_body = data[0][1]
mail = email.message_from_string(email_body)
if mail['From'] == FROM:
print('Absender gefunden')
timeNow = strftime('%d.%m.%Y %H:%M:%S', gmtime())
print('[{}] New EMail with Subject "{}" received, checking.. '.format(timeNow, mail['Subject']))
countIt=False
nextmail=False
#Facebook-Client Anmeldung
client = fbchat.Client(USERNAME, PASSWORD)
#Sende Nachricht an Facebook-Chat
client.send(Message(text=(MESSAGE)), thread_id=GROUP_ID, thread_type=ThreadType.GROUP)
#Logout von Facebook
client.logout()
else:
#Unpassende Mails wieder als ungelesen markieren
m.store(emailid, '-FLAGS', '(\Seen)')
try: m.logout()
except: pass
print('Done.')
if __name__ == '__main__':
try:
check_mails()
except Exception, error:
print('Error...: {}'.format(error))
except (KeyboardInterrupt, SystemExit):
print('Schliesse Programm.')
#EOF
Alles anzeigen
Edit: Wenn ich den Codeblock auf Python einstelle werden alle Kommentare und der Shebang ausgeblendet... Ich denke das sollte nicht so sein? oO
Edit2: Fehler war wohl das From als Google <no-reply@accounts.google.com> definiert wird. Muss noch schauen dass ich nur die Mailadresse rauskrieg ohne den Namen davor.
Grüsse Apop