2016-10-29 8 views
2

Загрузить файл через колбу-ВТФ, а затем отправить его по почте, используя Flask почтеФлакон WTF для прикрепления флеш-почты?

def careers(): 
    form = CareersForm() 

    if form.validate_on_submit(): 
     msg = Message('my subject for message', sender = MAIL_USERNAME, recipients = [company_email]) 
     msg.html = "My message" 
     with app.open_resource(form.resume) as fp: 
      msg.attach("resume.pdf", "application/pdf", fp.read()) 
     mail.send(msg) 

    return render_template('default/careers.html',form=form) 

Ошибки я получаю AttributeError: 'FileField' object has no attribute 'startswith' идеального результат был бы для того, чтобы прикрепить и отправить по электронной почте.

ответ

2

Эта программа загрузит файл и добавит его в сообщение электронной почты. Настройки почтового сервера хранятся в settings.py.

#!/usr/bin/env python 

from flask import Flask, render_template_string 
from flask_wtf import FlaskForm 
from wtforms import StringField, validators 
from flask_wtf.file import FileField 
from flask_mail import Mail, Message 

app = Flask(__name__) 
app.config.from_object('settings') 
mail = Mail(app) 


class FileForm(FlaskForm): 
    file_ = FileField('Some file') 
    addr = StringField('Address', [validators.InputRequired()]) 


@app.route('/', methods=['GET', 'POST']) 
def root(): 
    form = FileForm() 
    if form.validate_on_submit(): 
     msg = Message(
      'Sending file', 
      sender=form.addr.data.strip(), 
      recipients=[form.addr.data.strip()]) 
     msg.body = 'Sending file %s' % (form.file_.name) 
     msg.attach(
      form.file_.data.filename, 
      'application/octect-stream', 
      form.file_.data.read()) 
     mail.send(msg) 
     return "Sent" 

    return render_template_string(''' 
     <html><body><form method="post" enctype="multipart/form-data"> 
      {{ form.hidden_tag() }} 
      {{ form.addr.label }}: {{ form.addr() }}<br/> 
      {{ form.file_.label }}: {{ form.file_() }}<br/> 
      <input type="submit" value="Click Me!"/> 
     </form></body></html>''', form=FileForm()) 

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

Я ценю, что вы готовы написать эти демки, но это действительно не помогает. В чем была проблема? Что здесь фиксировало это? Просьба указать, что в дополнение к полной демонстрации. – davidism

+0

Я не мог диагностировать проблему из ограниченной информации в сообщении. Кроме того, я предположил, что вопрос OP не был «Что я делаю неправильно?» а скорее «Как отправить электронную почту из фляги?», на что я ответил. –

+3

OK, то как * сделать * они отправляют электронную почту? Опишите решение, а не просто код сбрасывания. – davidism