Condividi:        

[EXCEL-VBA-OUTLOOK] Invio mail con immagine incorporata

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[EXCEL-VBA-OUTLOOK] Invio mail con immagine incorporata

Postdi saxas » 24/04/14 11:52

Salve a tutti,
dovrei inserire una immagine nel corpo della mail, tramite excel vba ho trovato diverse soluzioni ma non riesco ad adattarla alle mie esigenze,
in realtà inserisce una immagine ma questa risulta bianca e piccola non visualizzabile,

Codice: Seleziona tutto
Sub Inviamail()

    Dim OutApp As Object
    Dim OutMail As Object
    Dim DESTINATARIO As String
   
    Sheets("CONTATTI EMAIL").Select
 RigheLista = Cells(Rows.Count, 2).End(xlUp).Row
 
 For x = 2 To RigheLista
 DESTINATARIO = Cells(x, 2)
 mail = Cells(x, 13)
 OGGETTO = Sheets("PANNELLO PRINCIPALE").Cells(1, 10).Value
 NOMEPROMO = Sheets("PANNELLO PRINCIPALE").Cells(3, 10).Value
 IMMAGINE = "<html><head></head><body><img src=' & PERCORSOFILEIMMAGINE & '/></b><br></body></html>"
        Set OutApp = CreateObject("Outlook.Application")
        OutApp.Session.Logon
        Set OutMail = OutApp.CreateItem(0)
        On Error Resume Next
        With OutMail
            .To = mail
            .CC = ""
            .BCC = ""
            .Subject = OGGETTO
            .BodyFormat = olFormatHTML
            .HTMLBody = IMMAGINE
            .Display
            '.Send
        End With
        On Error GoTo 0
 
        Set OutMail = Nothing
        Set OutApp = Nothing
        Application.SendKeys "%a"
Next x
End Sub


inoltre avevo provato, leggendo altri forum, a inserire l'immagine nella firma e quindi andare a prelevare la firma con il seguente codice, in questo secondo caso , mi inserisce la firma con la dimensione dell'immagine corretta, ma risulta bianca, invece se la inserisco manualmente si visualizza correttamente,
Codice: Seleziona tutto
Sub email()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim EmailAddr As String
    Dim Subj As String
    Dim BodyText As String
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    Sheets("CONTATTI EMAIL").Select
 RigheLista = Cells(Rows.Count, 2).End(xlUp).Row
 
 For x = 2 To RigheLista
 DESTINATARIO = Cells(x, 2)
 mail = Cells(x, 13)
 OGGETTO = Sheets("PANNELLO PRINCIPALE").Cells(1, 10).Value
 NOMEFIRMA = Sheets("PANNELLO PRINCIPALE").Cells(3, 10).Value

    'path completo dove è contenuta la propria firma di posta nel sistema
    firme = "C:\Users\saxas\AppData\Roaming\Microsoft\Signatures\" & NOMEFIRMA & ".htm"
    If Dir(firme) <> "" Then
        Signature = GetBoiler(firme)
    Else
        Signature = ""
    End If

    With OutMail
        .To = mail    'a chi e' indirizzata
        .CC = ""    'per conoscenza
        .Subject = OGGETTO    'oggetto
        .HTMLBody = "" & strbody & "" & Signature
        .Display
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing
    Next x
End Sub

Function GetBoiler(ByVal sFile As String) As String
    Dim fso As Object
    Dim ts As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
    GetBoiler = ts.ReadAll
    ts.Close
End Function

inoltre ho provato ad utilizzare il codice a questo link
http://www.outlookcode.com/d/code/htmlimg.htm
ma mi da errore in Dim oSession As MAPI.Session ' CDO objects

utilizzo office 2013 nella firma è rimasto 2010, provvedo a cambiarla :D
grazie per l'aiuto
Win10 - Office 2016 Ita
saxas
Utente Junior
 
Post: 55
Iscritto il: 14/11/13 16:58

Sponsor
 

Re: [EXCEL-VBA-OUTLOOK] Invio mail con immagine incorporata

Postdi Anthony47 » 27/04/14 01:06

