The 100 best digital picture frames on amazon
The 100 best digital picture frames on amazon
The 100 best digital picture frames on amazon
The 100 best digital picture frames on amazon

So schickst du Fotos per E-Mail zu dei­nem digi­ta­len Bil­der­rah­men

-

Wenn du es rich­tig ein­fach machen willst, neue Bil­der auf dei­nen digi­ta­len Bil­der­rah­men auf­zu­spie­len, dann mache es doch per Email. Und wenn wir schon dabei sind: Ermög­li­che es doch Fami­lie & Freun­den, dir Fotos direkt vom Smart­Pho­ne auf den Rah­men zu schi­cken.

In die­sem Arti­kel fin­dest du eine detail­lier­te Anlei­tung, die es dir mit einem kos­ten­lo­sen Google Email Kon­to und einem Python Skript erlaubt, genau das umzu­set­zen.

Nach­dem du es instal­liert hast, kann jede Per­son, die die Email Adres­se dei­nes Bil­der­rah­mens und den gehei­men #Hash­tag kennt, Bil­der schi­cken, die auto­ma­tisch zu dei­ner Bil­der­samm­lung hin­zu­ge­fügt wer­den.

So ein­fach wie mög­lich

Ein digi­ta­ler Bil­der­rah­men macht erst dann rich­tig Freu­de, wenn du genü­gend Bil­der hoch­ge­la­den hast und dei­nen Bestand regel­mä­ßig aktua­li­sierst.

In dem Bei­trag "So instal­lierst du Drop­box für die gan­ze Fami­lie auf dei­nem digi­ta­len Rasp­berry Pi Bil­der­rah­men" habe ich eine Mög­lich­keit beschrie­ben, wie man sich die Aktua­li­sie­rung mit Resi­lio Sync sehr leicht machen kann.

Aber selbst die­ser Weg ist manch­mal nicht ein­fach genug, vor allem wenn es mit dem Han­dy gehen soll. Und die meis­ten Bil­der wer­den heu­te eben mit Han­dys auf­ge­nom­men.

Daher ist ein wei­te­rer Ansatz das Ver­schi­cken von Fotos von dei­nem Smart­Pho­ne direkt an dei­nem Bil­der­rah­men. Die Emails mit den Bil­dern wer­den mit einem gehei­men #Hash­tag ver­se­hen und nur die­se auto­ri­sier­ten Emails wer­den auf Fotos hin gescannt.

In einem zwei­ten Schritt wer­den die Bil­der auto­ma­tisch her­un­ter­ge­la­den und dei­nem Bil­der­ver­zeich­nis hin­zu­ge­fügt.

Nach dem Email Scan, wer­den alle Emails in ein "Pro­ces­sed" Ver­zeich­nis ver­scho­ben. Auch die Emails, die kei­nen pas­sen­den #Hash­tag hat­ten, damit dei­ne Inbox, die ja nur für den Bil­der­rah­men exis­tiert, immer auf­ge­räumt ist.

Die Emails wer­den ver­scho­ben und nicht gleich gelöscht, damit man bei even­tu­el­len Pro­ble­men immer noch nach­schau­en kann, wor­an es gele­gen hat. Da Gmail 15 GB Spei­cher­ka­pa­zi­tät anbie­tet und nur für den Bil­der­rah­men ver­wen­det wird, wird das voll­kom­men aus­rei­chen.

Die nach­fol­gen­de Anlei­tung geht davon aus, dass ihr euren Rasp­berry Pi so wie im Arti­kel "So spielst du in weni­ger als 60 Minu­ten die Soft­ware für dei­nen digi­ta­len Bil­der­rah­men auf" beschrie­ben kon­fi­gu­riert habt.

Erstel­le ein Gmail Kon­to und kon­fi­gu­rie­re es für dei­nen Bil­der­rah­men

Gehe zu Gmail und erstel­le ein neu­es Email Kon­to. Ver­giss nicht ein zufäl­li­ges, ein­zig­ar­ti­ges und lan­ges Pass­wort zu ver­wen­den.

