script python per inviare email

Forum dedicato ai gruppi di studio di debianizzati.org

script python per inviare email

Messaggioda brunology » 11/01/2012, 17:49

Ciao a tutti,

sto facendo un semplice esperimento con python: inviare un'email (salvata in un file di testo) sfruttando il modulo smtplib.

Prendendo spunto dagli esempi della documentazione ho scritto questo semplicissimo script:
Codice: Seleziona tutto
#!/usr/bin/env python3
import sys, smtplib

fromaddr = 'me@sito.it'
toaddrs = 'tizio@esempio.it', 'caio@pippo.org'

msg = open('email.txt', 'r')

server = smtplib.SMTP_SSL('smtp.sito.it')
server.login('me@sito.it', 'password')
#server.sendmail(fromaddr, toaddrs, msg)
server.send_message(msg, fromaddr, toaddrs)
server.quit()


Se uso sendmail ottengo questo errore:
Codice: Seleziona tutto
Traceback (most recent call last):
  File "./mail.py", line 11, in <module>
    server.sendmail(fromaddr, toaddrs, msg)
  File "/usr/lib/python3.2/smtplib.py", line 740, in sendmail
    esmtp_opts.append("size=%d" % len(msg))
TypeError: object of type '_io.TextIOWrapper' has no len()


Se uso send_message ottengo questo errore:
Codice: Seleziona tutto
Traceback (most recent call last):
  File "./mail.py", line 12, in <module>
    server.send_message(msg, fromaddr, toaddrs)
  File "/usr/lib/python3.2/smtplib.py", line 789, in send_message
    resent =msg.get_all('Resent-Date')
AttributeError: '_io.TextIOWrapper' object has no attribute 'get_all'


Mi date qualche dritta?
Grazie!
Avatar utente
brunology
Full Member
Full Member
 
Messaggi: 173
Iscritto il: 28/10/2007, 12:20

Re: script python per inviare email

Messaggioda Risca » 12/01/2012, 14:06

Io userei il comando server.sendmail. Il primo errore che vedo è che in
Codice: Seleziona tutto
server.sendmail(fromaddr, toaddrs, msg)
non stai inviando il messaggio ma un file aperto in lettura!

Prova magari ad usare:
Codice: Seleziona tutto
server.sendmail(fromaddr, toaddrs, "Ciao belli!")


se così funziona poi potresti lavorare sul problema del trasferimento del file e-mail dal testo alla variabile.
Avatar utente
Risca
e-zine member
e-zine member
 
Messaggi: 2011
Iscritto il: 09/02/2009, 11:37
Località: Torino-Milano

Re: script python per inviare email

Messaggioda brunology » 12/01/2012, 16:26

giusto
c'era anche il problema della codifica ascii (se il messaggio contiene caratteri non ascii dà errore)

ho fatto queste modifiche e funziona:

Codice: Seleziona tutto
file = open('email.txt', 'r')
f = file.read()
msg = f.encode('utf-8', 'strict')


Forse c'era un modo più veloce...

Le prossime cose che vorrei capire sono:
- come impostare gli header del messaggio
- come caricare i destinatari da un file .csv

Vi faccio sapere cosa riesco a combinare.
Avatar utente
brunology
Full Member
Full Member
 
Messaggi: 173
Iscritto il: 28/10/2007, 12:20

Re: script python per inviare email

Messaggioda Risca » 12/01/2012, 16:53

brunology ha scritto:- come impostare gli header del messaggio

Per questo avvia il prompt e - dopo aver importato il modulo - digita help(smtplib) ;) Lì dovresti trovare tutti i richiami.
Per chiarezza ricordati che stai usando una libreria per interfacciarti al protocollo SMTP. Ti consiglio pertanto di ripassarti un po' il protocollo (http://en.wikipedia.org/wiki/SMTP ) e di fare una prova con telnet. Ti potrà prevenire molti dei possibili dubbi.

brunology ha scritto:- come caricare i destinatari da un file .csv

Trattandosi di semplice testo non dovrebbe essere un problema. In alternativa, se può semplificarti la vita, potresti utilizzare il modulo csv. A volte non conviene reinventare la ruota...

Per curiosità, cos'è che stai cercando di fare?

I sorgenti sono liberi e sarebbe possibile contribuire?
Avatar utente
Risca
e-zine member
e-zine member
 
Messaggi: 2011
Iscritto il: 09/02/2009, 11:37
Località: Torino-Milano

Re: script python per inviare email

Messaggioda brunology » 12/01/2012, 17:48

Guardando l'help ho scoperto che il modo più semplice è mettere gli header all'inizio del file:

Codice: Seleziona tutto
From: email@esempio.it
Subject: prova

testo.....


Risca ha scritto:Per curiosità, cos'è che stai cercando di fare?


Voglio inviare un email a un centinaio di contatti
e invece di usare un'estensione di Thunderbird
ne approfitto per imparare qualcosa di Python.

I sorgenti sono liberi e sarebbe possibile contribuire?


Eh eh, sono ancora ben lontano dal fare qualcosa di minimamente serio.
Il mio obiettivo nei prossimi mesi è seguire qualche compito alla mia portata (spero)
presente nel tracker di LilyPond (progetto dove già collaboro come traduttore).
Ad esempio:
http://code.google.com/p/lilypond/issue ... bel%3AFrog

Per ora ho seguito (e quasi concluso) la prima parte dell'issue 1004.
La seconda richiede la conoscenza di Python: temo che sarà dura... ma vi farò sapere, conto sul vostro aiuto ;-)

Il 940 è interessante perché si parte da zero (più facile).
Ho già trovato qualche modulo utile ma non ho ancora fatto nessun tentativo ancora.
Avatar utente
brunology
Full Member
Full Member
 
Messaggi: 173
Iscritto il: 28/10/2007, 12:20


Torna a Accademia debianizzata

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite