Se vuoi poter inviare immagini in linea col testo allora devi passare dal formato "testo puro" al formato "html"
Se non conosci cosa sia l'html sappi che si tratta del formalismo con cui si descrivono le pagine web; per dettagli vedi
https://www.html.it/guide/guida-html/Il "testo puro" si inserisce nel corpo di una email com
.Body = "Stringhe di testo"; il testo in formato html si inserisce con
.HTMLBody = "Stringhe in formato html"Quindi vediamo come diventa una macro che puo' inviare una mail formattata html:
- Codice: Seleziona tutto
Sub BaseMail()
Dim BDT As String, I As Long
'
Set OutApp = CreateObject("Outlook.Application")
'
'compilazione di un testo standard di accompagnamento
BDT = "<b>Buongiorno</b><br>Ti invio il risultato delle prove effettuate.<br>"
BDT = BDT & "Cordiali saluti <br>"
BDT = BDT & "<i>kiuba & kiss</i>"
'
' (b)
For I = 1 To 3
EmailAddr = Sheets("Foglio1").Cells(3 + I, 2).Value
Subj = "Invio risultati questionario"
'
Set OutMail = OutApp.CreateItem(0)
With OutMail
.to = EmailAddr
.CC = ""
.BCC = ""
.Subject = Subj
.htmlBody = BDT
'.Attachments.Add OutFile
.Display 'or use .send 'VEDI TESTO 1
'.send 'VEDI TESTO 2
End With
'
Application.Wait (Now + TimeValue("0:00:01"))
Set OutMail = Nothing
Next I
Set OutApp = Nothing
End Sub
Le due righe marcate VEDI TESTO 1/2 sono alternative:
.Display visualizza una mail pronta per essere modificata, cancellata, spedita, etc
.Send invece procede all'invio diretto della mail
Ho usato .Display perche' volevo vedere come appariva la mail in partenza
Noterai inoltre che ho usato i tag per inserire un testo in bold e un altro in italico; si tratta solo di esempi, puoi comporre il testo come preferisci (ovviamente rispettando il formalismo html)
Se vuoi inserire una immagine "in linea" con il testo, allora dovrai allegare l'immagine e inoltre inserire il descrittore "cid" all'interno del testo html. Ad esempio:
- Codice: Seleziona tutto
Sub BaseImmagineInLinea()
Dim BDT As String, I As Long, OutAPP As Object
Dim InLineImg As String, PicName As String
'
Set OutAPP = CreateObject("Outlook.Application")
'
InLineImg = "D:\DImmagini\usptrick_sic.jpg" '<<< Full Path & Name
'
PicName = Mid(InLineImg, InStrRev(InLineImg, "\", , vbTextCompare) + 1)
'compilazione di un testo standard di accompagnamento
BDT = "<b>Buongiorno</b><br>Ti invio il risultato delle prove effettuate.<br>"
BDT = BDT & "Cordiali saluti <br>"
BDT = BDT & "<p></p><img src=""cid:" & PicName & """ width=200 height=150><br>"
BDT = BDT & "<p><i>kiuba & kiss</i></p>"
'
For I = 1 To 3
EmailAddr = Sheets("Foglio1").Cells(3 + I, 2).Value
Subj = "Invio risultati questionario "
'
Set OutMail = OutAPP.CreateItem(0)
With OutMail
.to = EmailAddr
.CC = ""
.BCC = ""
.Subject = Subj
.htmlBody = BDT
.Attachments.Add InLineImg
' .Display 'or use .send
.send
End With
'
Application.Wait (Now + TimeValue("0:00:01"))
Set OutMail = Nothing
Next I
Set OutAPP = Nothing
End Sub
Non farai fatica a rilevare come il descrittore sia stato posizionato subito prima della ipotetica firma, dove quindi l'immagine sara' (dovrebbe essere, eh he) visualizzata
Nota che per allegare il file immagine devi usare il percorso + nome file; il descrittore cid richiede solo l'uso del nome file. Pertanto nella macro ho previsto una riga in cui ho inserito il percorso + nome file (vedi riga
InLineImg = "D:\DImmagini\usptrick_sic.jpg") e successivamente mi calcolo il solo nome file (vedi riga
PicName = Mid(InLineImg etc etc)
I codici suddetti inviano 3 messaggi a destinatari diversi (vedi ciclo For I=1 to 3 /Next I), ma tutti uguali.
Dovrai prevedere quindi il modo per compilare messaggi diversi e magari anche allegati diversi
Segnalo infine questa variante, applicabile sia alla Sub BaseMail che alla Sub BaseImmagineInLinea:
- Codice: Seleziona tutto
'...
'compilazione di un testo standard di accompagnamento
BDT = "<b>Buongiorno</b><br>Ti invio il risultato delle prove effettuate.<br>"
BDT = BDT & "Cordiali saluti <br>"
BDT = BDT & "<p></p><img src=""cid:" & PicName & """ width=200 height=150><br>"
BDT = BDT & "<p><i>kiuba & kiss</i></p>"
BDT = BDT & RangePublish("Template", "B10:D20")
'
'...
Questa, in coda all'ipotetica firma, inserisce anche il contenuto del range B10:D20 del foglio Template, direttamente come testo mail, usando la funzione RangePublish di cui ti ho gia' parlato.
Note finali:
A) non tutti i client di posta visualizzeranno allo stesso modo; Outlook mostra in linea, Thunderbird no, la webmail di Libero.it mostra in linea. Insomma non escludo qualche sorpresa ma per questo bisogna prendersela con i relativi progettisti.
B) se si tratta di una stessa immagine da inserire sempre in fondo all'email, allora non ignorerei l'ipotesi di usare una "firma" e mettere lì l'immagine una volta per sempre
Spero che trovi spunti utili...