如何使用Flask wtf表单发送电子邮件附件?

2024-04-20 12:53:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过表单发送附件,当删除msg.attach时表单本身会加载并发送电子邮件,但一旦active退出AttributeError:“NoneType”对象没有属性“filename”

这是应用程序文件,名为routes.py

from flask import Flask, render_template, request, flash, url_for, redirect
from forms import ContactForm
from flask_mail import Message, Mail
from flask_wtf.file import FileField, FileRequired
from flask_wtf import FlaskForm



app = Flask(__name__)

# configurations
app.config['SECRET_KEY'] = 'thisismysecret'
app.config['MAIL_SERVER'] = 'smtp.office365.com'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_SSL'] = False
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = 'login@server.com'
app.config['MAIL_PASSWORD'] = 'password'

mail = Mail(app)
maisend ="sender@mail.com"
mailreceive ="receipment@server.com"



@app.route('/index')
def index():
return render_template('index.html', title='Flask Index', success=True)

@app.route('/form', methods=['GET', 'POST'])
 def contactForm():
 form = ContactForm()
  if request.method == 'GET':
    return render_template('contact.html', form=form)
  elif request.method == 'POST':
    if form.validate() == False:
        flash('All fields are required !')
        return render_template('contact.html', form=form)
    else:
        msg = Message(form.subject.data, sender= maisend, recipients= [mailreceive])
        msg.body = """
        from: %s <%s&gt
         %s
        """% (form.name.data, form.email.data, form.message.data)
    msg.attach(
    form.file.data.filename,'application/octet-stream',
    form.file.data.read())
    mail.send(msg)

    return redirect(url_for('index'))
    return '<h1>Form submitted!</h1>'

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

拆下此部件后,效果非常理想

msg.attach(
 form.file.data.filename,'application/octet-stream',
 form.file.data.read())

这是表格文件

from flask_wtf import FlaskForm
from wtforms import TextAreaField, SubmitField, TextField, FileField
from wtforms import ValidationError, validators
from flask_wtf.file import FileField, FileRequired


class ContactForm(FlaskForm):
 name = TextField("Name", [validators.DataRequired('Please enter your name !')])
 email = TextField("Email")
 subject = TextField("Subject", [validators.DataRequired('Please enter a Subject !')])
 message = TextAreaField("Message", [validators.DataRequired('Enter a message !')])
 file = FileField("Some file")
 submit = SubmitField("Submit")

不知道是什么导致了这个问题,我不希望文件保存在服务器上,可能是临时文件,但成功后删除,我不想使附件强制性


Tags: namefromimportformconfigappflaskdata
1条回答
网友
1楼 · 发布于 2024-04-20 12:53:00

因为我没有足够的声誉,所以不能发表评论,所以这是暗中刺伤。你的表格有enctype="multipart/form-data"吗?Flask WTF文档说,除非您有正确的enctype,否则文件字段data属性将是None

相关问题 更多 >