2017-06-23 10 views
1

I web2pyでFAQを保存するアプリケーションを作成しました。これらのFAQをEMAIL経由で送信する可能性があります。私が作成したFAQにアップロードする添付ファイル。私はこのエラーを得た電子メールを送信する際web2py添付ファイルのようなアップロードファイル

@auth.requires_login() 
def prova_invio(): 
    mail = Mail() 
    mail = auth.settings.mailer 
    mail.settings.server = 'logging' if request.is_local else myconf.get('smtp.server') 
    mail.settings.sender = myconf.get('smtp.sender') 
    mail.settings.login = myconf.get('smtp.login') 
    mail.settings.tls = myconf.get('smtp.tls') or False 
    mail.settings.ssl = myconf.get('smtp.ssl') or False 
    faq= db.faq(request.vars.id) 
    testo= "<html>"+(faq.testo_faq)+"</html>" + "<html>"+(faq.firma)+"</html>" 

    if mail.send(to=request.vars.email, 
       subject= faq.oggetto, 
       message= testo, 
       attachments = mail.Attachment("/home/www-data/web2py/applications/DBurbi/allegati/"+faq.allegato)): 
       status = 'RIUSCITO' 

    else: 
       status = 'FALLITO' 
    return dict(status=status,indirizzo=request.vars.email,oggetto=faq.oggetto) 

:私のコントローラで

db.define_table('faq', 
    Field('tipo',db.tipo_faq), 
    Field('sotto_categoria',db.sotto_categoria_faq), 
    Field('oggetto', requires = (IS_UPPER(), IS_NOT_EMPTY())), 
    Field('testo_faq',type='text',requires = (IS_UPPER(), IS_NOT_EMPTY())), 
    Field('note',type='text',requires = IS_UPPER()), 
    Field('faq_ok', type= 'boolean', default = False), 
    Field('faq_verifica', type= 'boolean', default = False), 
    Field('data_caricamento',type='datetime', writable = False, readable = False, default=request.now, requires=IS_DATETIME(timezone=pytz.timezone("Europe/Gibraltar"))), 
    Field('allegato',type='upload', uploadfield = 'nome_file', uploadfolder= allegati), 
    Field('nome_file','blob'), 
    Field('firma',type='text',readable = False, writable = False, 
     default = '<p align="right" style = "font-size:12px">Sistema automatizzato F.A.Q si prega di non rispondere al presente messaggio.<br />Grazie.<br /> </p> <p align="right" style = "font-size:12px"> Per richiedere assistenza <a href="https://gestionale.porsennasrl.it:81/ASSISTENZA-PA ">CLICCARE QUI</a> </p><p align="right" style = "font-size:12px">HELP DESK PORSENNA SRL</p>'), 
    format='%(oggetto)s') 

と、この:

I'vは、私のDBでこれを得た

[Errno 2] No such file or directory: '/home/www-data/web2py/applications/DBurbi/static/faq.allegato.abb2396f642c3279.706172746e65722e6a7067.jpg'

私はファイルの名前がそれではないことを誓った。だから私はそれを送ることができるように添付ファイルの本当の名前をどのように保存できるのだろうか? どうすれば「添付ファイルがある」場合にのみ添付ファイルを送信し、添付ファイルがない場合でも電子メールを送信できますか?

はみんな

答えて

0

まずありがとう、あなたはuploadfielduploadfolderの両方を指定しません - 最初は、データベース内のBLOBフィールド内のファイルを格納するためのものであり、第二は、格納するファイルシステムのフォルダを指定するためのものですファイル。どちらかを選択する(uploadfieldを指定したので、ファイルがファイルシステムではなくデータベースに格納されるように優先されます)。

mail.Attachementにファイルパスを渡すのではなく、最初の引数として開いているファイルオブジェクトを "filename"引数とともに渡すことができます。ファイルオブジェクトとファイル名を取得するには、次の操作を行うことができます

if faq.allegato: 
    filename, stream = db.faq.allegato.retrieve(faq.allegato) 
    attachment = mail.Attachment(stream, filename=filename) 
else: 
    attachment = None 

は、その後の操作を行います。

mail.send(..., attachments=attachment) 

注意を、上記のファイルは、データベースやファイルシステムに保存されているかどうか動作します。

関連する問題