Newsgroup: it.comp.appl.access
Titolo: MAPI - Impossibile inviare posta da vba a client posta predefinito

Elora, pc nuovo di pacca, Win 10 64bit, installato Office Basic 2003, 
installato run-time Access 2013+sp1 (32bit), installato mde gestionale 
compilato con Access 2013
Client predefinito di posta Outlook 2003
Da gestionale, per mandare via la posta ho sempre usato queste:
--------------------------
Dim SendMail As clsMAPISendMail
 
Set SendMail = New clsMAPISendMail
SendMail.Clear
SendMail.AddTo "", DESTINATARIO
SendMail.Subject = oggetto
SendMail.Body = messaggio
SendMail.FileAdd (allegato)
SendMail.SendImmediately = True
dummy = SendMail.Send
--------------------------
 
dove la classe clsMAPIsendmail contiene queste istruzioni:
http://www.vbsimple.net/howto/ht_020-2.htm
 
 
Bene, sempre andato tutto lissio con Outlook Express, con Thunderbird, 
con Live Mail
L'allegato viene creato, la procedura invio posta parte, la 
comunicazione con Outlook avviene perche' viene emesso il pannellino 
"ocio che qualchedun sta per spedire posta..." e quindi il client di 
posta riceve il comando di spedizione, pero' poi qualcosa va storto
Pero' quando e' il momento di spedire butta fuori (il gestionale) un bel 
tondo rosso dotato di croce bianca con a fianco un bel FAILURE
Che sarebbe la descrizione errore restituito dalla
 
Send = MAPISendMail(ByVal 0&, ByVal 0&, m_Message, lngFlags, ByVal 0&)
 
Ricordo che la MAPISendMail e'
--------------------------------
Private Declare Function MAPISendMail Lib "MAPI32.DLL" (ByVal Session As 
Long, ByVal UIParam As Long, ByRef message As MAPIMessage, ByVal flags 
As Long, ByVal Reserved As Long) As Long
--------------------------------
 
L'errore restituito non e' che aiuti molto
Ho provato ad attivare il log eventi di Outlook, ma non si vede niente
Vorrei poter tenere lo stesso codice usando client di posta diversi e 
quindi non mi avventuro sull'utilizzo di librerie specifiche per Outlook
Da cosa puo' dipendere l'errore?
Come debuggare 'sta cosa?
Ciao e grazie
RobertoA

on 16-02-17, RobertoA supposed :

In alternativa a MAPI e ai moduli di classe (altra sublime 
invenzioine!)
prova questa:
==================================================
Private Sub Command10_Click()
Dim OL As New outlook.Application, NewMail As MailItem
Dim i As Integer, S As String
Dim AttachmentArray(1 To 3) As String
Dim FSO As Object, TextStream As Object
Dim eMailMessage As String, SendAccount As String
Dim ReceiveAccount As String
 
'---  Definizioni  ----------------------------------
'Testo del messaggio
eMailMessage = "Quando i Romani avevano le palle."
 
' File contenente il corpo del messaggio
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TextStream = FSO.OpenTextFile("E:\aa0.txt")
Do Until TextStream.AtEndOfStream
    S = S & vbCrLf & TextStream.ReadLine
Loop
 
' Tre file costituenti gli attachment
AttachmentArray(1) = "E:\aa1.txt"
AttachmentArray(2) = "E:\aa2.txt"
AttachmentArray(3) = "E:\aa3.txt"
 
' Indirizzo DAL quale si trasmette
SendAccount = "
cmp...@gmail.com
"
 
' Indirizzo AL quale si trasmette
ReceiveAccount = "
brun...@libero.it
"
'----------------------------------------------
 
Set OL = CreateObject("Outlook.Application")
Set NewMail = OL.CreateItem(olMailItem)
With NewMail
    .SendUsingAccount = Session.Accounts(SendAccount)
    .To = ReceiveAccount
    '.CC = "
brun...@libero.it
; 
bruno.c...@tin.it
"
    '.BCC = "
brun...@libero.it
; 
bruno.c...@tin.it
"
    .Subject = "Prova eMail da Access"
    .Body = eMailMessage & vbCrLf & S
    .ReadReceiptRequested = True ' False
    For i = 1 To 3
        .Attachments.Add AttachmentArray(i)
    Next
    .Send
End With
 
End Sub
=================================================
 
L'ho creata con Access 2003 e la sto usando tuttora con Access 2016.
 
Bruno


Ti ringrazio ma non vorrei legarmi ad Outlook
In questa specifica installazione Access 'spara' verso Outlook, ma in 
altre potrebbe esserci un client di posta diverso e l'esempio sopra non 
funzionerebbe
 


siccome Outlook rompe i maroni ad ogni aggiornamento io ho risolto cosi:
nello stesso programma uso entrambi i sistemi per l'invio mail.
 
uso mapi per tutti i client di posta tranne outlook
uso le librerie di outlook (con il late binding per non avere probelmi 
di riferimenti) per i client con outlook
 
in ogni client metto un file di configurazione dove imposto se il client 
mail è outlook o no...parametro che viene letto ad avvio del programma.
 
quindi quando il client invia una mail usa la routine più consona in 
base al parametro impostato nel file di configurazione
 
ciao!
 
 
 
 


Eh si, non ci avevo pensato
Questa potrebbe essere la soluzione giusta
Stavo pensando di usare Blat per svincolarmi completamente
L'invio partirebbe ma sul client posta non si vedrebbe su 'posta 
inviata' e questo e' una funzionalita' cui non vorrei rinunciare
Resta il fatto che non ho ancora capito il motivo per cui non riesce a 
partire con Outlook, e 'sto non sapere mi rompe le scatole
Probabilmente e' il run-time del 2013 che inviando ad Outlook 2003 non 
si prendono, mah