Verwenden von Flask-Mail zum Senden von E-Mails über Gmail-socket.gaierr
-
20-12-2019 - |
Frage
Ich erstelle eine einfache Kontaktseite mit Flask und Flask-Mail.Ich habe die App nach diesem Tutorial erstellt - Fügen Sie eine Kontaktseite hinzu - und jetzt, wenn ich versuche, die Nachricht zu senden, erhalte ich die Fehlermeldung gaierror: [Errno -2] Name or service not known
.Ich habe den Fehler eine Weile gegoogelt und kann online keine ähnlichen Beispiele finden.Ich kann nicht einmal herausfinden, welchen Namen oder Dienst es nicht finden kann.
Auf der Traceback-Seite kann ich eine Zeile erweitern und Python-Code ausführen.Es bietet eine dump()
Funktion, die mir alle Variablen anzeigt und auf Objekte aufgerufen werden kann, um deren Informationen anzuzeigen, wenn das hilft.
Routen.py:
from forms import ContactForm
from flask.ext.mail import Message, Mail
mail = Mail()
app = Flask(__name__)
app.secret_key = 'development key'
app.config['MAIL_SERVER'] = 'smtp.google.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USERNAME'] = 'email'
app.config['MAIL_PASSWORD'] = 'password'
mail.init_app(app)
@app.route('/contact', methods=['GET', 'POST'])
def contact():
form = ContactForm()
if request.method == 'POST':
if not form.validate():
die Form:
from flask.ext.wtf import Form, validators
from wtforms.fields import TextField, TextAreaField, SubmitField
import wtforms
class ContactForm(Form):
name = TextField("Name", [wtforms.validators.Required('Please enter your name')])
email = TextField("Email", [wtforms.validators.Required('Please enter your email'), wtforms.validators.Email()])
subject = TextField("Subject", [wtforms.validators.Required('Please enter a subject')])
message = TextAreaField("Message", [wtforms.validators.Required('Please enter a message')])
submit = SubmitField("Send")
flash('All fields are required.')
return render_template('contact.html', form=form)
else:
msg = Message(form.subject.data, sender='imauld@gmail.com', recipients=['imauld@gmail.com'])
msg.body = """From: %s <%s> %s""" % (form.name.data, form.email.data, form.message.data)
mail.send(msg)
return render_template('contact.html', success=True)
elif request.method == 'GET':
return render_template('contact.html', form=form)
der Traceback:
File "/home/ian/PycharmProjects/flaskapp/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/home/ian/PycharmProjects/flaskapp/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/home/ian/PycharmProjects/flaskapp/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/ian/PycharmProjects/flaskapp/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/home/ian/PycharmProjects/flaskapp/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/ian/PycharmProjects/flaskapp/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/ian/PycharmProjects/flaskapp/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/home/ian/PycharmProjects/flaskapp/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/ian/PycharmProjects/flaskapp/app/routes.py", line 39, in contact
mail.send(msg)
File "/home/ian/PycharmProjects/flaskapp/lib/python2.7/site-packages/flask_mail.py", line 415, in send
with self.connect() as connection:
File "/home/ian/PycharmProjects/flaskapp/lib/python2.7/site-packages/flask_mail.py", line 123, in __enter__
self.host = self.configure_host()
File "/home/ian/PycharmProjects/flaskapp/lib/python2.7/site-packages/flask_mail.py", line 135, in configure_host
host = smtplib.SMTP_SSL(self.mail.server, self.mail.port)
File "/usr/lib/python2.7/smtplib.py", line 776, in __init__
SMTP.__init__(self, host, port, local_hostname, timeout)
File "/usr/lib/python2.7/smtplib.py", line 249, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python2.7/smtplib.py", line 309, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python2.7/smtplib.py", line 781, in _get_socket
new_socket = socket.create_connection((host, port), timeout)
File "/usr/lib/python2.7/socket.py", line 553, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
gaierror: [Errno -2] Name or service not known
Lösung
Ich habe die folgenden Einstellungen, die für mich funktionieren
app.config['MAIL_SERVER']='smtp.gmail.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USERNAME'] = 'xx@gmail.com'
app.config['MAIL_PASSWORD'] = 'xx;'
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USE_SSL'] = True
Beachten Sie den Parameter MAIL_USE_TLS, den ich habe.Ich bin mir auch nicht sicher, ob es wichtig ist, aber Ihr MAIL_SERVER ist auf smtp.google.com eingestellt, während meiner auf smtp.gmail.com eingestellt ist.
BEARBEITEN:Wie bestätigt, bestand das Hauptproblem darin, dass Ihr SMTP-Host falsch eingestellt war.Es sollte immer so sein smtp.gmail.com