Nella prima macro evidentemente usi il "late binding" (cioe' non hai impostato un riferimento alla libreria di gestione Outlook), quindi non puoi usare la costante olFormatHTML, ma devi usare il suo equivalente numerico, cioe' 2.
Poi, e' evidente che quel modo di far riferimento a un' immagine presuppone che l' immagine sia su un server web accessibile al ricevente.
Inoltre nel codice html, l' origine dell' immagine deve essere racchiusa tra virgolette.
Infine, la stessa istruzione con cui compili la variabile IMMAGINE aveva un errore di sintassi (uso di Apostrofo al posto di Virgolette)

Io con questo esempio invio regolarmente l' immagine; anzi "il link a cui prelevare l' immagine":
Codice: Seleziona tutto
Sub InviamailAnt()

    Dim OutApp As Object
    Dim OutMail As Object
    Dim DESTINATARIO As String
   
    Sheets("Foglio1").Select
 RigheLista = Cells(Rows.Count, 2).End(xlUp).Row
 
 PERCORSOFILEIMMAGINE = """http://www.pc-facile.com/images/loghi/default.png"""
 
 For x = 2 To RigheLista
 DESTINATARIO = Cells(x, 2)
 mail = Cells(x, 13)
 OGGETTO = Sheets("Foglio1").Cells(10, 4).Value
 NOMEPROMO = Sheets("Foglio1").Cells(11, 4).Value
 
 IMMAGINE = "<html><head></head><body><p>Questo e' un pezzo del messaggio</p>" & _
    "<img src=" & PERCORSOFILEIMMAGINE & "/></b><br>" & _
    "<p>Questo e' un altro pezzo del messaggio </body></html>"
   
        Set OutApp = CreateObject("Outlook.Application")
        OutApp.Session.Logon
        Set OutMail = OutApp.CreateItem(0)
        On Error Resume Next
        With OutMail
            .To = mail
            .CC = ""
            .BCC = ""
            .Subject = "Via InviamailAnt"
            .BodyFormat = 2  'olFormatHTML
            .HTMLBody = IMMAGINE
            .Display
            '.Send
        End With
        On Error GoTo 0
 
        Set OutMail = Nothing
        Set OutApp = Nothing
        Application.SendKeys "%a"
Next x
End Sub

Ovviamente questo metodo non funzionera' se il link e' a un file del proprio pc... In questo caso devi inizialmente allegare il file usando Attachments.Add e poi inserire il riferimento al nome file all' interno del body della mail.
Ad esempio con questo codice:
Codice: Seleziona tutto
Sub InviamailImgInLine()
'Immagine "in-line" con il corpo della mail
    Dim OutApp As Object
    Dim OutMail As Object
    Dim DESTINATARIO As String
   
    Sheets("Foglio1").Select
 RigheLista = Cells(Rows.Count, 2).End(xlUp).Row
 
 PERCORSOFILEIMMAGINE = "C:\Users\UTENTE\Pictures\"   'SOLO PERCORSO, con \ finale
 FILEIMMAGINE = "cedamido_01.jpg"                       'Solo Nome file
 
 For x = 2 To RigheLista
 DESTINATARIO = Cells(x, 2)
 mail = Cells(x, 13)
 OGGETTO = Sheets("Foglio1").Cells(10, 4).Value
 NOMEPROMO = Sheets("Foglio1").Cells(11, 4).Value
 
 IMMAGINE = "<html><head></head><body> " & _
    "<p>Questa e' la prima parte del messaggio </p>" & _
    "<img src='" & FILEIMMAGINE & "'/></b><br>" & _
    "<p>E questa e' la seconda parte....  </body></html>"
        Set OutApp = CreateObject("Outlook.Application")
       
        OutApp.Session.Logon
        Set OutMail = OutApp.CreateItem(0)
        On Error Resume Next
        With OutMail
            .To = mail
            .CC = ""
            .BCC = ""
            .Subject = "Via InviamailImgInLine"
            .Attachments.Add (PERCORSOFILEIMMAGINE & FILEIMMAGINE)
            .BodyFormat = 2 'olFormatHTML
            .HTMLBody = IMMAGINE
            .Display
            '.Send
        End With
        On Error GoTo 0
 
        Set OutMail = Nothing
        Set OutApp = Nothing
        Application.SendKeys "%a"
Next x
End Sub

Spero ci siano sufficienti spunti...

Lascia stare il CDO, e' un componente abbastanza facile da usare ma difficile da governare.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL-VBA-OUTLOOK] Invio mail con immagine incorporata

Postdi saxas » 27/04/14 17:14

Grazie Anthony47, funziona perfettamente,
ho inserito anche la dimensione dell'immagine e messo un collegamento che mi rimanda ad una pagina, ho inserito le dimensioni,e inserito un link che cliccando la parola "qui" si apra un altra pagina.... ma si vede che sto sbagliando qualcosa, e mi sottolinea tutta la riga, vorrei inoltre sapere che bisogna fare per centrare l'immagine rispetto alla pagina di outlook
Codice: Seleziona tutto
IMMAGINE = "<html><head></head><body> " & _
      ""<a href='http://www........it//index.html'><img src='" & FILEIMMAGINE & "'width='405' height='478.5'/></b><br>" & _
      "<p>Se vuoi ....... cliccando <a href='http://www..........it/index.html'>qui</a></p>


Grazie ancora
Win10 - Office 2016 Ita
saxas
Utente Junior
 
Post: 55
Iscritto il: 14/11/13 16:58

Re: [EXCEL-VBA-OUTLOOK] Invio mail con immagine incorporata

Postdi Anthony47 » 28/04/14 11:58

Per centrare l' immagine dovrai usare un attributo di allineamento.
Quanto all' eventuale hyperlink, per cominciare devi rispettare la sintassi, che vuole che l'url di destinazione sia racchiuso tra "doppio apice", non "apice semplice"; ad esempio
Codice: Seleziona tutto
IMMAGINE = "<html><head></head><body><p>Questo e' un pezzo del messaggio</p>" & _
    "<p Align=""center""><a href=""http://www.pc-facile.com""><img src=" & PERCORSOFILEIMMAGINE & "/></a></p><br>" & _
    "<p>Questo e' un altro pezzo del messaggio. Clicca <a href='http://www.pc-facile.com'> Qui </a></body></html>"

Con questo codice solo la parola "Qui" e' marcata come hyperlink.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL-VBA-OUTLOOK] Invio mail con immagine incorporata

Postdi saxas » 28/04/14 20:54

ho risolto separando l'immagine e il testo con hyperlink in due variabili, altrimenti non ne capisco il motivo mi andava in conflitto e tutta la scritta successiva all'immagine diventava cliccabile,
c'è modo di gestire l'interlinea fra le righe ?
e come si gestisce l'invio della mail da uno specifico account, dato che su outlook ho diversi account
Win10 - Office 2016 Ita
saxas
Utente Junior
 
Post: 55
Iscritto il: 14/11/13 16:58

Re: [EXCEL-VBA-OUTLOOK] Invio mail con immagine incorporata

Postdi matmo75 » 24/09/15 22:16

Ciao Amici, qui sono l'ultimo arrivato, non vorrei disturbare.
Ho la stessa esigenza di questa discussione e quindi ne ho preso spunto.
Però al posto dell'immagine è vuoto. Inoltre avrei bisogno che le parti di testo siano di dimensioni diverse, mettendo poi sulla firma dei link ad un sito e la mia email. Mi potete aiutare?
Io ho scritto così

Codice: Seleziona tutto
Sub Sendemailimmagine()
Dim OutApp As Object
Dim OutMail As Object
Dim Recipients As String
Dim Subject As String

PERCORSOFILEIMMAGINE = "C:\Users\MM\Desktop\"
FILEIMMAGINE = "me.jpg"

Recipients = Range("A1").Value
CC = Range("A2").Value
BCC = Range("A3").Value
Subject = Range("A4").Value
Body = "<html><head></head><body> " & _
    "<p>Prima parte del messaggio </p>" & _
    "<img src='" & FILEIMMAGINE & "'/></b><br>" & _
    "<p>Seconda parte del messaggio </body></html>"


Set OutApp = CreateObject("Outlook.Application")
        OutApp.Session.Logon
Set OutMail = OutApp.CreateItem(0)
       
With OutMail
.to = Recipients
.CC = CC
.BCC = BCC
.Subject = Subject
.Attachments.Add
.BodyFormat = 2
.HTMLBody = Body
            .Display

        End With
        Set OutMail = Nothing
        Set OutApp = Nothing
        Application.SendKeys "%a"
End Sub
matmo75
Newbie
 
Post: 3
Iscritto il: 24/09/15 22:03

Re: [EXCEL-VBA-OUTLOOK] Invio mail con immagine incorporata

Postdi Anthony47 » 26/09/15 00:24

Ciao matmo75, benvenuto nel forum.
Vale anche per te l'osservazione fatta per saxas tempo fa: "e' evidente che quel modo di far riferimento a un' immagine presuppone che l' immagine sia su un server web accessibile al ricevente"...
Prova invece con la Sub InviamailImgInLine.

Inoltre il codice per l'invio mail cambia tra Outlook 2003 e inferiori o 2007 e superiori; tu quale usi?

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL-VBA-OUTLOOK] Invio mail con immagine incorporata

