如何在 web2py 中附加上传的文件以发送电子邮件

How to attach an uploaded file for e-mailing in web2py

全部,

Python 和 web2py 新手在这里 - 一旦用户在网站上上传了信息,我试图通过电子邮件转发用户输入(电子邮件地址和文件)。 用户提供的信息存储在数据库中,但我无法从数据库中获取文件并通过电子邮件转发它。非常感谢任何指点!

这是我的控制器动作-

def careers():
    form = SQLFORM(db.cv_1, formstyle='bootstrap3_stacked')
    for label in form.elements('label'):
        label["_style"] = "display:none;"
    form.custom.submit.attributes['_value'] = 'Submit CV'
    if form.process().accepted:
        applicant = str(form.vars.email)
        mail.send(to=['email@company.com'], message= applicant + ' new CV', subject='CV submission', attachment=mail.Attachment('/path/to/file'))
    return dict(form=form)

这是数据库模型

db.define_table('cv_1', Field('email',
requires=IS_EMAIL(error_message='Please provide your e-mail'),
widget=widget(_placeholder='Your e-mail (required)',_readonly=False)),
Field('cv', 'upload', autodelete=True, requires=[IS_LENGTH(1048576,1024),
IS_UPLOAD_FILENAME(extension='pdf')]))

上传文件的转换文件名将在form.vars.cv中(这是存储在数据库中db.cv_1.cv字段中的值)。您可以将它与字段的 .retrieve 方法一起使用来获取完整的文件路径或文件对象本身:

original_filename, filepath = db.cv_1.cv.retrieve(form.vars.cv)
mail.send(to=['email@company.com'], message=applicant + ' new CV',
          subject='CV submission',
          attachment=mail.Attachment(filepath, original_filename))