我试图通过表单发送附件,当删除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>
%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")
不知道是什么导致了这个问题,我不希望文件保存在服务器上,可能是临时文件,但成功后删除,我不想使附件强制性
因为我没有足够的声誉,所以不能发表评论,所以这是暗中刺伤。你的表格有
enctype="multipart/form-data"
吗?Flask WTF文档说,除非您有正确的enctype,否则文件字段data
属性将是None
相关问题 更多 >
编程相关推荐