2015-06-09 10 views
7

Sto cercando di implementare una funzionalità in python in cui voglio inviare un file come allegato a un avviso e-mail Tutto funziona correttamente. sto ricevendo l'avviso e-mail con l'oggetto richiesto, ma l'unico problema è che ricevo lo stesso allegato due volte nel mio avviso e-mail.Allegati che si collegano due volte utilizzando smptplib in python

fileMsg = email.mime.base.MIMEBase('application','octet-stream') 
    fileMsg.set_payload(file('/home/bsingh/python_files/file_dict.txt').read()) 
    #email.encoders.encode_base64(fileMsg) 
    fileMsg.add_header('Content-Disposition','attachment;filename=LogFile.txt') 
    emailMsg.attach(fileMsg) 

    # send email 
    server = smtplib.SMTP(smtp_server) 
    server.starttls() 
    server.login(username, password) 
    server.sendmail(from_add, to_addr,emailMsg.as_string()) 
    server.quit() 
+0

Questo codice non funziona. Come si presenta 'emailMsg'? – knitti

+0

emailMsg = email.MIMEMultipart.MIMEMultipart ('alternativa') –

+0

tutto funziona ... è solo una parte del codice che ho mostrato qui ... solo il problema è che sto ricevendo l'allegato due volte e voglio solo una volta –

risposta

0

C'è stato un problema con la versione..È stato risolto

3

Lo scopo di yagmail (io sono lo sviluppatore) è quello di rendere davvero facile per inviare messaggi di posta elettronica, in particolare con HTML o allegati esigenze.

Si prega di provare il seguente codice:

import yagmail 
yag = yagmail.SMTP(from_add, password) 
contents = ['See my attachment below', '/home/bsingh/python_files/file_dict.txt'] 
yag.send(contents = contents) 

Avviso la magia qui: contents è un elenco, in cui verrà caricato automaticamente un elemento pari a un percorso di file, mimetype indovinato, e attaccato.

C'è molto di più magico coinvolti, come ad esempio facile da incorporare immagini, script senza password, script usernameless, alias semplici, intelligenti default (notare ho omesso le to e subject argomenti?) E molto altro. Consiglio/incoraggia a leggere la sua pagina github :-). Sentiti libero di sollevare problemi o aggiungere richieste di funzionalità!

È possibile ottenere yagmail utilizzando pip per installarlo:

pip install yagmail # Python 2 
pip3 install yagmail # Python 3 
+0

la mia posta sta già attraversando questo insieme con l'allegato ... solo il problema è che l'attaccamento sta andando due volte ni vuole risolverlo .. –

+0

@ShrutiSrivastava L'uso di questo pacchetto ti farà risparmiare righe di codici (letteralmente queste 4 linee sono tutto ciò che serve), rendi la tua vita molto confortevole e, soprattutto, allega solo una volta. – PascalVKooten

+0

E riguardo l'oggetto dell'email ... posso modificare anche questo? –

5

Ho avuto problemi con questo me stesso. Ho avuto 'alternative' come tipo MIMEMultipart del mio messaggio. Quando ho cambiato il valore predefinito, 'mixed', il duplicato è scomparso.

Quindi se hai creato emailMsg utilizzando MIMEMultipart('alternative'), potresti avere lo stesso problema.

Credo che 'alternative' offra sia una versione di testo sia una versione html del corpo del messaggio, quindi penso che sia necessario offrire sia in aggiunta al proprio allegato se lo si utilizza.

Spero che questo aiuti.

Non ho ancora trovato una buona spiegazione di questo; l'email può diventare piuttosto complicata.

+0

misto ha funzionato per me quando ho allegato un PDF ... con l'alternativa stavo ottenendo il file allegato due volte. Sono contento di aver inciampato su questo perché stavo inseguendo la mia coda. – JeffSpicoli

+1

L'impostazione del tipo MIMEMultipart in "misto" interrompe le e-mail che hanno versioni di testo e HTML del corpo, cioè il corpo viene ripetuto due volte. –