Condividi:        

Macro Word per invio massivo di mail con allegato e firma

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

Macro Word per invio massivo di mail con allegato e firma

Postdi amentinho2 » 06/03/15 10:26

Buongiorno a tutti,

Premetto che sono nuovo del mondo di VBA e sto utilizzando una macro in Word per invio massivo di mail con allegato.

Utilizzo un file word con el corpo della mail, un file excel con le informazioni che devono cambiare e un altro file word con gli indirizzi mail e la posizione dei file allegati.

Il codice che utilizzo è questo:

Codice: Seleziona tutto
Sub emailmergewithattachments()

Dim Source As Document, Maillist As Document, TempDoc As Document
Dim Datarange As Range
Dim i As Long, j As Long
Dim bStarted As Boolean
Dim oOutlookApp As Outlook.Application
Dim oItem As Outlook.MailItem
Dim mysubject As String, message As String, title As String
Set Source = ActiveDocument

On Error Resume Next
Set oOutlookApp = GetObject(, "Outlook.Application")
If Err <> 0 Then
    Set oOutlookApp = CreateObject("Outlook.Application")
    bStarted = True
End If

With Dialogs(wdDialogFileOpen)
    .Show
End With
Set Maillist = ActiveDocument

message = "Enter the subject to be used for each email message."
title = " Email Subject Input"

mysubject = InputBox(message, title)

For j = 1 To Source.Sections.Count - 1
    Set oItem = oOutlookApp.CreateItem(olMailItem)
    With oItem
        .Subject = mysubject
        .Body = Source.Sections(j).Range.Text
        Set Datarange = Maillist.Tables(1).Cell(j, 1).Range
        Datarange.End = Datarange.End - 1
        .To = Datarange
        For i = 2 To Maillist.Tables(1).Columns.Count
            Set Datarange = Maillist.Tables(1).Cell(j, i).Range
            Datarange.End = Datarange.End - 1
            .Attachments.Add Trim(Datarange.Text), olByValue, 1
        Next i
        .Send
    End With
    Set oItem = Nothing
Next j
Maillist.Close wdDoNotSaveChanges

If bStarted Then
    oOutlookApp.Quit
End If
MsgBox Source.Sections.Count - 1 & " messages have been sent."

Set oOutlookApp = Nothing
End Sub


Ho due problemi:

1) che la mail viene inviata solo in formato testo, senza immagini e senza firma
2) Vorrei inviare la mail da un altro indirizzo di posta elettronica e non da quello di default di Outlook.

Qualcuno potrebbe, per favore, aiutarmi? :)

Grazie mille
amentinho2
Newbie
 
Post: 4
Iscritto il: 06/03/15 10:17

Sponsor
 

Re: Macro Word per invio massivo di mail con allegato e firm

Postdi amentinho2 » 08/03/15 14:14

Nessuno puó aiutarmi? Grazie lo stesso..
amentinho2
Newbie
 
Post: 4
Iscritto il: 06/03/15 10:17

Re: Macro Word per invio massivo di mail con allegato e firm

Postdi Anthony47 » 08/03/15 17:35

