Autore Topic: inviare e-mail  (Letto 4946 volte)

Offline Fabrizio

  • Gambero
  • **
  • Post: 61
    • Mostra profilo
inviare e-mail
« il: 05 Gennaio 2009, 14:02:48 »
Ciao, bun giorno.
Ho la necessità di inviare delle mail con allegato da un programma gambas.
Ho provato tramite SmtpClient ma non ho trovato documentazione per impostare nome utente e password per collegarmi all'host della posta (smtp.gmail.com).
In oltre preferirei poter mandare il messaggio tramite il client di posta predefinito (thunderbird).

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: inviare e-mail
« Risposta #1 il: 05 Gennaio 2009, 23:20:49 »
Quello in cui ti stai infilando è un grosso vicolo cieco...
Tempo fa ebbi la malaugurata idea di fare altrettanto e mi sono ritrovato con un componente che non funziona correttamente nel senso che finché spedisci un semplice messaggio tutto va lisco ma se alleghi un file succedono dei problemi perché il componente non segue gli standard MIME ed il messaggio che arriva è corrotto, anzi per l'esattezza il lettore di posta non riesce poi a separare il testo dall'allegato.
All'epoca segnalai il problema a Benoit, ma non lo risolse sul momento. Poi non seppi più nulla ed alla fine risolsi da solo utilizzando, richiamandolo da gambas, "mutt" per creare i messaggi, ed appoggiandomi a "procmail" come server di posta in uscita installato sul computer.

Non so se al momento la situazione è cambiata.


Per quanto concerne thunderbird o, cmq, il client di posta predefinito, credo che il verso per manovrarlo da terminale ci sia senz'altro, ma immagino tu debba rivolgerti alla documentazione di thunderbird.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Fabrizio

  • Gambero
  • **
  • Post: 61
    • Mostra profilo
Re: inviare e-mail
« Risposta #2 il: 06 Gennaio 2009, 01:04:45 »
Ti ringrazio dell'attenzione.
Nel frattempo ho trovato il modo di mandare via mail con allegato tramite uno script
in python richiamato poi da gambas. Non utilizza il client di posta come avrei preferito,
 ma per ora mi accontento, non sono un programmatore, per cui quello che son riuscito
a fare è già tanto per le mie capacità.
Cito il link dal quale ho copiato il codice python. http://code.activestate.com/recipes/52243/

Grazie ancora.

Saluti.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: inviare e-mail
« Risposta #3 il: 06 Gennaio 2009, 12:52:47 »
Rispetto all'uso di programmi esterni, puoi usare "xmail", o il "mail" standard, con alcuni accorgimenti per inviare allegati.
Dato che poi in Gambas non esiste una funzione di "encode64", dovresti usare quella del sistema, sempre se l'hai installata...

Da qualche parte ho una mia shell che faceva 'sta cosa usando mail e uuencode, se la trovo la posto qui...

Comunque, tanto per dire, la gestione manuale di una mail è piuttosto ostica e delicata; a suo tempo, per la costruzione dello script, mi sono dovuto studiare tutta la doc sui protocolli, e devo dire che ne sono uscito abbastanza malridotto... :-)
Il problema maggiore è la gestione dei mimetype.

Offline Fabrizio

  • Gambero
  • **
  • Post: 61
    • Mostra profilo
Re: inviare e-mail
« Risposta #4 il: 06 Gennaio 2009, 14:03:17 »
Spiego meglio quello che devo fare così magari viene fuori qualcosa di utile anche se poi magari va a finire OT.
Io sono meccanico di carrelli elevatori e circa 10 anni fa ho fatto un programma con msaccess e vba per la gestione dei clienti, le loro macchine ed i relativi interventi eseguiti su di esse. Ora siccome winzoz mi ha un po rotto, sono passato da un paio di mesi a ubuntu (solo a casa per il momento). Tramite questa applicazione, che sto rifacendo con gambas, ho necessità di inviare via mail l'elenco degli interventi fatti in una tabella di excell.
In pratica la tabella che invio è un file di testo nel quale i dati sono separati da ';' e il nome del file ha estensione .cvs per cui poi excell non ha problemi ad aprirlo.
Per il momento le prove che ho fatto con lo script python sono state positive.
Ora vedrò come eventualmente fare per la tabella, cioè se riesco a mandarla come .xls

