Blicke nicht durch: Zeitangabe im Mail Subject

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
bose71
User
Beiträge: 2
Registriert: Samstag 31. August 2013, 22:18

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
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

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 ;)
Benutzeravatar
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:

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"])
bose71
User
Beiträge: 2
Registriert: Samstag 31. August 2013, 22:18

: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:
Benutzeravatar
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):

Code: Alles auswählen

"Webcambild vom " + datetime.datetime.now().strftime("%d.%m.%Y %H:%M")
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'
Antworten