Python / Email - 如何使用send_email接收用户反馈?

时间:2015-10-06 17:18:26

标签: python django email

所以我在我的网络应用程序上有一个表单,我试图收集用户的反馈。表单由主题,电子邮件和内容组成,我希望将电子邮件发送到我的帐户。我有很多验证和理解的麻烦。我的代码如下,之后我将进一步解释我的问题。

Settings.py

我的应用已填写

KushtrimPacajEMAIL_HOST_USER

EMAIL_HOST_PASSWORD

Forms.py

EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587

EMAIL_HOST_USER = '#'
EMAIL_HOST_PASSWORD = '#'

EMAIL_USE_TLS = True
EMAIL_USE_SSL = False

Views.py

class Contact(forms.Form):
    subject = forms.CharField(required=True)
    content = forms.CharField(widget=forms.Textarea)
    email = forms.EmailField(required=True)

所以我对如何从用户帐户向我的电子邮件发送有点困惑,因为我必须让用户登录,所以目前我正在尝试从我的电子邮件发送电子邮件帐户到我的帐户,我只是将用户电子邮件附加到内容。然而,这也不起作用。

其中一个是向我自己发送一个愚蠢的电子邮件吗?

此外,关于代码问题,我不断收到验证错误,谷歌说我应该设置双向验证。这是我应该做的吗?

有人能给我一些关于我应该去哪里的想法吗?感谢。

1 个答案:

答案 0 :(得分:0)

首先,允许从您提供的Gmail帐户访问应用 you will get the mail when you will try this code and you have to allow access and don't allow 2-step verification 使用下面给出的代码:

<强> forms.py

from flask_wtf import Form
from wtforms import StringField, TextAreaField, SubmitField, validators

class ContactForm(Form):
name = StringField('Your Name:', [validators.DataRequired()])
email = StringField('Your e-mail address:', [validators.DataRequired(), validators.Email('your@email.com')])
message = TextAreaField('Your message:', [validators.DataRequired()])
submit = SubmitField('Send Message')

<强> contact.html

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>Contact</title>
</head>
<body>
<h1>Contact Form:</h1>

<form action="/contact" method="post">
      {{ form.hidden_tag() }}
    <p>
      {{ form.name.label }}
      {{ form.name }}
    </p>
    <p>
      {{ form.email.label }}
      {{ form.email }}
    </p>
    <p>
      {{ form.message.label }}
      {{ form.message }}
    </p>
    <p>
      {{ form.submit }}
    </p>
  </form>
  </body>
  </html>

<强> main.py

from flask import Flask, render_template, request
from flask_mail import Mail, Message
from forms import ContactForm


app = Flask(__name__)
app.secret_key = 'YourSuperSecreteKey'

# add mail server config
app.config['MAIL_SERVER'] = 'smtp.gmail.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USERNAME'] = 'YourUser@NameHere'
app.config['MAIL_PASSWORD'] = 'yourMailPassword'

mail = Mail(app)

@app.route('/contact', methods=('GET', 'POST'))
def contact():
form = ContactForm()

if request.method == 'POST':
    if form.validate() == False:
        return 'Please fill in all fields <p><a href="/contact">Try Again!!! </a></p>'
    else:
        msg = Message("Message from your visitor" + form.name.data,
                      sender='YourUser@NameHere',
                      recipients=['yourRecieve@mail.com', 'someOther@mail.com'])
        msg.body = """
        From: %s <%s>,
        %s
        """ % (form.name.data, form.email.data, form.message.data)
        mail.send(msg)
        return "Successfully  sent message!"
elif request.method == 'GET':
    return render_template('contact.html', form=form)

if __name__ == '__main__':
app.run()