[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: 18215
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: 13919
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.
“I am Dyslexic of Borg, Your Ass will be Laminated” — unknown
Antworten