Postdi matmo75 » 30/09/15 20:04

Ciao. Grazie Anthony47.
Per le prove ho l'Outlook 2002, ma a regime dovrebbe girare sul 2010.
Avevo modificato la Sub InviamailImgInLine perché non mi funzionava come la Sub era in originale.
Anche perché mi serverebbe che destinatario, CC, BCC, Soggetto, varino a seconda del contenuto delle celle. E così pure il corpo del messaggio servirebbe vari una parte con il contenuto di una cella, poi immagine, ed infine una altra parte che vari con il contenuto di un'altra cella. Ho provato a inserire il codice HTML di una paginetta, con pure il testo formattato diversamente ma nulla da fare.
Pensavo di avere risolto con i collegamenti ipertestuali diretto mailto ma questo pur selezionando destinatario, CC, BCC, Soggetto e Corpo dal contenuto delle celle non permette né di aggiungere immagini nel Corpo, né formattare il testo diversamente. Esistono altre vie?
E' troppo complicato quello che vorrei realizzare?
matmo75
Newbie
 
Post: 3
Iscritto il: 24/09/15 22:03

Re: [EXCEL-VBA-OUTLOOK] Invio mail con immagine incorporata

Postdi Anthony47 » 30/09/15 21:55

Per visualizzare l'immagine inline devi usare lo scheletro della Sub InviamailImgInLine; destinatario, cc, bcc, soggetto possono essere di volta in volta prelevate da celle del tuo foglio, quindi possono variare per ogni mail da inviare; idem il corpo della mail.
La firma invece mi pare sia una componente agiunta direttamente da Outlook, quindi per il suo contenuto devi guardare l'help di Outlook.
Se spieghi quale e' il layout dei tuoi dati possiamo provare ad adattare la Sub InviamailImgInLine al tuo caso.
Prova ad allegare un file dimostrativo simile a quello reale e spiega dove vuoi prelevare i vari pezzi di informazione; per allegare un file leggi qui: viewtopic.php?f=26&t=103893&p=605487#p605487

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL-VBA-OUTLOOK] Invio mail con immagine incorporata

