Macro invio mail allegati pdf
Hai un problema con Excel? 
Macro invio mail allegati pdf
di Pluto75 (utente non iscritto) data: 16/11/2012 11:17:16
Buongiorno a tutti, sono appena iscritto e mi servirebbe il vs aiuto per risolvere un problema: ho bisogno di una macro che prepari tante e-mail quanti sono i file .pdf presenti in una cartella specifica (chiamiamola "Pippo"). Di partenza vorrei fare un file excel con le seguenti colonne: To: colonna B; Cc: colonna C; Oggetto: colonna D; Corpo: colonna E; percorso dell'allegato pdf: colonna F. La macro quindi dovrebbe vedere quanti pdf ci sono nel percorso indicato, preparare tante e-mail quanti sono i pdf ed associare al percorso di ognuno, gli altri campi presenti nelle colonne. Mi auguro di essere stato sufficientemente chiaro. Grazie mille in anticipo
di Vecchio Frac data: 16/11/2012 14:00:05
Per queste operazioni io non mi servo nemmeno di Excel ma di un file .VBS (Visual Basic Script) che pesca da un file di destinatari i nomi dei soggetti a cui inviare l'email e da una cartella gli allegati pertinenti.
Premessa:
- uso Windows XP
- uso VBScript
- uso Outlook
Il file dei destinatari viene letto dal codice nella cartella definita in "percorso" e si chiama destinatari.txt; gli allegati vengono letti dalla cartella in percorso + "allegati".
La struttura di destinatari.txt è così fatta:
(un nominativo per riga)
indirizzo email#allegato1.pdf
Puoi anche combinare insieme gli elementi:
indirizzo email1;indirizzo email2#allegato 1.pdf;allegato 2.pdf;allegato 3.pdf
Questo manderà gli allegati 1, 2 e 3 .pdf ai due indirizzi email specificati.
Quindi: destinatari separati da punto e virgola, poi cancelletto poi indicazione degli allegati, separati da punto e virgola.
Il codice è costruito da permetterti di scrivere nel corpo del testo quello che vuoi, anche il contenuto di un file di testo preconfezionato come puoi vedere dalle istruzioni in "Set messaggio...".
Per come è costruito, il codice si limita a visualizzare il messaggio senza inviarlo (Display); devi commentare questa riga e decommentare quella con Send per inviare effettivamente il messaggio.
E' necessario sapere che si usa Outlook come client di posta.
Inoltre Outlook limita l'invio automatico di email e mostra un avviso per cinque secondi, poi bisogna premere yes (io uso Click Express per simulare la pressione di yes in automatico).
Questo codice è lo stralcio di un codice più complesso ma che non mi ha mai dato problemi, e lo uso da una decina di anni. Fai qualche prova.
'invio automatico email
'ATTENZIONE! prima dell'invio verificare che .Display sia commentato (attivare .Send)
Const ForReading = 1
Const percorso = "cartella_principale"
'attenzione! vbCrlf è case sensitive
newline = vbCrlf
Set myOlApp = CreateObject("Outlook.Application")
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(percorso & "destinatari.txt", ForReading)
Do While f.AtEndOfStream <> True
Set myEmail = myOlApp.CreateItem(olMailItem)
textline = split(f.ReadLine, "#") 'il primo split (0) indica il nominativo, il secondo (1) l'allegato
attachs = split("","")
If ubound(textline) > 0 Then attachs = split(textline(1), ";")
With myEmail
.To = textline(0)
.Subject = "Oggetto della mail"
'Set messaggio = fso.OpenTextFile(percorso & "autoemail body.txt", ForReading)
Set messaggio = "Messaggio generato in automatico, si prega di non rispondere."
msg = messaggio.ReadAll & newline
messaggio.Close
For Each v In attachs
If v <> "" then
msg = msg & newline & "Allegato: " & v
.Attachments.Add percorso & "allegati" & v
End If
Next
.Display 'visualizza o no il messaggio prima di inviarlo; incompatibile con .Send ?
'.Save 'lo salva in posta in uscita di Outlook
'.Send 'lo invia effettivamente; incompatibile con .Display ?
End With
Loop
f.Close
set f = nothing
set fso = nothing
set messaggio = nothing
set myEmail = nothing
set myOlApp = nothing
msgbox "Tutti i messaggi sono stati inoltrati!", vbInformation, "Finito" |
di Pluto75 data: 19/11/2012 09:22:28
Intanto ti ringrazio per l'aiuto. Con questa procedura che mi hai indicato però vedo 2 problemi: 1) da quello che sono riuscito dal codice, viene generata una email per ogni riga del file .VBS e, qualora non trovi l'allegato nel percorso, manda solo un messaggio standard. 2) l'oggetto e il corpo delle email sono sempre le stesse mentre avrei necessità che fossero differenti a seconda degli allegati. Il mio problema è che nella cartella "percorso" non ci saranno sempre tutti gli allegati, ma un loro sottoinsieme, ed il codice dovrebbe leggere quali allegati ci sono in quel giorno ed associare una email per ognuno di questi andando a leggere i dati necessari alla costruzione delle email nelle righe di un file excel. In pratica, se quel giorno è presente l'allegato "pippo", il codice dovrebbe creare una email con allegato "pippo" e pescare gli altri dati dal file excel in cui ci saranno i campi "To", "Cc", "Oggetto", "Corpo", "percorso" (quest'ultima cella conterrà il percorso del file "pippo" e servirà per agganciare allegato e riga corrispondente). In questo modo avrei una macro molto dinamica e facilmente gestibile.
Grazie ancora per l'aiuto
Buona giornata
di HarryBosch data: 19/11/2012 17:27:26
Non mi è chiara una cosa:
- i pdf che si trovano in una determinata cartella, sono già scritti nella colonna F?
- oppure se ne deve preoccupare il codice di trovare tutti i pdf presenti e inserirli in tale colonna? in questo caso, come associo il nome del pdf alla riga giusta, al cliente giusto? nel nome del pdf è ricavabile un "indizio"?
Dovresti spiegarmi meglio questa fase, così poi vediamo di adattare il codice al tuo caso
di Pluto75 data: 20/11/2012 08:53:31
Allora, nella colonna F ci sarebbe scritto il percorso dei pdf che potenzialmente potrebbero trovarsi nella cartella; di fatto, quindi, nella cartella non ci saranno mai tutti quanti i pdf ma solo un loro sottoinsieme. Il codice dovrebbe preparare tante email quanti sono i pdf effettivamente presenti e, utilizzando il campo F del file excel come raccordo tra il pdf e le righe relative del file excel, dovrebbe inserire nelle stesse email i campi "To", "Cc", "Oggetto", "Corpo" relativi a quel pdf. Spero di essermi spiegato un po' meglio, mi rendo conto che è un po' contorta la cosa. Grazie in anticipo per l'aiuto. Ciao
di HarryBosch data: 20/11/2012 11:16:07
Porta pazienza, ma non credo di aver capito ancora come vuoi cercareallegare i pdf.
Ho preparato un file di esempio, così magari partiamo da una base e arriviamo al risultato; troverai il file Excel, come da te descritto, e una cartella con qualche pdf di prova.
Quando lanci la macro, verranno create le mail SOLO se il nome del pdf lungo la colonna F verrà trovato in questa cartella.
Il percorso della cartella devi modificarlo in base al tuo pc; vedi i commenti.
Al momento viene generata la finestra di Outlook (Display), che sarà da sostituire con Send (una volta testato il tutto) per inviarle direttamente.
di Pluto75 data: 20/11/2012 12:01:38
A me sembra che hai capito benissimo, tant'è vero che la macro funziona alla perfezione. Ti ringrazio molto per l'aiuto e per la tua disponibilità.
Grazie mille!!!
Vuoi Approfondire?