2016-10-29 5 views
2

eine Datei über Kolben-wtf hochladen und dann Mail-Kolben-Mail mitFlasche WTF zu Kolben-Mail-Anlage?

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) 

Der Fehler, den ich bekommen ist AttributeError: 'FileField' object has no attribute 'startswith' ideale Ergebnis wäre für sie E-Mail anhängen und zu versenden.

Antwort

2

Dieses Programm lädt eine Datei hoch und hängt sie an eine E-Mail-Nachricht an. Die Einstellungen des E-Mail-Servers sind in settings.py gespeichert.

#!/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

Ich weiß, dass Sie bereit sind, diese Art von Demos zu schreiben, aber das scheint wirklich nicht hilfreich zu sein. Was war das Problem? Was hier drin behoben? Bitte adressiere das zusätzlich zu den vollständigen Demos. – davidism

+0

Ich konnte das Problem nicht anhand der begrenzten Informationen in der Post diagnostizieren. Abgesehen davon habe ich gefolgert, dass die Frage des OP nicht "Was mache ich falsch?" sondern "Wie sende ich E-Mails aus der Flasche?", was ich geantwortet habe. –

+3

OK, dann wie * tun * sie E-Mails senden? Beschreibe die Lösung, decke nicht einfach Code ab. – davidism