2015-10-06 47 views
2

所以我在我的web应用程序中有一个表单,我试图从用户那里收集反馈。该表格由主题,电子邮件和内容组成,我希望将电子邮件发送到我的帐户。我对此有很多验证和理解麻烦。我的代码在下面,我会在以后进一步解释我的问题。Python /电子邮件 - 如何通过send_email接收用户反馈?

Settings.py

EMAIL_HOST_USEREMAIL_HOST_PASSWORD充满我的应用程序。

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 

Forms.py

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

Views.py

def about(request): 
    if request.method == 'GET': 
     form = Contact() 
    else: 
     form = Contact(request.POST) 
     if form.is_valid(): 
      subject = form.cleaned_data['subject'] 
      content = form.cleaned_data['content'] 
      email = ['[email protected]'] 


      #try: 
      server = smtplib.SMTP('smtp.gmail.com:587') 
      server.starttls() 
      server.login(settings.EMAIL_HOST_USER, settings.EMAIL_HOST_PASSWORD) 
      server.sendmail(email, email, content) 
      server.quit() 
      print "Successfully sent email" 
     #except SMTPException: 
      print "Error: unable to send email" 

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

一,是发送电子邮件给自己一个愚蠢的做法吗?

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

有人可以给我一些想法,我应该去哪里?谢谢。

+1

通过gmail发送东西有点奇怪。看看这个其他SO问题:http://stackoverflow.com/questions/25944883/how-to-send-an-email-through-gmail-without-enabling-insecure-access – spectras

+0

使用从mailgun.com或类似的SMTP服务器服务。每月可免费发送10000封邮件。 – Lucas03

回答

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('[email protected]')]) 
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'] = '[email protected]' 
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='[email protected]', 
         recipients=['[email protected]', '[email protected]']) 
     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()