如何通过电子邮件发送附件

时间:2019-03-31 13:27:40

标签: file-upload request flask-sqlalchemy email-attachments

我正在创建一个应用程序,用户可以在其中填写表格并上传文件。我将请求表单数据保存到数据库,也没有上传文件。

但是我在将数据用于同一功能(request.form和上载的文件)并发送电子邮件时遇到了问题。

我尝试重新使用请求表单数据发送电子邮件,并使用会话对象存储文件并附加它。 仅当我仅使用请求表单数据(例如,我的“与我们联系”)功能时,这才起作用。

这是我的代码:

def trial():
if request.method == 'POST':
    # Package and store new trial information
    new_trial = Organization(companytype=request.form['companytype'],
                             companyname=request.form['companyname'],
                             firstname=request.form['firstname'],
                             lastname=request.form['lastname'],
                             email=request.form['email'],
                             username=request.form['email'],
                             password=request.form['password'],
                             referrer=request.form['referrer'])

    # Package to save file
    file = request.files['file']
    if file and allowed_file(file.filename):
        filename = file.filename
    file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
    # Save file to Session
    s.f = filename
    # Send Form information in Email
    msg = Message(
        body="Company Name: {}\nReferrer: {}\nTrial Email: {}".format(
            request.form['companyname'], request.form['referrer'], request.form['email']
        ),
        subject="Contact regarding: {}".format(request.form['subject']),
        recipients=[app.config['MAIL_USERNAME'], request.form['email']],
        attachments=[s.f]
    )
    session.add(new_trial)
    session.commit()
    mail.send(msg)
    return redirect(url_for('trial_success'))
else:
    return render_template('signup.html')

这应该重定向到trial_success页面,但是,我得到了:

错误请求

浏览器(或代理)发送了该服务器无法理解的请求。

谢谢!

0 个答案:

没有答案