Flask-Mail manipuliert die globalen Einstellungen, wenn E-Mails mit utf-8 ohne Erlaubnis gesendet werden. Nach dem Import funktioniert es also, wenn Sie es wiederherstellen. Schreiben Sie dies vor dem Senden irgendwo hin.
test.py
from email import charset
charset.add_charset('utf-8', charset.SHORTEST, charset.BASE64, 'utf-8')
Wenn es auf Japan beschränkt ist und Sie explizit einen Zeichensatz in shift_jis angeben, können Sie ihn problemlos senden, ohne die oben genannten Schritte auszuführen.
test.py
msg = Message(sender=(u"Absender", "[email protected]"),
subject = u"Titel",
recipients = ["[email protected]"],
reply_to = u"Antworten<[email protected]>",
charset = 'shift_jis') #← Das ist
msg.body = u"Es ist eine Prüfungsflasche_sjis"
mail.send(msg)
das ist alles. Das Folgende ist eine Aufnahme.
Flask hat eine super nützliche Erweiterung namens Flask-Mail. Mit smtplib und E-Mail ist es einfach genug, aber es ist ungewöhnlich einfach, E-Mails zu senden, die Sie häufig zum Erstellen von Webdiensten verwenden.
Ich frage mich, ob Sie das verstehen können, wenn Sie sich das ansehen.
http://pythonhosted.org/flask-mail/
Insbesondere sende ich als aktuelle Anforderung häufig mehrteilige / alternative E-Mail-Newsletter (solche, die sowohl HTML-Mail als auch Textmail unterstützen), was auch ungewöhnlich einfach zu versenden ist.
test.py
from flask import Flask
from flaskext.mail import Mail, Message
app = Flask(__name__)
mail = Mail(app)
msg = Message(subject, sender=sender, recipients=reciepients)
msg.body='Hurra'
msg.html='<h1>Hurra</h1>'
mail.send(msg)
Gefährlich.
Eigentlich funktioniert es in Python2 aufgrund von Brain Stop gut gelaunt, aber wenn es in Python3 ausgeführt wird, wird es normalerweise so. Ich verstehe nicht was es bedeutet und ich verliere meine Motivation völlig.
Flasche scheint gut zu sein, also werde ich es anfassen! -> Gefällt mir! Setzen Sie es in das eigentliche Geschäft! -> Mail senden? Flask-Mail scheint praktisch zu sein! -> Gee! !! !! !! !! Verstopft! !! !! Ich frage mich, ob es solche Leute gibt. Da ich bin. Hallo! !! !!
Klicken Sie hier für den experimentellen Code
flask_urf8.py
# -*- coding: utf-8 -*-
from flask import Flask
from flask_mail import Message, Mail
app = Flask(__name__)
with app.app_context():
mail = Mail(app)
msg = Message(sender=(u"Absender", "[email protected]"),
subject=u"Titel",
recipients=["[email protected]"],
reply_to=u"Antworten<[email protected]>")
msg.body = u"Eine Flasche_utf8"
mail.send(msg)
Ergebnis
Traceback (most recent call last):
File "flask_utf8.py", line 14, in <module>
mail.send(msg)
File "/Users/yasunori/venvs/sai/lib/python3.3/site-packages/flask_mail.py", line 416, in send
message.send(connection)
File "/Users/yasunori/venvs/sai/lib/python3.3/site-packages/flask_mail.py", line 351, in send
connection.send(self)
File "/Users/yasunori/venvs/sai/lib/python3.3/site-packages/flask_mail.py", line 168, in send
message.as_string())
File "/usr/local/Cellar/python3/3.3.3/Frameworks/Python.framework/Versions/3.3/lib/python3.3/smtplib.py", line 746, in sendmail
msg = _fix_eols(msg).encode('ascii')
UnicodeEncodeError: 'ascii' codec can't encode character '\u3042' in position 364: ordinal not in range(128)
Also las ich den Flask-Mail-Code und fragte mich, was es war.
flask_mail.py
charset.add_charset('utf-8', charset.SHORTEST, None, 'utf-8')
Es gibt diese Beschreibung. Die für Mail verwendete globale (!) Zeichencodeeinstellung wird (!) Ohne Erlaubnis überschrieben.
Wie ich bereits überprüft habe, funktioniert Python3 mit dieser Einstellung bisher nicht. http://qiita.com/yasunori/items/265d8db746742bb967c4#2-10
Nachdem ich Flask-Mail importiert hatte, habe ich es überschrieben und wiederhergestellt.
Baka! !! !!.py
from email import charset
charset.add_charset('utf-8', charset.SHORTEST, charset.BASE64, 'utf-8')
Nach dem Lesen der Flask-Mail-Ausgabe „Wenn Sie BASE64 für BODY verwenden, ist es leicht, sich im Spamfilter zu verfangen. Ich denke, es ist besser, ihn auf None zu setzen. Das macht auch Django." „Im Ernst !? Danke!" Es war in.
Übrigens wurde Django in Frage gestellt, so dass es jetzt nicht überschrieben wird, weil "ich mich gefragt habe, warum ich das Globale überschrieben habe". Es scheint, dass Flask-Mail eine momentane Lücke geschlossen hat.
Bitte lassen Sie mich wissen, ob es eine grundlegendere Lösung gibt.
Das ist es.
Recommended Posts