[Bottle] Send Mail

Django, Flask, Bottle, WSGI, CGI…
Antworten
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

Hallo Ihr,

Ich hab mal wieder eine Frage zu Bottle.

Ich verschicke über eine methode e-mails aber leider möchte er keine mails mit "ä", "ö", "ü" etc versenden...weiß einer woran das liegt?

einmal die fkt.

Code: Alles auswählen

@route("/send_mail_submit", method='POST')
@route("/send_mail_submit/", method='POST')
def send_mail_submit (db):
	if cookie():
		data = request.forms.getall('users')
		if data:
		  zahl = len(data)
		  sub = data[zahl-2].decode('utf-8')
		  msg = data[zahl-1].decode('utf-8')
		  to = ""
		  data.pop(zahl-1)
		  data.pop(zahl-2)
		  zahl=zahl-2
		  while zahl != 0:
		    to = to + data[zahl-1] + ","
		    data.pop(zahl-1)
		    zahl=zahl-1 
		  sendMail(to,sub,msg)
		return template("hauptmenu", adminpw=True)
	else:
		return template("login")


def sendMail(to,sub,msgs):
	mail_user = 'bla@bla.de'
	mail_pwd = 'bla'
	smtpserver = smtplib.SMTP("smtp.bla.de",25)
	smtpserver.ehlo()
	smtpserver.starttls()
	smtpserver.ehlo
	smtpserver.login(mail_user, mail_pwd)
	msg = Message() 
	msg.set_payload(msgs.decode('utf-8')) 
	msg["Subject"] = sub 
	msg["From"] = mail_user 
	msg["To"] = to
	smtpserver.sendmail(mail_user, to, msg.as_string())
	smtpserver.close()

danke! :)
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

habs gelöst....Lösung sieht wie folgt aus

Code: Alles auswählen

	charset = Charset('utf-8')
	charset.header_encoding = QP
	charset.body_encoding = QP
	msg.set_charset(charset)
in die Sendmail fkt und in send_mail_submit

Code: Alles auswählen

msg = data[zahl-1]
ohne .decode('utf-8')

:mrgreen:
Sirius3
User
Beiträge: 18375
Registriert: Sonntag 21. Oktober 2012, 17:20

@DanJJo: Du solltest Dich am besten mal mit den Grundlagen von Listen in Python vertraut machen. Die ganze »zahl«-Geschichte sieht zum davonlaufen aus. »pop« liefert auch das Elemente, das gepoppt wurde zurück. Ohne Argument wird das letzte Element genommen:

Code: Alles auswählen

data = request.forms.getall('users')
if data:
    msg = data.pop()
    sub = data.pop()
    to = ','.join(data)
    sendMail(to,sub,msg)
Benutzeravatar
__blackjack__
User
Beiträge: 14336
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Oder man löst das über eine Zuweisung und „sequence unpacking“: ``*to, sub, msg = data``. Die Namen sind aber fast alle ziemlich ungünstig gewählt, weil kryptische Abkürzungen.

SMTP-Objekte sind Kontextmanager, sollten also mit der ``with``-Anweisung verwendet werden.

Ungetestet:

Code: Alles auswählen

@route("/send_mail_submit", method="POST")
@route("/send_mail_submit/", method="POST")
def send_mail_submit(db):
    if cookie():
        data = request.forms.decode().getall("users")
        if data:
            *recipients, subject, message = data
            send_mail(",".join(recipients), subject, message)
        return template("hauptmenu", adminpw=True)
    else:
        return template("login")


def send_mail(recipients, subject, body_text):
    sender = "bla@bla.de"
    password = "bla"
    message = Message()
    charset = Charset("utf-8")
    charset.header_encoding = QP
    message.set_charset(charset)
    message.set_payload(body_text)
    message["Subject"] = subject
    message["From"] = sender
    message["To"] = recipients
    with smtplib.SMTP("smtp.bla.de", 25) as server:
        server.ehlo()
        server.starttls()
        server.login(sender, password)
        server.sendmail(sender, recipients, str(message))
Falls man das mit den zwei Routen, einmal mit und einmal ohne / am Ende, öfter im Code hat, lohnt vielleicht ein Blick in die Bottle-FAQ: Ignore trailing slashes.
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Antworten