View Full Version : Invio email
Ciao,
Vorrei chiedervi se potreste aiutarmi ad risolvere un grosso problema:
Praticamente in VB o una pagina dalla quale invio email con allegato un file utilizzando il componente WINSOCK.
Fin quà tutto ok, visto che riesco ad inviare l'email tranquillamente. Il problema si è presentato dovendo usare lo stesso programma su un pc dotato di connessione ADSL, per la quale per l'invio delle email occorre settare anche i parametri "AUTENTICAZIONE DEL SERVER NECESSARIA" Idem quella contenuta in OUTLOOK dove successivamente dovranno essere impostati nome account e password forniti dal provider.
Praticamente il programma non mi dà nessun errore, ma le email inviati non arrivano mai a destinazione visto che il provider richiede che per la posta in uscita siano impostati i parametri come sopra dicevo.
Per favore, qualcuno di voi sà come poter impostare al WINSOCK questi parametri?
Oppure se qualcuno di voi conosca qualche altro componente per l'invio di email con annesso allegato che mi possa suggerire, anche se preferirei risolvere con WINSOCK visto che cio tutto già fatto.
Spero che mi possiate aiutare, perchè mi trovo abbastanza incasinata.
Ciao, Carmen
Con Winsock di dovresti essere fatta tutto il protocollo per SMTP per inviare una email... Cambia soltanto nella prima parte dove l'informazione su username e password viene inviata codificata in base 64...
Dovresti trovare qualcosa a riguardo qui: http://www.faqs.org/rfcs/rfc2821.html
Ciao. Ti invio il progetto così magari se puoi le dai un'occhiata che forse e più chiaro.
Ciao.
Ora sinceramente non posso metterci le mani...
http://www.technoids.org/saslmech.html#appB
L'autenticazione è all'appendice B...
Il client deve inviare:
AUTH LOGIN
Successivamente alla risposta del server deve inviare lo username codificato in Base64...
Dopo la risposta del server deve inviare la password codificata in base64...
Se è andata bene riceve un reply del tipo 235...
Tutto questo va messo subito dopo questa riga (prima di HELO):
'il programma si 'presenta' al server inviando il proprio IP address
Per l'algortimo di codifica Base64 ci dovrebbe essere molto in rete...avevio postato tempo fa un Encode/Decode ma non mi riesce trovarlo...
Mi ero avventurato nello studio del protocollo SMTP(Simple Mail Transfer Protocol ed e' descritto nell'RFC 821 (vedi sito "The Internet Engineering Task Force" all'indirizzo http://www.ietf.org in particolare qui : http://www.ietf.org/rfc/rfc0821.txt?number=821) per inviare email con un pgm in C tramite la libreria winsock... un disastro.
Mi sono bloccato proprio sull'autenticazione.
Ho risolto, devo dire brillantemente in VB, utilizzando i componenti Microsoft MAPI Controls.
Ecco il mio semplicissimo listato che invia email con uno o piu' allegati. Anche con connessione ADSL. Ovviamente utilizza utente e password nonche' parametri del server definiti nel mio client di posta predefinito che e' outlook Exsperss.
Nel Form ho inserito i due controlli MAPISession e MAPIMessages
Option Explicit
Dim fso As New FileSystemObject
Dim path1 As String
Private Sub Form_Load()
Dim i As Integer
Dim ff As Boolean
i = 0
ff = False
Do While Not ff
i = i + 1
path1 = "e:\vipgmc\intraday_web\pagina" & i & ".html"
If fso.FileExists(path1) _
Then
' inizio istruzioni per invio email ----------
MAPISession1.DownLoadMail = False
MAPISession1.SignOn
MAPIMessages1.SessionID = MAPISession1.SessionID
MAPIMessages1.MsgIndex = -1
MAPIMessages1.RecipAddress = "
[email protected]"
MAPIMessages1.MsgSubject = "quotazioni "
MAPIMessages1.AttachmentPathName = path1
MAPIMessages1.Send
MAPISession1.SignOff
' fine istruzioni per invio email ----------
Else
ff = True
End If
Loop
'fine programma
End
End Sub
Ciao Cionci;
O dato un'occhiata al link che mi segnalavi, però al riguardo non sono molto preparata, per cui devo dire che mi viene alquanto complicato riuscire ad mettere insieme le parti di codice mancante.
Non vorrei sembrarti troppo invadente, ma spero che riuscirai ad trovare un frammento del tuo tempo per potermi magari postarmi tù stesso il frammento di codice mancante...
Io intanto cercherò di capirci qualcosa....
A presto, e grazie. Carmen
Ecco qua...
Permette di inviare se è presente l'autenticazione (devi mettere username e password), ma non mi funziona con gli attachment...
Ciao.
Ti ringrazio tantissimo per il tuo prezziosissimo aiuto. Ancora non lo provato su una connessione ADSL, lo farò nel pomeriggio e ti faccio sapere se tutto OK!
L'allegato non lo mandava perchè nella cartella la dove si trova il programma bisogna che ci sia una cartella di nome Files
Ancora grazie e a presto. Carmen
Tutto OK! O provato il tutto anche con la connessione ADSL e funziona perfettamente.
Avrei da chiederti un'ultimo favore qualora fosse possibile.
Sarebbe possibile aggiungere una barra di progressione la quale darebbe l'idea dello stato di avanzamento dell'operazione? un po' come outlook quando si invia una email. La cosa sarebbe utile quando l'allegato abbia delle dimensioni rilevanti, per cui il trascorrere di qualche minuto per l'invio del messaggio potrebbe indurre al fatto che non stia succedendo nulla.
Notavo che winsock è dotato dell'evento "SendProgress", purtroppo non so' come utilizzarlo. Non so' se magari ai qualche chicca da postarmi su cio'.
Ciao. Carmen
Per l'invio di una semplice email non occupa molto tempo...magari il problema è l'attachment...
uuEncodeToFile "x.uue", logoFile
Open "x.uue" For Input As 10
While EOF(10) = False
Line Input #10, l$
OKToSend = False
WS(1).SendData l$ & Chr$(13) & Chr$(10)
While OKToSend = False: DoEvents: Wend
Il punto in cui avanza è quello sopra...
Devi fare una cosa del genere:
uuEncodeToFile "x.uue", logoFile
passo = fsize / 100
parziale = 0
avanzamento = 0 'questa è la progress bar
Open "x.uue" For Input As 10
While EOF(10) = False
Line Input #10, l$
parziale = parziale + grandezza di l$ + 2
avanzamento = Int(parziale / passo)
OKToSend = False
WS(1).SendData l$ & Chr$(13) & Chr$(10)
While OKToSend = False: DoEvents: Wend
Ciao, provando il codice che mi ai postato, devo dire che funziona e non funziona.
Ti spiego: Per far funzionare la ProgressBar dovrei settare il suo valore Max "ProgressBar.Max = xxx";
su questa riga "avanzamento = Int(parziale / passo)" mi da un errore, funziona se la lascio così "avanzamento = Int(parziale)"
questa riga "parziale = parziale + grandezza di l$ + 2" la dovrei forse scrivere così? "parziale = parziale + len(l$) + 2"
Ciao
Infatti il mio non era codice VB, ma pseudocodice...
Comunque mi sono scordato di dirti che fsize è la grandezza del file in Kb...da determinare in qualsiasi modo ti riesca...
Comunque strano che non ti funzioni... Hai definito "passo" ?
"avanzamento" è la progressbar...
Devi settare il max a 100...ed il valore dell'avanzamento della progressbar al valore che ho dato ad avanzamento...
Credo che per la grandezza di l$ vada bene così...non sono sicuro...non programmo in VB :(
Accidentaccio! Non và. o impostato il codice così:
uuEncodeToFile "x.uue", logoFile
passo = FileLen(App.Path & "\files\" & TxtLogo) / 100
parziale = 0
avanzamento = 0 'questa è la progress bar
ProgressBar1.Max = 100
Open "x.uue" For Input As 10
While EOF(10) = False
Line Input #10, l$
parziale = parziale + Len(l$) + 2
avanzamento = Int(parziale / passo)
MsgBox avanzamento
'ProgressBar1.Value = avanzamento
OKToSend = False
WS(1).SendData l$ & Chr$(13) & Chr$(10)
While OKToSend = False: DoEvents: Wend
Non và perche il valore di avanzamento supera quello della prorpietà Max della progressbar, quindi ottengo un bel errore.
Dove sbaglio?
Ci sono dei problemi sulla lettura del file...ho fatto qualche piccola correzzione, me nella variabile non ci finiscono mai i dati non capisco...
uuEncodeToFile "x.uue", logoFile
passo = FileLen(App.Path & "\files\x.uue") / 100
parziale = 0
avanzamento = 0 'questa è la progress bar
ProgressBar1.Max = 100
Open App.Path & "\files\x.uue" For Input As #10
While EOF(10) = False
Line Input #10, l$
parziale = parziale + Len(l$) + 2
avanzamento = Int(parziale / passo)
MsgBox avanzamento
ProgressBar1.Value = avanzamento
OKToSend = False
WS(1).SendData l$ & Chr$(13) & Chr$(10)
While OKToSend = False: DoEvents: Wend
Prova così. Io leggo il suo valore
passo = FileLen(App.Path & "\x.uue") / 100
...
....
Open App.Path & "\x.uue" For Input As #10
Ma allora va ora ?
passo me lo inizializzava bene...era la lettura che non andava...
Originariamente inviato da Carmen
Prova così. Io leggo il suo valore
passo = FileLen(App.Path & "\x.uue") / 100
...
....
Open App.Path & "\x.uue" For Input As #10
Così non inzializza nemmeno passo...
uuEncodeToFile "x.uue", logoFile
passo = FileLen("x.uue") / 100
MsgBox passo
parziale = 0
avanzamento = 0 'questa è la progress bar
Open "x.uue" For Input As 10
While EOF(10) = False
Line Input #10, l$
parziale = parziale + (Len(l$) + 2)
avanzamento = Int(parziale / passo)
MsgBox avanzamento
ProgressBar1.Value = avanzamento
OKToSend = False
WS(1).SendData l$ & Chr$(13) & Chr$(10)
While OKToSend = False: DoEvents: Wend
Con questo codice adesso finalmente mi funziona perfettamente. Ovviamente ti ringrazio del tuo prezziosissimo aiuto...
Carmen
Perfetto... Funziona tutto ;)
Siamo proprio forti!!! :p :p
Ops! Sei proprio forte :D :D :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.