Postdi matmo75 » 01/10/15 20:37

Ciao. Esemplifico qui sotto come vorrei fosse l'email che l'excel propone di inviare.

A: destinatario@email.com (indirizzo preso dalla cella A1)
CC: copiacarbone@email.com (indirizzo preso dalla cella A2)
BCC: blindcopiacarbone@email.com (indirizzo preso dalla cella A3)
Oggetto: Email di conferma (testo preso dalla cella A4)

Corpo:

Parte A (testo preso da cella A5 - in Times 10) -----------------------------
Caro ,
con la presente per confermarti che abbiamo ricevuto la tua richiesta.

Parte B (testo preso da cella A6 - in Times 10 Bold) ------------------------------
Fra tre giorni ti invieremo il materiale richiesto.
Cordiali saluti.

Parte C (testo preso da cella A7 - in Times 10) ------------------------------
Matmo75
matmo75@email.com (questo possibilmente ipertestuale mailto)
www.matmo75.com (questo possibilmente ipertestuale link)

Immagine (presa dal mio PC - se non c'è la possibilità di sezionarla in base al valore/testo di una cella va benissimo anche fissa in una sub specifica a questa immagine)

Parte D (testo preso da cella A8 - in Arial 8)
Via Gabriele D'Annunzio, 34
Roma - Italia

Spero sia comprensibile e non troppo complicata come idea.
matmo75
Newbie
 
Post: 3
Iscritto il: 24/09/15 22:03

Re: [EXCEL-VBA-OUTLOOK] Invio mail con immagine incorporata

Postdi Anthony47 » 03/10/15 00:30

Anthony ha scritto: Prova invece con la Sub InviamailImgInLine

Devo confessare che mi sono confuso nell'interpretare la macro pubblicata nel tuo primo messaggio; probabilmente mi sono fermato al titolo e non ho visto che in realta' la mail conteneva (quasi) tutte le cose che avevo suggerito a saxas.
L'unica cosa mancante era l'immagine in allegato.
Tornando quindi alla Sub Sendemailimmagine che avevi inserito, l'istruzione .Attachments.Add e' monca, perche' manca il nome dell'allegato; l'istruzione completa dovrebbe essere
Codice: Seleziona tutto
.Attachments.Add (PERCORSOFILEIMMAGINE & FILEIMMAGINE)

Con questa modifica la macro dovrebbe consentirti l'invio dell'immagine "C:\Users\MM\Desktop\me.jpg" che sara' visualizzata in-line al testo del messaggio.

La macro gia' prende gli indirizzi del "To", del "Cc" e del "Bcc" dalle celle A1, A2 e A3.

Per variare il testo devi variare il contenuto della variabile "Body", ora del tipo:
Body = "<html><head></head><body> " & _
"<p>Prima parte del messaggio </p>" & _
"<img src='" & FILEIMMAGINE & "'/></b><br>" & _
"<p>Seconda parte del messaggio </body></html>"


Qui con santa pazienza devi integrare la struttura tra <html> e </html> per inserire le altre cose:
Se la parte A del messaggio va presa in A5, seguita da una parte B in bold prelevata da A6, seguita dall'immagine (questo me lo sono inventato io, perche' non ho capito dove tu la vuoi posizionare) allora lo stesso codice deve diventare
Codice: Seleziona tutto
    Body = "<html><head></head><body> " & _
        "<p>" & Range("A5").Value & " </p><b>" & _
        Range("A6").Value & " </b></p>" & _
        "<img src='" & FILEIMMAGINE & "'/></b><br>" & _
        "<p>Seconda parte del messaggio </body></html>"

