Email con firma



  • Email con firma
    di Tullio (utente non iscritto) data: 10/11/2013 13:05:34

    Ciao a tutti,
    eccomi di nuovo, Vi prego di resistere !
    Ho ripreso una Sub di Harrybosch (allegata) che oltre a inviare una mail con Outlook, ci aggiunge anche la firma e che naturalmente funziona ottimamente, però nella firma io ho un'immagine che quando viene caricata mi apre un messaggio critico che dice :
    "Impossibile visualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavviare il computer ed aprire di nuovo il file. Se viene visualizzata di nuovo la X rossa potrebbe essere necessario eliminare l'immagine e inserirla di nuovo."
    Ora, niente di tutto questo è vero, la memoria è pompata al massimo, l'immagine non è danneggiata, riavviando il computer tutto resta uguale e l'immagine eliminata e inserita di nuovo non cambia niente.
    Sapreste darmi qualche indicazione per risolvere la questione?
    Grazie.
    Tullio

     
    Sub email()
        Dim OutApp As Object
        Dim OutMail As Object
        Dim EmailAddr As String
        Dim Subj As String
        Dim BodyText As String
        Dim FIRME As String
        Dim SIGNATURE As String
        Dim strbody As String
        
        Set OutApp = CreateObject("Outlook.Application.12")
        Set OutMail = OutApp.CreateItem(0)
    
        'path completo dove è contenuta la propria firma di posta nel sistema
        FIRME = "C:UsersAll UsersAppDataRoamingMicrosoftSignaturesFIRMA PIMN.Htm"
        If Dir(FIRME) <> "" Then
            SIGNATURE = GetBoiler(FIRME)
        Else
            SIGNATURE = ""
        End If
    
        With OutMail
            .To = "xxxx"    'a chi e' indirizzata
            .CC = "yyyy"    'per conoscenza
            .Subject = "xxxxx"    'oggetto
            .HTMLBody = "AAAAAAAAAAA" & strbody & " " & SIGNATURE
            .Display
        End With
    
        Set OutMail = Nothing
        Set OutApp = Nothing
    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
    



  • di Vecchio Frac data: 10/11/2013 14:14:13

    Spesso i messaggi di errore di Windows (o di Outlook) sono misteriosi e non intendono quello che dicono ^_^
    Comunque mi sembra che stai aprendo il file htm come un flusso di testo: OpenAsTextStream.
    Probabilmente i byte che costruiscono l'immagine vengono decodificati come testo e questo manda in confusione la funzione GetBoiler.
    Non ho però avuto modo di provare.





  • di Tullio (utente non iscritto) data: 10/11/2013 16:04:16

    Ciao Vecchio frac,
    ti ringrazio di quello che puoi fare, e qui vorrei chiederti perché se mi posizioni su OpenAsTextStream. e premo F1 non trova la parola chiave ? Sicuramente mi mancano dei riferimenti, quali dovrei aprire per avere la guida completa?
    Tullio



  • di Vecchio Frac data: 10/11/2013 18:45:51

    Non lo troverai così purtroppo, perchè è un metodo di un oggetto filesystemobject, non builtin di VBA.
    O lo cerchi con google (e troverai un sacco di materiale) oppure ti cerchi e scarichi la guida separatamente (se non ricordo male vbscript.chm, ce l'ho in ufficio).





  • di Tullio data: 11/11/2013 10:50:31

    Buongiorno a tutti,
    ho scaricato il vbscript (grazie Vecchio frac), e l'ho spulciato per quanto mi sia stato possibile, ma non sono riuscito a trovare indicazioni che mi riportassero a qualche apertura diversa se non un'altro testo, ma sicuramente ci sarà il modo di poter caricare una immagine.ipg, forse da sola ?
    Scusate sto scrivendo min...ate ma questa cosa mi blocca la procedura su una sciocchezza.
    Tullio



  • di Vecchio Frac data: 11/11/2013 11:11:17

    Allora Tullio, mi sono tolto lo scrupolo di verificare :)
    Ho creato una firma con un'immaginetta, ho incollato il tuo codice in un progettino vuoto e ... funziona tutto a meraviglia così com'è, senza cambiare niente.
    Non avevo dubbi comunque, essendo un codice di Harry ^_^
    Si apre un messaggio con tutti campi compilati correttamente e regolarmente la firma con l'immaginetta.
    Nota solo che:
    - la firma è in .htm
    - l'ho creata con Word e ho incollato un'immagine (ho provato sia con .bmp che con .jpg)

    Quindi il problema è forse la tua immagine della firma, quanto è pesante? riesci ad aprirla con paint? vuoi spedirmela in privato a staff@excelvba.it così provo io?





  • di Tullio data: 11/11/2013 19:52:03

    Ho fatto un migliaio di prove, immagini jpg,pgn,bpm,tiff,gif, grandi, piccole, piccolissime e non sono riuscito a cavare un ragno dal buco.
    Partendo con nuovo messaggio carica tutto, da codice non ne carica una.
    Eppure dobbiamo farlo da codice, perché nel foglio attivo, sul "nominativo" cerco la mail in rubrica
    e la imposto già, l'allegato pdf lo cerco con i "riferimenti" , l'oggetto si compila in automatico, il corpo è praticamente lo stesso per tutti, e se potessi inserire la firma (quando il progetto è salvato e stampato il pdf) con un clic sul pulsante "invia mail" ho fatto tutto.
    Sarebbe bello sarebbe



  • di Tullio data: 13/11/2013 15:43:21

    Ciao Vecchio frac,
    non è per metterti fretta, sò bene che appena avrai fatto le prove mi risponderai, ma è possibile che si tratti di un qualche settaggio di Outlook perché al contrario di quel che mi dice te, che se costruita con word la firma la vedi io non ci riesco. Utilizzo Microsoft Outlook 2007.
    Ciao e grazie.
    Tullio



  • di Vecchio Frac data: 13/11/2013 17:13:43

    Sì, dobbiamo farlo da codice.
    A me quando salvo la firma htm con Word crea una cartella PIMT_FILE con dentro l'immagine.
    Chiaramente neanche a me adesso la vede via Outlook... quindi non so che prove ho fatto prima :)





  • di Tullio data: 15/11/2013 12:29:54

    Ciao Vecchio frac,
    anche a me crea quella cartella il fatto è che poi non la riporta.
    Senza niente togliere a te che hai sempre soluzioni per tutti, che cosa ne diresti se provassimo a chiedere un intervento di Harry visto che è l'autore del codice ?
    Tullio



  • di Vecchio Frac data: 15/11/2013 16:59:01

    Harry è da un po' che non lo sento.
    Magari stasera gli mando una mail vedendo se può collaborare.





  • di Tullio (utente non iscritto) data: 15/11/2013 19:28:26

    Grazie Vecchio frac.
    Tullio



  • di HarryBosch data: 16/11/2013 14:31:59

    Ciao Ragazzi
    È un po' che sono assente causa trasloco :)
    Sono al momento ancora senza Internet... e con il cell risulta difficile risponderti a dovere.

    Lunedì rispondo dall'ufficio, cosi ti spiego come inserire la firma con immagine :)

    Un salutone a VecchioFrac :)






  • di HarryBosch data: 18/11/2013 10:47:34

    In questo modo dovresti procedere senza problemi:
    - apri outlook e crea un nuovo messaggio di posta
    - crea quindi la tua firma, con il carattere e la grandezza che ti serve, inserendo il logo o l'immagine che utilizzi
    - salva il messaggio con nome: in automatico dovrebbe impostarti il formato .html altrimenti sceglilo dall'elenco dei formati possibili (Salva il file su un percorso "stabile", ad esempio su C:); viene creato un file htm più la relativa cartella contenente le immagini utilizzate e gli schemi xml adottati.

    A questo punto inserisci la routine qua sotto, curando di modificare il percorso del file HTM come da tuo pc.

    Attenzione che, se dopo la creazione del file sposti la cartella che viene creata (contenente le immagini della firma), si dovrà modificare il file .htm andando a scrivere il nuovo percorso (eventualmente ti mostro dove modificare)
     
    Sub email()
        Dim OutApp As Object, OutMail As Object
        Dim EmailAddr As String, Subj As String
        Dim BodyText As String, firme As String, signature
        Dim corpo As String
    
        Set OutApp = CreateObject("Outlook.Application.12")
        Set OutMail = OutApp.CreateItem(0)
    
        'path completo dove depositi la firma creata con Outlook:
        firme = "C:Cartella_Firmefirma_con_logo.htm"
    
        If Dir(firme) <> "" Then
            signature = GetBoiler(firme)
        Else
            signature = ""
        End If
    
        corpo = "_
    " & "Buongiorno Sig. Rossi" & "
    " & _ "testo della mail" & "
    " & _ "su righe diverse" & "

    " & _ "Distinti saluti" With OutMail .ReadReceiptRequested = True 'eventuale richiesta di conferma recapito .to = "yyyy@mail.com" 'a chi e' indirizzata .CC = "xxxx@mail.com" 'per conoscenza .Subject = "PROVA INVIO CON FIRMA" 'oggetto 'imposti il corpo della mail con carattere Arial grandezza 11 'mentre la firma sarà impostatain base al file salvato in htm .HTMLBody = "



  • di HarryBosch data: 18/11/2013 10:49:16

    La parte "corpo" del codice è stata tagliata...
    sostituisci così:

    corpo = "_
    " & "Buongiorno Sig. Rossi" & "
    " & _
    "testo della mail" & "
    " & _
    "su righe diverse" & "

    " & _
    "Distinti saluti"



  • di HarryBosch data: 18/11/2013 10:54:13

    Niente da fare...
    Ti allego un file di prova che facciamo prima :)



  • di Tullio data: 18/11/2013 11:28:38

    Ciao Harry e grazie del file,
    ho fatto tutto e salvato il nuovo messaggio Outlook in "C:FIRMEFIRMA PIMN.htm" ma è esattamente come prima, vedo tutto il testo della firma ma non l'immagine che è sostituita dal messaggio critico

    "Impossibile visualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riavviare il computer ed aprire di nuovo il file. Se viene visualizzata di nuovo la X rossa potrebbe essere necessario eliminare l'immagine e inserirla di nuovo."

    Se a te funziona penserei che si tratti di qualcos'altro, i riferimenti che ho nello Sviluppo sono :
    Visual Basic for Applications
    Microdoft Excel 12.0 object Library
    OLE Automation
    Microsoft Office 12.0 object Library
    e ora ho inserito anche
    Microsoft Office Outlook View Control
    secondo te manca qualcosa ?

    Tullio



  • di Tullio data: 18/11/2013 11:39:11

    Ciao HarryBosh,
    ho cambiato anche il nome da "FIRMA PIMN.htm" a FIRMA_PIMN.htm" e ora prende l'immagine è per questo o per l'aggiunta del riferimento?
    Grazie milioni in ogni caso.
    Faccio ancora un migliaio di prove poi se tutte vanno bene passo a inserire il codice nel modulo.
    Una cosa che ho notato è che questo ultimo codice è velocissimo rispetto al precedente.
    Harry.
    Tullio.
    P.S. - Nel malaugurato caso non andasse mi rifaccio vivo.
    Ora riprovo anche con FIRMA PIMN.htm



  • di Tullio data: 18/11/2013 11:41:42

    E' il trait d'union che cambia la cosa, incredibile, c'ho e c'abbiamo perso un mese a momenti.
    Grazie HarryBosh, grazie Vecchio frac.
    Tullio



  • di Tullio data: 18/11/2013 16:16:57

    Ciao a Harry, ciao Vecchio,
    mi potete dire come avete settato i riferimenti in menu' Visual Basic di Excel ?
    Secondo me c'entra anche quello.
    Grazie.



  • di Tullio data: 18/11/2013 18:53:33

    Ciao a tutti,
    sono alla disperazione, ho aggiunto quattro righe di codice (che ho evidenziato con delle righe remmate) e ora non carica più l'immagine, ma cosa ho sbagliato, leggendo il codice anche se è primordiale a me sembrerebbe corretto. O no ?
    Grazie.
    Tullio
     
    Sub email_con_firma()
    
        Dim OutApp As Object, OutMail As Object
        Dim EmailAddr As String, Subj As String
        Dim BodyText As String, firme As String, signature
        Dim corpo As String
        Dim riga, cerca
        Dim fName As String
        Dim foglio As Worksheet
        Set foglio = ActiveSheet
    
        Set OutApp = CreateObject("Outlook.Application.12")
        Set OutMail = OutApp.CreateItem(0)
    
        'path completo dove depositi la firma creata con Outlook:
        firme = "C:FIRMAFIRMA_PIMN.htm"
    
        If Dir(firme) <> "" Then
            signature = GetBoiler(firme)
        Else
            signature = ""
        End If
    '----------------------------------------------------------
    'Questa è la parte aggiunta da me per ricercare l'indirizzo
    'della mail in Rubrica a farlo predere alla variabile EmailAddr
    
        Application.ScreenUpdating = False
        riga = 2
        cerca = ActiveSheet.Cells(12, 5).Value
        Sheets("Rubrica").Activate
    
        Cells(riga, 2).Select
        While Sheets("Rubrica").Cells(riga, 2) <> cerca
        riga = riga + 1
        Wend
        EmailAddr = Sheets("Rubrica").Cells(riga, 2 + 10)
        If EmailAddr = "" Then
            MsgBox ("Nessuna mail è collegata a " & cerca)
        End If
        Sheets("Fattura").Activate
        fName = ActiveWorkbook.Path & "" & ActiveWorkbook.Name
    'fino a qui
    '--------------------------------------------------------------------
        'corpo = "_
    " & "Buongiorno Sig. Rossi" & "
    " & _ "testo della mail" & "
    " & _ "su righe diverse" & "

    " & _ "Distinti saluti" With OutMail .ReadReceiptRequested = True 'eventuale richiesta di conferma recapito .To = EmailAddr 'a chi e' indirizzata .CC = "" 'per conoscenza .Subject = "" 'oggetto 'imposti il corpo della mail con carattere Arial grandezza 11 'mentre la firma sarà impostatain base al file salvato in htm .HTMLBody = "



  • di Tullio data: 18/11/2013 18:56:38

    Mi ha mangiato un pò di codice che allego

     
    .HTMLBody = "



  • di Tullio data: 18/11/2013 18:57:35

    Vabbè oggi ci devo avere l'omino verde a giro per i computer.



  • di Tullio data: 19/11/2013 10:50:36

    Buongiorno a tutti,
    ho continuato a fare delle prove eliminando e inserendo di nuovo la firma e a volte funziona, a volte nò, per esempio ieri in ufficio quando ho lasciato il computer tutto funzionava, questa mattina alla nuova accensione e alla prima prova l'immagine non è stata caricata e ha presentato il solito messaggio.
    Sembrerebbe che quando si inserisce una immagine nuova la riporti regolarmente, se si spenge e riaccende non la riporta più.
    Tullio



  • di Tullio data: 21/11/2013 17:45:29

    Finalmenteeeee! Sono strafelice
    ci siamo, ora il messaggio si apre con la firma che contiene l'immagine e allego il codice per chi ne possa evere bisogno.
    Non è farina del mio sacco è di Ron de Bruin il quale dice anche nel suo articolo che il codice che stavamo usando in precedenza invia si la firma ma senza immagini, quindi esattamente come succedeva a noi.
    Ringrazio comunque sia Vecchio Frac che HarryBosh ai quali rubo sempre qualche sub.
     
    Sub email_con_firma()
    
        Dim OutApp As Object, OutMail As Object
        Dim EmailAddr As String, Subj As String
        Dim strbody As String
        Dim riga, cerca
        Dim fName As String
        Dim foglio As Worksheet
        Set foglio = ActiveSheet
    
        Set OutApp = CreateObject("Outlook.Application.12")
        Set OutMail = OutApp.CreateItem(0)
     
        Application.ScreenUpdating = False
        riga = 2
        cerca = ActiveSheet.Cells(12, 5).Value
        Sheets("Rubrica").Activate
    
        Cells(riga, 2).Select
        While Sheets("Rubrica").Cells(riga, 2) <> cerca
        riga = riga + 1
        Wend
        EmailAddr = Sheets("Rubrica").Cells(riga, 2 + 10)
        If EmailAddr = "" Then
            MsgBox ("Nessuna mail è collegata a " & cerca)
        End If
        Sheets("Fattura").Activate
        fName = ActiveWorkbook.Path & "" & ActiveWorkbook.Name
        
        
        
        strbody = ""
        
    
        On Error Resume Next
    
        With OutMail
            .Display
            .ReadReceiptRequested = True   
            .To = EmailAddr
            .CC = ""
            .BCC = ""
            .Subject = "Invio documenti"
            .HTMLBody = strbody & "
    " & .HTMLBody '.Send End With On Error GoTo 0 Set OutMail = Nothing Set OutApp = Nothing End Sub



  • di Vecchio Frac data: 21/11/2013 20:38:06

    Semplice ma efficace... in pratica crea un messaggio HTML e lo spedisce in quel formato ^_^