Newsgroup: it.comp.appl.access
Titolo: Inviare email con allegato da VBA con Outlook Express - PROBLEMA!!!

In un'applicazione Access2000 devo inviare un messaggio e-mail con un
allegato. Il requisito è che posso usare solo Outlook Express.
Su 
www.SitoComune.com
 ho trovato il codice che fa per me (messaggio 6.129 di
Andrea Barchetti che, con l'occasione, ringrazio di cuore).
Sarebbe tutto meraviglioso, vista anche la semplicità estrema
nell'utilizzare la funzione InviaMSOE, che implementa la  MAPISendMail della
libreria c:\programmi\outlook express\msoe.dll
Peccato però che in una certa situazione si verifica un blocco della
funzione.
- Se è attiva una connessione al server di posta oppure se Outlook Express è
al momento impostato su "Non in Linea", tutto OK.
- Se però disgraziatamente Outlook Express è impostato su "In Linea" (perchè
si è usciti così l'ultima volta) e nessuna connessione è al momento attiva
succede il disastro:
la funzione MAPISendMail tenta di eseguire immediatamente "INVIA/RICEVI" e,
in questa situazione, compare la form che avverte di problemi nella
connessione, quindi, anche chiudendo la form, l'applicazione ACCESS rimane
ferma sulla chiamata di MAPISendMail. L'unico modo di uscirne è buttare giù
tutto da task manager!!!
Questo succede immediatamente se si chiama MAPISendMail  senza opzione
MAPI_DIALOG, oppure, se provo con MAPI_DIALOG, non appena l'utente tenta di
premere 'INVIA' sulla form di composizione messaggio di Outlook Express...
D'accordo che si può dire all'utente di verificare che, se la connessione
non è attiva, l'opzione di Outlook "Non in Linea" sia marcata, ma non è
certo un modo elegante di risolvere il problema, anche perchè se scappa,
uccidere brutalmente l'applicazione non fa mai bene.
Ho provato ad aggirare l'ostacolo mettendo una chiamata ad Outlook Express
immediatamente prima della MAPISendMail:
Shell"C:\Programmi\Outlook Express\msimn.exe", vbNormalFocus
in modo che sia Outlook stesso ad accorgersi della presenza o meno di una
connessione attiva, eventualmente proporre la dialog di connessione e quindi
impostare di conseguenza il flag "Non in linea", ma è comunque un rimedio da
poveretti: intanto apro inutilmente Outlook, poi l'utente tonto potrebbe
sempre (se chiamo MAPISendMail con opzione MAPI_DIALOG) modificarla
direttamente dalla form di composizione messaggio e quindi inchiodare tutto
appena prova a fare INVIA...
Qualcuno ha idea di come risolvere il problema???
Mi sono fatto l'idea che il tutto si blocchi perchè il sistema tenta di
visualizzare la dialog di richiesta connessione ma che per qualche motivo
questa rimanga "sotto" a qualcosa; essendo una pop-up a risposta
obbligatoria, se non trovo il modo di rispondere o chiuderla, la chiamata
rimane lì all'infinito...
Possibile che non esista un'alternativa ancora più semplice lasciando la
palla al sistema operativo???
(Docmd.SendObject, il fetente, permette solo l'invio di oggetti Access,
con - ShellExecute 0, "open", "mailto:" & indirizzo@indirizzo, "Testo
Messaggio", 0, 0 - dove lo metto il file da allegare???)
Mi scuso per la lunghezza del messaggio ma ho cercato di descrivere il
meglio possibile la cosa.
Ringrazio in anticipo chi mi può dare una dritta.
Alessandro Massarenti
ale....@katamail.com

 ha scritto nel messaggio 
news:FpW_d.674621$b5.30...@news3.tin.it...

Ciao,
se vuoi ho 1 applicativo che può fare al caso tuo
Gaspare 

 ha scritto nel messaggio 
news:1SX_d.1085472$35.40...@news4.tin.it...

Giusto per puntualizzare: te lo spedisco "GRATIS" (se vuoi) l'applicativo e 
poi lo implementi o personalizzi a tuo piacimento
Ciao Gaspare 

 ha scritto nel messaggio
news:qaY_d.1085568$35.40...@news4.tin.it...


 Alessandro Massarenti
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------

 > Sarebbe tutto meraviglioso, vista anche la semplicitŕ estrema



Mi do la risposta da solo, dato che alla fine ci sono saltato fuori e, nel
caso a qualcuno capiti lo stesso problema, può forse evitare di perdere due
o tre giorni e di rompere le scatole al prossimo come il sottoscritto.
L'invio di messaggi con MAPISendMail va in crisi in presenza di Account di
posta definiti con connessione LAN (anche disabilitati) e si sta lavorando
off-line. Questo, almeno, è quello che ho potuto verificare.
In realtà sarebbe stato molto più semplice se avessi letto fin da subito con
più attenzione il messaggio di errore che compariva nel box informativo di
sincronizzazione posta (quello che compare durante la procedura di
"Invia/Ricevi", dopo il quale mi si bloccava tutto). Questo messaggio faceva
riferimento ad un Account di posta che non era quello "vero", cioè a quello
correttamente configurato per accedere ad un server di posta pubblico
tramite connessione remota. In effetti, ne avevo un altro (dimenticato!),
creato tempo fa per fare prove in un'azienda, basato su una connessione LAN
(l'indirizzo dei server POP3 e SMTP era un indirizzo IP di rete privata).
Il fatto strano è che questo account era giustamente disabilitato (il flag
'Includi l'account nella ricezione o sincronizzazione messaggi' era
smarcato), tant'è che nelle normali operazioni di Invia/Ricevi fatte con
Outlook Express non era minimamente preso in considerazione...
Resta il fatto che l'invio di un messaggio tramite la funzione MAPISendMail,
invece, per qualche ragione tentava di utilizzare proprio quell'Account e,
non essoci la sua LAN di riferimento, evidentemente si veniva a creare una
situazione che lo metteva in imbarazzo...
Ho cancellato l'account e tutto magicamente funziona alla perfezione: se
Outlook Express è stato chiuso "in linea" e la connessione al momento non è
attiva, quando invio un messaggio tramite MAPISendMail compare correttamente
la dialog per attivare la connessione; se rifiuto, il messaggio rimane tra
la posta in uscita di Outlook (che viene messo in stato "non in linea").
Ringrazio e saluto di nuovo Gaspare e Roberto per le loro risposte.
Alessandro

 Alessandro
OK Alessandro,
nel prossimo aggiornamento del Sito Comune inserirò una nota a tuo nome
nella FAQ "6.129 Inviare da codice VBA una e-mail con allegati usando
Outlook Express", nota in cui si spiega quanto hai scritto qui sopra, così
chi userà quella soluzione sarà messo al corrente del fatto.
