Seite 1 von 1

Blicke nicht durch: Zeitangabe im Mail Subject

Verfasst: Samstag 31. August 2013, 22:34
von bose71
Hallo!

Setze gerade eine Webcam auf Basis eines Raspberry pi auf und bin dabei über Python gestolpert. Die Raspicam soll täglich ein Bild machen welches dann per Mail an Flickr geht. Nun habe möchte ich folgenden Code dahingehend abändern, daß im Mail-Subject das aktuelle Datum mit Zeit angegeben wird, da hieraus später der Bildtitel abgeleitet wird. Als Beispiel also "Webcambild vom 31.8.2013 23:29" (= aktuelle Zeit).

Hier der Code (aus http://mitchtech.net/connect-raspberry- ... tter-more/)

#!/usr/bin/env python
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
import os

USERNAME = "username@gmail.com"
PASSWORD = "password"

def sendMail(to, subject, text, files=[]):
assert type(to)==list
assert type(files)==list

msg = MIMEMultipart()
msg['From'] = USERNAME
msg['To'] = COMMASPACE.join(to)
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = subject
msg.attach( MIMEText(text) )

for file in files:
part = MIMEBase('application', "octet-stream")
part.set_payload( open(file,"rb").read() )
Encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"'
% os.path.basename(file))
msg.attach(part)

server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo_or_helo_if_needed()
server.starttls()
server.ehlo_or_helo_if_needed()
server.login(USERNAME,PASSWORD)
server.sendmail(USERNAME, to, msg.as_string())
server.quit()


sendMail( ["mailto@gmail.com"],
"this is the subject",
"this is the body text of the email",
["photo.jpg","text_file.txt"] )

---

Leider habe ich nur wenig Erfahrung mit PHP, hier steige ich nicht durch. Hat jemend einen Ansatz?

Vielen Dank!

Bose

Re: Blicke nicht durch: Zeitangabe im Mail Subject

Verfasst: Samstag 31. August 2013, 23:26
von Dami123
Poste den Code bitte in den jeweiligen Klammern.

Damit sollte es funktionieren:

Code: Alles auswählen

#!/usr/bin/env python
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
import os
import datetime
 
USERNAME = "username@gmail.com"
PASSWORD = "password"
 
def sendMail(to, subject, text, files=[]):
    assert type(to)==list
    assert type(files)==list
    cur_datetime = datetime.datetime.now().strftime("%d.%m.%Y %H:%M")
 
    msg = MIMEMultipart()
    msg['From'] = USERNAME
    msg['To'] = COMMASPACE.join(to)
    msg['Date'] = formatdate(localtime=True)
    msg['Subject'] = "{0} {1}".format(subject, cur_datetime)
    
    msg.attach( MIMEText(text) )
 
    for file in files:
        part = MIMEBase('application', "octet-stream")
        part.set_payload( open(file,"rb").read() )
        Encoders.encode_base64(part)
        part.add_header('Content-Disposition', 'attachment; filename="%s"'
                       % os.path.basename(file))
        msg.attach(part)
 
	server = smtplib.SMTP('smtp.gmail.com:587')
	server.ehlo_or_helo_if_needed()
	server.starttls()
	server.ehlo_or_helo_if_needed()
	server.login(USERNAME,PASSWORD)
	server.sendmail(USERNAME, to, msg.as_string())
	server.quit()
 
 
sendMail( ["mailto@gmail.com"],
        "this is the subject",
        "this is the body text of the email",
        ["photo.jpg","text_file.txt"] )
Der Titel wäre "Titel 01.09.2013 00:25"
PS: Es handelt sich um Python nicht php ;)

Re: Blicke nicht durch: Zeitangabe im Mail Subject

Verfasst: Sonntag 1. September 2013, 00:07
von cofi
Willkommen im Forum und zu Python!

Ich wuerde nicht `sendMail` aendern, da es einfach zu unflexibel wird.
Stattdessen einfach das fertige Subject uebergeben. Damit wird der `sendMail` Aufruf am Ende:

Code: Alles auswählen

import datetime
...
sendMail(["mailto@gmail.com"],
        "Webcambild vom {0}".format(datetime.datetime.now().strftime("%d.%m.%Y %H:%M")),
        "this is the body text of the email",
        ["photo.jpg","text_file.txt"])

Re: Blicke nicht durch: Zeitangabe im Mail Subject

Verfasst: Sonntag 1. September 2013, 07:48
von bose71
:D :D :D

Super, funktioniert genau wie gewünscht! Die Ausgabe des Datums hatte ich auch, habe sie aber nicht an die Stelle des Subjekct bekommen. Mein Ansatz war ähnlich deinem cofi, aber ohne {0}. Die {0} verstehe ich auch nicht.

Anyway, es klappt!

1000 Dank!

:mrgreen:

Re: Blicke nicht durch: Zeitangabe im Mail Subject

Verfasst: Sonntag 1. September 2013, 14:17
von cofi
Das {0} kommt von der String Formatierung: http://docs.python.org/3/library/string ... formatting

Auch moeglich waere folgendes (wird aber schnell unuebersichtlich):

Code: Alles auswählen

"Webcambild vom " + datetime.datetime.now().strftime("%d.%m.%Y %H:%M")

Re: Blicke nicht durch: Zeitangabe im Mail Subject

Verfasst: Sonntag 1. September 2013, 14:49
von BlackJack
Noch eine Alternative:

Code: Alles auswählen

In [2]: 'Webcambild vom {0:%d.%m.%Y %H:%M}'.format(datetime.datetime.now())
Out[2]: 'Webcambild vom 01.09.2013 15:48'