Wenn du damit fer­tig bist, log­ge dich in dein Kon­to ein. Zuerst müs­sen wir IMAP akti­vie­ren. Gehe auf das Zahn­­rad-Menu zu Settings/Einstellungen und akti­vie­re IMAP.

Dann erstel­le ein Label (die Bezeich­nung für Ord­ner in Gmail) und nen­ne es "Pro­ces­sed".

Ände­re jetzt die Sicher­heits­ein­stel­lun­gen, so dass du auf dein Email Kon­to vom Rasp­berry Pi aus zugrei­fen kannst.

Gehe zu dei­nen Kon­to­ein­stel­lun­gen und wäh­le "Allow less secu­re apps".

Zu guter Letzt schi­cke eine Email von dei­nem Bil­der­rah­men­kon­to an dei­ne nor­ma­le Email und ant­wor­te dar­auf. Die­ser Tipp wur­de in einem Forum erwähnt, um Google wenigs­tens ein­mal klar zu machen, dass man kein Bot ist, weil ja der Bil­der­rah­men ledig­lich Emails emp­fängt und kei­ne sen­det.

Das war es auch schon. Dein digi­ta­ler Bil­der­rah­men hat jetzt ein eige­ne Email-Adres­­se.

Das Python Skript zum auto­ma­ti­schen Her­un­ter­la­den der Bil­der

Das unten­ste­hen­de Python Skript macht fol­gen­des:

Es prüft zunächst, ob in dei­nem Bil­der­rah­men Gmail Kon­to neue Emails ein­ge­trof­fen sind. Wenn ja, wird geprüft, ob in der Betreff­zei­le dein gehei­mer #Hash­tag wie z.B. "#mypic­tures" vor­han­den ist. Der #Hash­tag kann am Anfang, in der Mit­te oder am Ende der Betreff­zei­le sein.

Wenn neue Emails mit dem #Hash­tag in der Betreff­zei­le gefun­den wer­den, prüft das Skript als nächs­tes, ob Bil­der ange­hängt sind. Wenn ja, wer­den die Bil­der in ein Ver­zeich­nis "attach­ments" im Pi Home Ver­zeich­nis her­un­ter­ge­la­den. Dabei ist es egal, ob ein oder meh­re­re Bil­der ange­hängt sind, es wer­den alle her­un­ter­ge­la­den.

Wich­tig ist dabei nur, dass du die Bil­der mög­lichst hoch­auf­ge­löst and dei­ne Bil­­der­rah­­men-Email schickst. Dann hast du spä­ter auch die bes­te Bild­qua­li­tät auf dei­nem Rah­men.

Email Pro­gram­me haben oft eine Ein­stel­lung, die ange­häng­te Bil­der ver­klei­nert. Die soll­test du auf "Ori­gi­nal" belas­sen.

