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
Blicke nicht durch: Zeitangabe im Mail Subject
Poste den Code bitte in den jeweiligen Klammern.
Damit sollte es funktionieren:Der Titel wäre "Titel 01.09.2013 00:25"
PS: Es handelt sich um Python nicht php
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"] )
PS: Es handelt sich um Python nicht php
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
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:
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"])
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
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!
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Das {0} kommt von der String Formatierung: http://docs.python.org/3/library/string ... formatting
Auch moeglich waere folgendes (wird aber schnell unuebersichtlich):
Auch moeglich waere folgendes (wird aber schnell unuebersichtlich):
Code: Alles auswählen
"Webcambild vom " + datetime.datetime.now().strftime("%d.%m.%Y %H:%M")
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
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'