Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6]MAPI

Buongiorno a tutti e buon Venerdě, incuriosito da un post su MAPI sono
andato su MSDN, ho trovato codice e l'ho "assemblato primitivamente"
cosě:
----------------------------------
Private Sub Command1_Click()
    Form1.MAPISession1.SignOn
    Form1.MAPIMessages1.SessionID = Form1.MAPISession1.SessionID
End Sub
Private Sub Command2_Click()
'Scrive un nuovo messaggio
    Form1.MAPIMessages1.Compose
    'Inserisce l'indirizzo
    MAPIMessages1.RecipDisplayName = "marco"
    MAPIMessages1.RecipAddress = "
ma...@ciao.it
"
' Risolve il nome del destinatario
    MAPIMessages1.AddressResolveUI = True
    MAPIMessages1.ResolveName
'Crea il messaggio
    MAPIMessages1.MsgSubject = "Relazione"
    MAPIMessages1.MsgNoteText = "Compilazione eseguita."
 
End Sub
Private Sub Command3_Click()
'Invia il messaggio
    MAPIMessages1.Send False
End Sub
Private Sub Command4_Click()
'Aggiunge l'allegato
    MAPIMessages1.AttachmentPathName = "c:\mio.txt"
End Sub
--------------------------------
ho messo tanti commandbutton per fare operazioni a tappe poi
sistemerň. Il punto č:
andando in ordine di commandbutton non mi da nessuno errore ma non mi
invia il messaggio! DOVE SBAGLIO?
Grazie.
Andrea.

 invia il messaggio! DOVE SBAGLIO?
Direi di controllare l'indirizzo.
Anzichè inviare con False, prova ad inviare con True, così vedi in primo
piano se l'indirizzo è stato correttamente accettato.
Controllalo bene, facendo doppio click sopra, perchè ho visto che a seconda
del client di posta a volte prende il RecipName come indirizzo.
Altrimenti, puoi usare il codice che avevo postato in passato, e che, anche
in base alle segnalazioni di qualcuno, adesso è arrivato ad una nuova
versione.
Riposto qui sotto l'ultima rilasciata.
Ciao
Alberto
Public Function Invia_Mail(ByRef Sessione As Object, ByRef Messaggi As
Object, Optional ByVal Prompt As Boolean = True, Optional ByVal Mittente As
String = "", Optional ByVal Nome_Destinatario As String = "", Optional ByVal
Destinatario As String = "", Optional ByVal Soggetto As String = "",
Optional ByVal Testo As String = "", Optional ByVal Allegato1 As String =
"", Optional ByVal Allegato2 As String = "", Optional ByVal Allegato3 As
String = "") As Integer
'Funzione di Invio e-Mail - Vers. 1.04 - 31/12/2002
'Richiede la presenza di un oggetto MAPISESSION e MAPIMESSAGES sulla form
chiamante.
'Gli oggetti devono essere passati alla funzione.
'La funzione gestisce un massimo di tre allegati, che devono essere passati
in ordine.
'Non è corretto passare Allegato2 o Allegato3, se il precedente non viene
passato.
'Vers. 1.04:    Aggiunta: Gestione di destinatari multipli. Devono essere
separati da ;
'                   ' Gli spazi fra i diversi indirizzi vengono ignorati
'               Nota: Nome_Destinatario può contenere qualunque numero di
descrizioni.
'                   ' Esse vengono comunque prese in considerazione
solamente se il destinatario
'                   ' nella medesima posizione del vettore è non valido come
indirizzo.
'Vers. 1.03:    Modificate le impostazioni di default per Destinatario e
Nome_Destinatario
'               Modificato Mittente, adesso non più impostabile
'               Modificato Nome_Destinatario, che viene considerato solo se
Destinatario non contiene @
'               Nota: Nonostante Mittente e Nome_Destinatario siano di fatto
non più necessari,
'                   ' vengono mantenuti per compatibilità con la sintassi
precedente.
'Vers. 1.02:    Modificato ordine di inserimento allegati per risolvere bug
con Outlook
'*******   Parametri
'Sessione           Oggetto MAPISession
'Messaggi           Oggetto MAPIMessages
'Prompt             Boolean: TRUE=L'utente avrà una finestra per indicare i
dati del messaggio; FALSE=Il messaggio va direttamente in Outlook
'Mittente           String: Nome del mittente [Ignorata]
'Nome_Destinatario  String: Nome del destinatario [Ignorato se l'indirizzo è
correttamente in 'Destinatario']
'Destinatario       String: Indirizzo internet del destinatario
'Soggetto           String: Subject del messaggio
'Testo              String: Testo del messaggio
'Allegato1          String: Percorso e Nome del file allegato 1
'Allegato2          String: Percorso e Nome del file allegato 2
'Allegato3          String: Percorso e Nome del file allegato 3
'Ritorno: INTEGER
'Ritorno=99     Nessun Errore
'Ritorno=1      Errore Generico
'Esempio di Chiamata
'ritorno = Invia_Mail(Sessione:=MAPISession1, Messaggi:=MAPIMessages1,
Prompt:=False, Destinatario:="
pip...@dominio1.it
 ; 