Saluti.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: inviare e-mail
« Risposta #5 il: 08 Gennaio 2009, 14:53:00 »
Bè, in effetti stai utilizzando un classico file CSV (separato da carattere ;).
Il problema non penso sia la creazione e la gestione di file di questo tipo, ma solo come procedere per l'invio via email.
Se il tuo programma in python funziona come tu desideri, puoi richiamarla dal tuo programma gambas, eseguendo una semplice SHELL , passando tutti parametri necessari.
Se vuoi utilizzare le librerie Gambas per farlo, bè, questo è un'altro paio di maniche, e al momento non sò darti risposte certe, dato che non ho ancora affrontato il problema mail-gambas.

Offline Fabrizio

  • Gambero
  • **
  • Post: 61
    • Mostra profilo
Re: inviare e-mail
« Risposta #6 il: 08 Gennaio 2009, 19:24:56 »
no no, non è un problema infatti gestirlo come CSV, il fatto è che vorrei farlo proprio come XLS, il che penso non sia impossibile, ma di certo non facile.

Per l'invio della posta come CSV ho risolto appunto lanciando lo script python da gambas, dovrei provare al limite a inviare un XLS al posto del CSV che uso ora (giusto per prova) e vedere che succede, ma non credo ci siano problemi.

tks

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: inviare e-mail
« Risposta #7 il: 09 Gennaio 2009, 06:47:41 »
Io ti consiglio di seguire la strada che ti ho consigliato, lasciando i "dettagli" ai programmi di posta che ho menzionato. Li installi tramite il gestore di pacchetti Synaptic..
Poi metti i dati del server di posta nel file di configurazione di procmail e quindi imposti mutt per usare procmail per l'invio della posta.

A questo punto l'invio di un messaggio di testo con allegato è semplice. Qui di sotto ti metto il codice del mio programma gestionale che spedisce le fatture (in formato PDF e zippate) tramite mutt:
Codice: [Seleziona]

Comodo = "mutt -s 'Invio fattura mensile' -a " & Application.Path & "/fatture_da_spedire/fattura_mensile.zip "
Comodo &= Risultato2["email"] & " < " & Application.Path & "/messaggio.txt"
SHELL (Comodo) TO Risposta
IF Risposta <> "" THEN
  Message.Error("Si è verificato un errore durante l'invio della fattura n° " & Fattura & " del cliente " & CodCliente & ".\nRiprovare in un secondo momento.")
ENDIF


Come vedi, facendo fare le cose complicate ai programmi appositamente predisposti, la gestione dell'e-mail si risolve nella semplice chiamata ad un comando da terminale, mutt, che mi costruisce il messaggio usando il soggetto specificato dopo "-s", allegando il file specificato dopo "-a" ed inserendo il corpo del messaggio specificato dal file dopo "<".

Al momento non ho tutti i dettagli con me. Se la cosa ti interessa, oggi da casa ti spedisco anche i file che devi configurare.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Fabrizio

  • Gambero
  • **
  • Post: 61
    • Mostra profilo
Re: inviare e-mail
« Risposta #8 il: 09 Gennaio 2009, 09:55:22 »
I consigli sono sempre ben accetti.
Se posti i file di configurazione per mail (o xmail) e mutt mi saranno sicuramente utili e per questo ti ringrazio.
Questo tread diventerà un riferimento sempre più completo per tutti coloro che avranno necessità di inviare mail da programmi sviluppati con gambas (e non).

Come già scritto precedentemente, attualmente uso uno script
http://code.activestate.com/recipes/52243/  leggermente modificato per le mie esigenze. Con GMAIL funziona, con altri non ho provato. Riporto le parti modificate:

