script python per inviare email

Forum dedicato ai gruppi di studio di debianizzati.org
Rispondi
Avatar utente
brunology
Full Member
Full Member
Messaggi: 173
Iscritto il: 28/10/2007, 12:20
Contatta:

script python per inviare email

Messaggio da brunology »

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
Risca
wiki member
wiki member
Messaggi: 2011
Iscritto il: 09/02/2009, 11:37
Località: Torino-Milano
Contatta:

Re: script python per inviare email

Messaggio da Risca »

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
brunology
Full Member
Full Member
Messaggi: 173
Iscritto il: 28/10/2007, 12:20
Contatta:

Re: script python per inviare email

Messaggio da brunology »

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
Risca
wiki member
wiki member
Messaggi: 2011
Iscritto il: 09/02/2009, 11:37
Località: Torino-Milano
Contatta:

Re: script python per inviare email

Messaggio da Risca »

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
brunology
Full Member
Full Member
Messaggi: 173
Iscritto il: 28/10/2007, 12:20
Contatta:

Re: script python per inviare email

Messaggio da brunology »

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.
Rispondi