Ciao amentinho, un tardivo benvenuto nel forum (evidentemente la tua domanda era stata nascosta da altri messaggi successivi ed e' stata ignorata).
Per le immagini nel corpo mail, potresti allegare l' immagine (.Attachments.Add "C:\Dir\NomeImmagine.jpg") e poi inserire nel corpo della tua mail (che deve essere in html) la stringa
Codice: Seleziona tutto
<p>NomeImmagine</p>" & "<img src='cid:NomeImmagine.jpg' height=640 width=480>"
(altezza e larghezza sono opzionali)
Questo significa che non devi usare
.Body = "Test Mail" ma .HTMLBody ="Testo mail con la struttura e i tag Html"

Per la firma, la gestione e' diversa tra vecchie e nuove versioni di Outlook; anche qui il suggerimento low level e' di creare una firma con del testo accodato al corpo della mail, formattandola (con i tag html) come preferisci.

Per il mittente, da Outlook 2007 e' possibile modificarlo usando
Codice: Seleziona tutto
.SendUsingAccount = OutApp.Session.Accounts.Item(1)

(usa l' indice dell' account da utilizzare)

So che e' poco, ma come vedi su Outlook abbiamo tutti poca esperienza.

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

Re: Macro Word per invio massivo di mail con allegato e firm

Postdi amentinho2 » 09/03/15 16:31

Grazie per la risposta e per il benvenuto.

Da quello che ho capito, il corpo della mail (che è il mio file word) dovrá essere scritto tutto in HTML, è corretto?

Quindi il codice <p>NomeImmagine</p>" & "<img src='cid:NomeImmagine.jpg' height=640 width=480>" dovrá essere scritto nel file word che sará la mail che invieró?

Grazie mille
amentinho2
Newbie
 
Post: 4
Iscritto il: 06/03/15 10:17

Re: Macro Word per invio massivo di mail con allegato e firm

Postdi Anthony47 » 09/03/15 18:53

Per quel (poco) che ne so, per inserire una immagine in-line nel messaggio (e non come allegato) la mail deve essere un testo html. Prova a visualizzare il "sorgente" di una mail ricevuta per vedere l' aspetto che hanno; (vanno benissimo allo scopo quelle di tipo spam, con l' avvertenza che queste in genere non hanno le immagini "integrate" nel messaggio ma "linkate" a un loro sito, che usano per tracciare chi le immagini le consulta veramente)
Se l' immagine e' la stessa per tutti i destinatari allora puoi inserire la stringa direttamente nel testo Word; altrimenti dovrai concatenare una stringa che comprende alcuni testi fissi e altri "calcolati".

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

Re: Macro Word per invio massivo di mail con allegato e firm

Postdi amentinho2 » 10/03/15 14:18

Grazie per l'aiuto. Peró cercando in giro sono riuscito a adattare il codice alle mie esigenze.

Incollo il codice se qualcuno vuole utilizzarlo.

Codice: Seleziona tutto
Sub emailmergewithattachments()

Dim Source As Document, Maillist As Document, TempDoc As Document
Dim Datarange As Range
Dim i As Long, j As Long
Dim bStarted As Boolean
Dim oOutlookApp As Outlook.Application
Dim oItem As Outlook.MailItem
Dim mysubject As String, message As String, title As String
Set Source = ActiveDocument

On Error Resume Next
Set oOutlookApp = GetObject(, "Outlook.Application")
If Err <> 0 Then
    Set oOutlookApp = CreateObject("Outlook.Application")
    bStarted = True
End If

With Dialogs(wdDialogFileOpen)
    .Show
End With
Set Maillist = ActiveDocument

message = "Enter the subject to be used for each email message."
title = " Email Subject Input"

mysubject = InputBox(message, title)

For j = 1 To Source.Sections.Count - 1
        Set oItem = oOutlookApp.CreateItem(olMailItem)
        With oItem
            .BodyFormat = 2
            Set olInsp = .GetInspector
            Set wdDoc = olInsp.WordEditor
            Set oRng = wdDoc.Range
            oRng.Collapse 1
            .Display
            .Subject = mysubject
            Source.Sections(j).Range.Copy
            oRng.Paste
            Set Datarange = Maillist.Tables(1).Cell(j, 1).Range
            Datarange.End = Datarange.End - 1
            .To = Datarange
            .BCC = "amentinho@prova.com"
            For i = 2 To Maillist.Tables(1).Columns.Count
                Set Datarange = Maillist.Tables(1).Cell(j, i).Range
                Datarange.End = Datarange.End - 1
                .Attachments.Add Trim(Datarange.Text), olByValue, 1
            Next i
            .Send
        End With
        Set oItem = Nothing
    Next j
Maillist.Close wdDoNotSaveChanges

If bStarted Then
    oOutlookApp.Quit
End If
MsgBox Source.Sections.Count - 1 & " messages have been sent."

Set oOutlookApp = Nothing
End Sub


Un saluto
amentinho2
Newbie
 
Post: 4
Iscritto il: 06/03/15 10:17


Torna a Applicazioni Office Windows


Topic correlati a "Macro Word per invio massivo di mail con allegato e firma":


Chi c’è in linea

Visitano il forum: Nessuno e 36 ospiti