Visualizza messaggio singolo
Vecchio 02-05-2018, 10.44.27   #4
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Rif: Inviare un pdf via Email in vba

Fermo restando che non ho nulla in contrario alle soluzioni proposte da Alex, credo che l'approccio migliore in qualsiasi situazione sia quello di valutare la possibilità di evitare il più possibile di appoggiarsi a componentistica esterna, avendo a disposizione un linguaggio sufficientemente completo per svolgere il compito specifico, la cui unica difficoltà costituita dalla codifica base64, è già stata superata e proposta quale soluzione da implementare nell'ambito applicativo indicato dall'utente A.Maurizio; Spedire una mail, alla fine, si rivela piuttosto semplice.
1 - Prendiamo in considerazione il protocollo classico SMTP (es: https://en.wikipedia.org/wiki/Simple...nsfer_Protocol),
2 - ricerchiamo in internet come spedire una mail con telnet (es: https://practical365.com/exchange-se...ail-via-telnet) e
3 - facciamo delle prove d'inoltro seguendo la guida, prendendo in considerazione il server mail che usiamo di solito.
La prima cosa che salta agli occhi è che il server risponde ai comandi impartiti attraverso codici, quindi capire i codici significa capire se si sta seguendo la corretta procedura.
La seconda cosa che salta agli occhi è che una volta autenticati e specificati il mittente (MAIL FROM: ) ed il destinatario (RCPT TO: ) il messaggio segue l'impartizione del comando DATA seguito da '.' come terminatore.
La terza cosa che salta agli occhi è che, una volta effettuate le prove di spedizione via telnet, quello che si ottiene è l'inoltro di semplice testo, ma serve spedire anche uno o più allegati !
Come fare ?
Ai più attenti non sarà certo sfuggito il fatto che tutto il contenuto di una mail, sia essa testuale o html è compreso tra DATA e '.'.
La domanda che sorge spontanea è "Come si fa a scindere un allegato dal testo" ?
La soluzione è altrettanto semplice: Salviamo in .eml una mail d'inoltro comprensiva di allegato dal nostro client/webclient e studiamone il contenuto.
Ci accorgeremo di una cosa del genere: "Content-type: multipart/mixed": Che roba è ?
Effettuando una veloce ricerca su internet, troviamo che la direttiva fa parte di MIME (https://en.wikipedia.org/wiki/MIME)
Molto bene, allora cio che dobbiamo fare è mettere insieme la parte telnet (SMTP) di cui abbiamo capito il funzionamento e MIME per modificare opportunamente il messaggio che contenga anche l'allegato in base64.
Ora, a lato pratico, è necessario scrivere codice (https://www.developerfusion.com/code...nsock-and-pop3) che spedisca e riceva via TCP, ma ahimè VBA ne è sprovvisto.
Il modo più semplice per ovviare a tale mancanza è fare ricorso agli OCX (es: https://social.msdn.microsoft.com/Fo...into-vba-excel), ma c'è un problema: Il foglio di Excel serve solo a noi o lo dobbiamo distribuire ?
Nel primo caso il problema non si porrebbe, ma nel secondo si, poichè una volta creato il riferimento al componente OCX , esso dovrebbe essere presente anche sul pc del destinatario, pena l'impossibilità di sfruttare a pieno il foglio per la parte relativa all'inoltro delle mail.
Da una rapida ricerca in internet, si scopre che il componente OCX winsock fa uso della libreria di sistema wininet.dll (https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx) che è parte del sistema Windows e non costituisce parte aggiuntiva.
A completamento della procedura, quindi, bisognerebbe riscrivere il codice del componente OCX facendo accesso diretto alle API di sistema (https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx), ma cio non costituisce problema, in quanto attraverso "Declare Function ..." VBA lo consente.
___________________________________

Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice
LoryOne non è collegato   Rispondi citando