#!/usr/bin/python
import ....
from user import home
home = home + "/oggetto"
file = open(home,"r") #Opens the file in read-mode
oggetto = file.read() #Reads the file and assigns the value to a variable
file.close() #Closes the file (read session)

message .......
writer = MimeWriter........
writer.addheader('Subject', oggetto)
......

# start off with a text/plain part
part = .....
body = .....
body.write('Testo del Messaggio')

# now add an image part
......
body = part.startbody('text/csv; name=NomeDelFile facoltativo') # qui text/csv è inventato ma funziona
base64.encode(open('/home/fabrizio/Scrivania/PRV.csv', 'rb'), body)
......

# send the mail
s = smtplib.SMTP("smtp.gmail.com", 25)
s.ehlo()  
s.starttls()  
s.ehlo()  
s.login("nomeutente@pluto.com", "password")
rCode = s.sendmail('mittente@pluto.com', 'destinatario@pippo.it', message.getvalue())
s.quit()
if rCode:
   print "F"
else:
   print "S"

l'oggetto e l'allegato vengono prima generati e salvati come file rispettivamente .txt e .cvs  da gambas, e poi letti dallo script il quale li invia. Alla fine da gambas controllo l'output per sapere se è stata inviata o se ci sono stati errori.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: inviare e-mail
« Risposta #9 il: 09 Gennaio 2009, 10:59:18 »
Piccola nota:

Il formato dei file Excel è proprietario, e quindi soggetto a leggi ecc...
riguardo al come creare un file in codesto formato, ti posso dire che non è per nulla semplice (anche sotto windoz, e pure con le librerie adatte, che su linux non esistono).
Inoltre, il formato CSV, è un formato standard, con cui tutto il mondo si scambia informazioni, per cui qualsiasi strumento di lettura diventa valido (vedi OpenOffice...).

Il mio consiglio è di continuare con il csv, e seguire i consigli di leo...

Bye

Offline Fabrizio

  • Gambero
  • **
  • Post: 61
    • Mostra profilo
Re: inviare e-mail
« Risposta #10 il: 09 Gennaio 2009, 12:01:54 »
Il fatto di volerli fare in formato XLS dipende dal fatto che l'ufficio che poi gestirà questi file lo farà com msexcell. In ogni caso va benissimo il cvs.

tks

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: inviare e-mail
« Risposta #11 il: 09 Gennaio 2009, 15:58:26 »
Dopo aver installato (con le relative dipendenze che eventualmente ti segnalerà Synaptic) mutt ma anche msmtp, che non avevo segnalato in origine sostituendolo per errore con procmail, devi creare/modificare nella tua home i seguenti file:

.mailrc
Codice: [Seleziona]

set sendmail="/usr/bin/msmtp"


.msmtprc (in questo file ci metti i dati del tuo server di posta in uscita):
Codice: [Seleziona]

account default
host NOME_SERVER_SMTP
port 25
protocol smtp
auth off
from INDIRIZZO_EMAIL_DA_CUI_FAI_PERVENIRE_LA_POSTA_(MITTENTE)
user UTENTE
password PASSWORD


.muttrc (file di configurazione di muttrc: ricopialo così com'è, io l'ho trovato su internet):
Codice: [Seleziona]

set pager_context=1
set pager_index_lines=6 #mostra un mini-indice nel pager
set menu_scroll
set pgp_verify_sig=no #non mostrare il pgp nel pager
set status_on_top #metti la linea di stato in alto
set sort=threads #visualizza i messaggi per argomento nell'indice

set status_format=" %r %b %f %n Del %d Msgs %m %l %> (%P)"
set pager_format="%-10.10i %[!%a %b %d %R]"
set date_format="!%H:%M %a %d %b "
set index_format="%4C %Z %[%b%d] %-15.15F %s"
set folder_format="%2C %t %8s %d %N %f"

set sendmail="/usr/bin/msmtp"