Kopie­re den nach­fol­gen­den Code in eine neue Python Datei und nen­ne sie get_images_from_emails.py. Oder lade dir die Datei hier her­un­ter.

  1. #!/usr/bin/env python3
  2. # read emails and detach attachment in attachments directory
  3.  
  4. import email
  5. import getpass, imaplib
  6. import os
  7. import sys
  8. import time
  9.  
  10. detach_dir = '.'
  11. if 'attachments' not in os.listdir(detach_dir):
  12.     os.mkdir('attachments')
  13.  
  14. userName = 'enter-your-gmail-account-name-here'
  15. passwd = 'enter-your-password-here'
  16.  
  17. try:
  18.     imapSession = imaplib.IMAP4_SSL('imap.gmail.com',993)
  19.     typ, accountDetails = imapSession.login(userName, passwd)
  20.     if typ != 'OK':
  21.         print ('Not able to sign in!')
  22.         raise Exception
  23.  
  24.     imapSession.select('Inbox')
  25.     typ, data = imapSession.search(None, 'SUBJECT', '"#mypictures"')
  26.     if typ != 'OK':
  27.         print ('Error searching Inbox.')
  28.         raise Exception
  29.  
  30.     # Iterating over all emails
  31.     for msgId in data[0].split():
  32.         typ, messageParts = imapSession.fetch(msgId, '(RFC822)')
  33.  
  34.         if typ != 'OK':
  35.             print ('Error fetching mail.')
  36.             raise Exception
  37.  
  38.         emailBody = messageParts[0][1] 
  39.         mail = email.message_from_bytes(emailBody) 
  40.  
  41.         for part in mail.walk():
  42.  
  43.             if part.get_content_maintype() == 'multipart':
  44.  
  45.                 continue
  46.             if part.get('Content-Disposition') is None:
  47.  
  48.                 continue
  49.  
  50.             fileName = part.get_filename()
  51.  
  52.             if bool(fileName): 
  53.                 filePath = os.path.join(detach_dir, 'attachments', fileName)
  54.                 if not os.path.isfile(filePath) : 
  55.                     print (fileName)
  56.                     print (filePath)
  57.                     fp = open(filePath, 'wb')
  58.                     fp.write(part.get_payload(decode=True))
  59.                     fp.close()
  60.  
  61.     #MOVING EMAILS TO PROCESSED PART BEGINS HERE
  62.     imapSession.select(mailbox='inbox', readonly=False)
  63.     resp, items = imapSession.search(None, 'All')
  64.     email_ids = items[0].split()
  65.     for email in email_ids:
  66.         latest_email_id = email
  67.  
  68.         #move to processed
  69.         result = imapSession.store(latest_email_id, '+X-GM-LABELS', 'Processed')
  70.  
  71.         if result[0] == 'OK':
  72.             #delete from inbox
  73.             imapSession.store(latest_email_id, '+FLAGS', '\\Deleted')
  74.  
  75.     #END OF MOVING EMAILS TO PROCESSED
  76.  
  77.     imapSession.close()
  78.     imapSession.logout()
  79.  
  80. except :
  81.     print ('No attachments were downloaded')

Hin­weis:

Tra­ge dei­nen Gmail-Namen (ohne "@gmail.com") und dein Pass­wort hier ein:

userName = 'enter-your-gmail-account-name-here'
passwd = 'enter-your-password-here'

Den Namen für das Ver­zeich­nis, in das die Bil­der her­un­ter­la­den wer­den kannst du hier ändern:

os.mkdir('attachments')

Dein gehei­mes Code­wort erstellst du durch Edi­tie­ren von "#mypic­tures". Ach­te dar­auf, dass du die Sin­gle und Dou­ble Quo­tes exakt gleich wie im Code bei­be­hältst.

typ, data = imapSession.search(None, 'SUBJECT', '"#mypictures"')

Ver­schie­be das Skript in dein Rasp­berry Pi Home Ver­zeich­nis.

Um das Skript ein­mal pro Stun­de auf­zu­ru­fen, modi­fi­zierst du jetzt noch dei­ne Crontab Datei.

In Ter­mi­nal gibst du ein

crontab -e

und fügst die­se Zei­le hin­zu:

0 * * * * python3 get_images_from_emails.py

Jetzt tes­te dei­ne Ein­stel­lun­gen, in dem du eini­ge Emails mit Bil­dern an den Bil­der­rah­men schickst. Ver­giss den #Hash­tag in der Betreff­zei­le nicht! Die Bil­der soll­ten in Ver­zeich­nis "attach­ment" auf­tau­chen.

Lust auf mehr?

Um es jetzt noch ein­fa­cher zu machen, kann man das Skript dahin­ge­hend erwei­tern, so dass neue Fotos auto­ma­tisch geprüft und auf das Sei­ten­ver­hält­nis dei­nes Bil­der­rah­mens zuge­schnit­ten wer­den. Und dann wer­den sie noch auto­ma­tisch in das Bil­d­er­haupt­ver­zeich­nis ver­scho­ben, basie­rend auf dem EXIF Datum. So fin­det man sie auch leicht wie­der.

Dar­um wird es in einem zukünf­ti­gen Arti­kel gehen.