2017-08-07 6 views
1

Je suis censé expliquer pourquoi ma question n'est pas une copie de: TypeError: peut seulement concaténer la liste (pas "str") à listflask erreur de courrier: en-têtes = [self.sender, self.reply_to] + self.recipients

... donc ce n'est pas un doublon car ce post traite de l'opérateur de concaténation, +, apparaissant dans le code; alors que mon problème a cet opérateur dans le message d'erreur mais pas dans le code.

Voici le code Flask pertinent, je regardais à travers le retraçage (ci-dessous) ... et il semble que le

mail.sent(msg) 

ligne est l'endroit où l'infraction se produit. J'ai essayé vraiment de résoudre ce problème, apparemment quelque chose ne va pas avec le contenu de msg ... mais je ne peux pas comprendre quoi. Toute aide serait très appréciée!

  token = s.dumps(form.email.data, salt='email-confirm') 
      subject = 'subject goes here' 
      msg = Message(subject=subject, sender='[email protected]', 
          recipients=form.email.data) 
      link = url_for('confirm_email', token=token, _external=True) 
      pull_row = User.query.filter_by(email=form.email.data).first() 
      firstname = pull_row.firstname 
      msg.html = render_template("email_confirmationemail.html", link=link, name=firstname) 
      mail.send(msg) 
      return redirect(url_for('checkyouremail')) 

Voici le retraçage

2017-08-07T06:00:05.982678+00:00 app[web.1]: Traceback (most recent call last): 
2017-08-07T06:00:05.982679+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 130, in handle 
2017-08-07T06:00:05.982680+00:00 app[web.1]:  self.handle_request(listener, req, client, addr) 
2017-08-07T06:00:05.982681+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 171, in handle_request 
2017-08-07T06:00:05.982681+00:00 app[web.1]:  respiter = self.wsgi(environ, resp.start_response) 
2017-08-07T06:00:05.982682+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1836, in __call__ 
2017-08-07T06:00:05.982682+00:00 app[web.1]:  return self.wsgi_app(environ, start_response) 
2017-08-07T06:00:05.982683+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1820, in wsgi_app 
2017-08-07T06:00:05.982684+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1403, in handle_exception 
2017-08-07T06:00:05.982684+00:00 app[web.1]:  response = self.make_response(self.handle_exception(e)) 
2017-08-07T06:00:05.982685+00:00 app[web.1]:  reraise(exc_type, exc_value, tb) 
2017-08-07T06:00:05.982686+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise 
2017-08-07T06:00:05.982686+00:00 app[web.1]:  raise value 
2017-08-07T06:00:05.982687+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1817, in wsgi_app 
2017-08-07T06:00:05.982688+00:00 app[web.1]:  response = self.full_dispatch_request() 
2017-08-07T06:00:05.982689+00:00 app[web.1]:  rv = self.handle_user_exception(e) 
2017-08-07T06:00:05.982688+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1477, in full_dispatch_request 
2017-08-07T06:00:05.982690+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1381, in handle_user_exception 
2017-08-07T06:00:05.982691+00:00 app[web.1]:  reraise(exc_type, exc_value, tb) 
2017-08-07T06:00:05.982691+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise 
2017-08-07T06:00:05.982692+00:00 app[web.1]:  raise value 
2017-08-07T06:00:05.982692+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1475, in full_dispatch_request 
2017-08-07T06:00:05.982693+00:00 app[web.1]:  rv = self.dispatch_request() 
2017-08-07T06:00:05.982694+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1461, in dispatch_request 
2017-08-07T06:00:05.982695+00:00 app[web.1]: File "/app/app.py", line 213, in login 
2017-08-07T06:00:05.982695+00:00 app[web.1]:  return self.view_functions[rule.endpoint](**req.view_args) 
2017-08-07T06:00:05.982696+00:00 app[web.1]:  mail.send(msg) 
2017-08-07T06:00:05.982697+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask_mail.py", line 492, in send 
2017-08-07T06:00:05.982697+00:00 app[web.1]:  message.send(connection) 
2017-08-07T06:00:05.982698+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask_mail.py", line 427, in send 
2017-08-07T06:00:05.982698+00:00 app[web.1]:  connection.send(self) 
2017-08-07T06:00:05.982699+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask_mail.py", line 181, in send 
2017-08-07T06:00:05.982700+00:00 app[web.1]:  if message.has_bad_headers(): 
2017-08-07T06:00:05.982700+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask_mail.py", line 400, in has_bad_headers 
2017-08-07T06:00:05.982701+00:00 app[web.1]:  headers = [self.sender, self.reply_to] + self.recipients 
2017-08-07T06:00:05.982704+00:00 app[web.1]: TypeError: can only concatenate list (not "str") to list 
+0

Possible duplicate de [TypeError: ne peut que concaténer la liste (pas "str") à la liste] (https://stackoverflow.com/questions/19398993/typeerror-can-only-concatenate-list-not-str-to -list) – Nabin

Répondre

3

est donc ici ce qui a résolu le problème que j'avais. (Ceci concerne le paramètre destinataires dans Message). Je n'ai qu'un seul destinataire. Mais je suppose que beaucoup de destinataires sont attendus. Dans tous les cas, changer mon destinataire d'une chaîne à une liste a fait l'affaire. Par exemple allant de

recipients=email 

à

recipients=email.split() 

résout le problème. Je suis nouveau à flask-mail et je n'ai pas hésité à utiliser une chaîne pour les destinataires.

+0

vous avez tout à fait raison. Les destinataires doivent toujours être une liste. – Chockomonkey

+0

J'ai utilisé 'destinataires = [form.email.data]' pour l'e-mail qui était entré dans le formulaire. – ryentzer