#set from="default-mailaddress" #imponi il tuo campo from
#set realname="myname"

set record="$HOME/Mutt/sent" #le email inviate sono salvate qui
set delete=yes #cancella senza chiederlo
set include=yes #quota i messaggi alla risposta
set fast_reply=yes #non chiedere se devi rispondere
set beep=no #niente rumore
set markers=no #non aggiungere un "+" quando vai a capo
set confirmappend=no #non chiedere se aggiungere messaggi a mailbox esistente
set to_chars=" +TCF" #niente "L" per mail_list

set folder = $HOME/Mutt
mailboxes =duplicates
mailboxes =default
mailboxes =friends
mailboxes =junk
mailboxes =spam
mailboxes =keep

save-hook .* =keep #la mbox di default per (s)alvare le mail è =keep
subscribe gentoo-user gentoo-dev #iscritto a queste mailing list

bind pager h display-toggle-weed #fai vedere gli header con il tasto h

# simula il vecchio menu delle url
macro index \cb |urlview\n 'call urlview to extract URLs out of a message'
macro pager \cb |urlview\n 'call urlview to extract URLs out of a message'

#esegui fetchmail premendo il tasto G
macro index G "!fetchmail -a -m 'procmail -d %T'\r"
macro pager G "!fetchmail -a -m 'procmail -d %T'\r"

#usato per editare .muttrc e quindi farne il source… non bisogna
#far ripartire mutt
macro generic ,sm ":source $HOME/.muttrc\r"
macro generic \cj "!rxvt -bg wheat -e joe $HOME/.muttrc\r"

#Questa è la lista degli header da togliere quando la mail viene
#visualizzata
ignore *
unignore Date To From: Subject X-Mailer Organization User-Agent
hdr_order Date From To Subject X-Mailer User-Agent Organization

##Mutt deve avere qualche colore
##questi sono per quattro livelli di testo quotato
##vengono sovrascritte le impostazioni di sistema contenute in /etc/mutt/Muttrc

#color quoted green default
color quoted1 magenta blue
#color quoted2 yellow default
#color quoted3 red default
#color signature cyan cyan

#Queste impostazioni di colori sono copiate da /etc/mutt/Muttrc.color
#commentatele se volete i colori di default contenuti in /etc/mutt/Muttrc
#Je vois la vie en rose :-)
color hdrdefault brightcyan blue
color header brightwhite blue "^from:"
color header brightwhite blue "^subject:"

color quoted brightgreen blue
color signature brightwhite blue

color indicator blue green

color error red black
mono error bold
color status black cyan
mono status bold
color tree yellow blue

color tilde brightmagenta blue
color body brightwhite blue "[-a-z_0-9.]+@[-a-z_0-9.]+"
mono body bold "[-a-z_0-9.]+@[-a-z_0-9.]+"
color body brightyellow black "^Good signature"
mono body bold "^Good signature"
color body brightwhite red "^Bad signature from.*"
mono body bold "^Bad signature from.*"
color normal white blue
color message green black
color attachment brightgreen blue


Ed infine crei la cartella ~/Mutt.
Controlla anche che il file .msmtprc abbia solo i permessi di lettura/scrittura per l'utente, niente più (chmod 600 .msmtprc).

A questo punto dovresti essere a posto.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Fabrizio

  • Gambero
  • **
  • Post: 61
    • Mostra profilo
Re: inviare e-mail
« Risposta #12 il: 09 Gennaio 2009, 16:04:48 »
Grazie

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: inviare e-mail
« Risposta #13 il: 09 Gennaio 2009, 16:08:52 »
Fammi sapere se funziona, ok?
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Fabrizio

  • Gambero
  • **
  • Post: 61
    • Mostra profilo
Re: inviare e-mail
« Risposta #14 il: 09 Gennaio 2009, 16:55:09 »
tks Leo, dovrei riuscire a provarlo questa notte! appena provato ti faro sicuramente sapere.

bye