Nota che non ti ho inserito nel codice i tag per rappresentare il messaggio nel font che preferisci, ma mi sono limitato a inserire solo il <b> </b> per il bold attorno alla parte B; l'html non e' il mio forte (ne' e' parte di questa sezione del forum) quindi dovrai cercare altrove quali tag usare per indicare le opzioni che hai in mente.

Lo stesso discorso vale per la parte C e la parte D, che si integrano in modo elementare (vedi "<p><b>" & Range("A6").Value & " </b></p>" & concatenato nella costruzione di Body) ma che avranno poi bisogno di tag piu' complessi per il mailto e l'hyperlink.
Ricorda che alla fine la variabile Body dovra' contenere una stringa che rispetti la sintassi del linguaggio html, altrimenti l'interpretazione del client di posta sara' errata.

Quanto all'immagine, o usi il nome (come fatto nella riga FILEIMMAGINE = "me.jpg") oppure la prelevi da una cella, ad esempio
Codice: Seleziona tutto
FILEIMMAGINE = Range("A7").value        'A7 contiene il nome completo, es IMG001.jpg


Questo e' tutto...
Se hai difficolta' su qualche area specifica ci trovi sempre qui.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL-VBA-OUTLOOK] Invio mail con immagine incorporata

Postdi Andrea_T » 27/11/15 11:05

Grazie mille ragazzi.
Con le vostre indicazioni sono riuscito ad ottenere quello che mi serviva.
Grazie ancora a presto.
Ciao.
Andrea.
Andrea_T
Newbie
 
Post: 6
Iscritto il: 16/03/15 12:46


Torna a Applicazioni Office Windows


Topic correlati a "[EXCEL-VBA-OUTLOOK] Invio mail con immagine incorporata":


Chi c’è in linea

Visitano il forum: Nessuno e 36 ospiti