pip...@dominio2.it
",
Nome_Destinatario:="Pippo 1; Pippo 2", Soggetto:"Esempio di Messaggio",
Testo:="Ecco qua il mio autoexec...", Allegato1:="C:\autoexec.bat")
'Sviluppo: Commentare la definizione della Function e decommentare quella
sottostante:
'Public Function Invia_Mail(ByRef Sessione As MAPISession, ByRef Messaggi As
MAPIMessages, Optional ByVal Prompt As Boolean = True, Optional ByVal
Mittente As String = "", Optional ByVal Nome_Destinatario As String = "",
Optional ByVal Destinatario As String = "", Optional ByVal Soggetto As
String = "", Optional ByVal Testo As String = "", Optional ByVal Allegato1
As String = "", Optional ByVal Allegato2 As String = "", Optional ByVal
Allegato3 As String = "") As Integer
Dim Destinatari() As String
Dim Nomi_Destinatari() As String
Dim Indice As Long
Dim Conteggio As Long
On Error GoTo Errore_generico
Invia_Mail = 99
'Splitto la stringa dei destinatari e creo due array
Destinatari = Split(Destinatario, ";", -1, vbTextCompare)
Nomi_Destinatari = Split(Nome_Destinatario, ";", -1, vbTextCompare)
Conteggio = UBound(Destinatari, 1)
'Se l'array dei nomi è più piccolo o più grande, lo ridimensiono
If UBound(Destinatari, 1) <> UBound(Nomi_Destinatari, 1) Then
    ReDim Preserve Nomi_Destinatari(0 To Conteggio)
End If
Sessione.SignOn
Messaggi.SessionID = Sessione.SessionID
Messaggi.Compose
If Soggetto <> vbNullString Then
    Messaggi.MsgSubject = Soggetto
End If
If Testo <> vbNullString Then
    Messaggi.MsgNoteText = Testo
Else
    Messaggi.MsgNoteText = "File Allegati..."
End If
'Ciclo di inserimento dei destinatari
For Indice = 0 To Conteggio
    Messaggi.RecipIndex = Indice
    If InStr(Destinatari(Indice), "@") > 0 Then
        Messaggi.RecipAddress = Trim(Destinatari(Indice))
        Messaggi.RecipDisplayName = Trim(Destinatari(Indice))
    Else
        Messaggi.RecipDisplayName = Trim(Nomi_Destinatari(Indice))
        Messaggi.RecipAddress = Trim(Nomi_Destinatari(Indice))
    End If
Next Indice
If Allegato1 <> vbNullString Then
    Messaggi.AttachmentIndex = 0
    Messaggi.AttachmentPosition = 1
    Messaggi.AttachmentPathName = Allegato1
    If Allegato2 <> vbNullString Then
        Messaggi.AttachmentIndex = 1
        Messaggi.AttachmentPosition = 2
        Messaggi.AttachmentPathName = Allegato2
        If Allegato3 <> vbNullString Then
            Messaggi.AttachmentIndex = 2
            Messaggi.AttachmentPosition = 3
            Messaggi.AttachmentPathName = Allegato3
        End If
    End If
End If
If Prompt Then
    Messaggi.Send True
Else
    Messaggi.Send False
End If
Sessione.SignOff
Exit Function
Errore_generico:
Invia_Mail = 1
End Function

 End Sub
butto lě due ipotesi:
1) qual č il tuo gestore di posta predefinito? se OE dovrebbe funzionare tutto
bene, se O queste operazioni, da prove che avevo fatto mesi fa, si limitano a
mettere il messaggio nella posta in uscita, ma la spedizione viene effettuata
solo se si apre a mano outlook
2) nelle prove che avevo fatto io, chiudevo la mapisession, forse č questa
l'azione che scatena l'invio vero e proprio del messaggio
Queste due ipotesi non sono state testate
This posting is provided AS IS with no warranties, and confers no rights.
Salutoni
Sergio

solo se si apre a mano outlook
Innanzituuto grazie a tutti. Cacchiarola ho provato ad aprire Outlook
e ho visto ben 4 messaggi in Uscita che automaticamente sono partiti!
Quindi presumo che il mio codice (o meglio quello di MSDN :-)) sia
corretto. Peccato che non si possa farli partire subito senza dover
entrare in Outlook. Vero?! Non riesco magari a simulare l'apertura o
qualcosa del genere?
Grazie anche ad Albe. Poi provo il codice,etc.
Andrea.

 ha scritto nel messaggio
news:3e1ea36a...@62.94.0.8...
cut
ehm ehm
già che c'eri che ti costava leggere tutto l'help.....vedevi che msdn
fornisce gia dal vb5 un esempio di progetto già fatto! vbmail si
chiama....stamani mattina quando l'ho provato per marcoski...riceveva la mia
posta!
leggi il post più in basso di marcoski!
Ahloa!

Ahloa!
Senti dato che non lo eseguita io l'installazione di Visual Studio,
com è che, sapevo già dell'esempietto di MSDN,  quel progetto non ce
l'ho? Può essere che non è stata fatta un'istallazione completa? Ad
ogni modo se puoi indicarmi il modo di inviare email non costringendo
l'utente ad aprire Outlook te ne sarei grato. Ciò che ho fatto io va
ma la posta mi rimane come "Posta in Uscita" e solo se apro Outlook me
la invia!!! Acciderboli.
Andrea.