Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Macro per invio mail con CDO o tramite Thunderbird

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 per invio mail con CDO o tramite Thunderbird

Postdi kiuba » 24/12/20 12:57

Buongiorno,
ho scritto questa macro per inviare mail da una casella di posta legata ad un sito con host Aruba.
Sub invio_mail_aruba()
Set cdomsg = CreateObject("CDO.message")
With cdomsg.Configuration.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 'NTLM method
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtps.aruba.it"
.Item("http://schemas.microsoft.com/cdo/configuration/smptserverport") = 465
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "xxx@xxxxx.it"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "yyyyyyy"
.Update
End With

strbody = "testo da inviare"
With cdomsg
.To = "zzz@zzzzzzzz.it"
.From = "xxx@xxxxx.it"
.Subject = "soggetto"
.TextBody = strbody
.CC = ""
.BCC = ""
.AddAttachment "C:\XXXX\XXXXXXX.pdf"
.Send
End With
Set cdomsg = Nothing
End Sub


quando la eseguo mi da' il seguente errore:

Errore di run-time '-2147220973 (80040213)':
Il trasporto non è riuscito a connettersi al server

Qualcuno potrebbe suggerirmi come modificare il codice per farlo funzionare?

Grazie
Avatar utente
kiuba
Utente Junior
 
Post: 47
Iscritto il: 30/11/20 21:24

Sponsor
 

Re: Macro per invio mail con Aruba

Postdi Anthony47 » 25/12/20 01:31

Questa non l'avevo proprio vista.
Comunque oggi non e' il giorno buono....
Sconsiglio di usare CDO per l'invio di email, perche' il rischio di inviare messaggi di cui non rimane traccia e' troppo alto
(se poi penso che tu lo possa usare per inviare i risultati degli esami clinici allora dovrei usare un termine piu' forte di "sconsigliare")
Comunque configurando senza l'uso di ssl e quindi usando la porta 25 (e usando un account riconosciuto da aruba) a me l'invio ha funzionato:
Codice: Seleziona tutto
.Item("http://schemas.microsoft.com/cdo/configuration/smptserverport") = 25    '465
'...
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False 'True

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

Re: Macro per invio mail con Aruba

Postdi kiuba » 25/12/20 16:04

Ho provato a modificare come suggerito, ma continua a darmi lo stesso problema. Proverò a chiedere all'assistenza di Aruba se ci sono dei parametri particolari da utilizzare, anche se quelli che si trovano nel loro sito sono quelli che ho utilizzato.

In alternativa potrei utilizzare Thunderbird per inviare le mail. é possibile collegare Thunderbird ad una macro? In questo modo sarebbe più sicuro?

In qualsiasi caso pensavo di fare sempre un doppio invio, uno al destinatario ed un secondo ad una seconda casella del mittente come copia di sicurezza.

Non mi servirà per i dati clinici, ma per un lavoro che sto' sviluppando con alcuni alunni in un progetto di alternanza scuola lavoro in cui facciamo simulazione d'impresa. Il lavoro prende spunto dalla situazione descritta nell'altro post.

Grazie per le osservazioni che mi risulteranno molto utili.

BUONE FESTE!!!
Avatar utente
kiuba
Utente Junior
 
Post: 47
Iscritto il: 30/11/20 21:24

Re: Macro per invio mail con Aruba

Postdi kiuba » 26/12/20 10:15

Leggendo in vari topic del forum ho trovato il metodo SendMail per l'invio della posta con ThunderBird, ma a quanto mi pare di capire non è possibile allegare file .pdf, solo file generati da excel e in più non si riesce a mettere del testo nella mail.

Mi potete confermare se ho capito bene?

Grazie
Avatar utente
kiuba
Utente Junior
 
Post: 47
Iscritto il: 30/11/20 21:24

Re: Macro per invio mail con Aruba

Postdi Anthony47 » 26/12/20 10:43

Non credo che tu possa usare le risorse di Aruba senza essere gia' fruitore di un servizio di mail Aruba (una casella "@aruba.it", o associata a un dominio gestito da Aruba); insomma quell'errore dice che non sei riconosciuto.
Se non sei gia' utente di un servizio Aruba puoi sempre usare libero.it per ottenere un account gratuito di posta. Potrai poi usare
Codice: Seleziona tutto
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 'NTLM method
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.libero.it"
.Item("http://schemas.microsoft.com/cdo/configuration/smptserverport") = 465
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "ilTuoAccount@libero.it"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "laTuaPassword"


Thunderbird non ha una integrazione col vba, qualcosa si puo' fare usando i comandi della sua interfaccia di linea; vedi http://kb.mozillazine.org/Command_line_ ... underbird)
In particolare si puo' usare l'opzione "-compose" e comporre (come pubblicato al suddetto link) un comando del tipo
Codice: Seleziona tutto
thunderbird -compose "to='john@example.com,kathy@example.com',cc='britney@example.com',subject='dinner',body='How about dinner tonight?',attachment='C:\temp\info.doc,C:\temp\food.doc'"


Ad esempio, fazionando il comando:
Codice: Seleziona tutto
Sub Invio_TBird()
'Vedi http://kb.mozillazine.org/Command_line_arguments_(Thunderbird)
Dim mDest As String, mCopy As String, Subj As String, mBody As String, mAttach As String
Dim TBApp As String, TBCommand As String
'
mDest = "to='utente@dominio.com',"                                    '<<<
mCopy = "cc='utente2@dominio.com',"                                   '<<< Eventuale cc, oppure mCopy=""
Subj = "subject='Oggetto della mail',"                                '<<<
mBody = "body= Testo della mail " & Format(Now, "hh:mm:ss")           '<<< Il testo del msg
mAttach = ",attachment='C:\PROVA\pippo_file.pdf'"                     '<<< Eventuale attachment, oppure mAttach=""
TBApp = "C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe"  '<<< Il TUO percorso completo
'
TBCommand = TBApp & " -compose " & mDest & mCopy & Subj & mBody & mAttach
mypid = Shell(TBCommand, vbNormalFocus)
Application.Wait (Now + TimeValue("0:00:01"))
SendKeys "^{ENTER}", True
Application.Wait (Now + TimeValue("0:00:01"))
Beep
End Sub


SendMail e' pensato per inoltrare il file Excel ad altri, colleghi o collaboratori.

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

Re: Macro per invio mail con Aruba

Postdi kiuba » 26/12/20 21:40

Grazie, mi sembra tutto molto chiaro.

Da quello che leggo con questo metodo sarà sempre necessario premere invio per spedire ogni singola mail. Mi confermi che utilizzando Thunderbird non c'è alternativa a questo limite?
Avatar utente
kiuba
Utente Junior
 
Post: 47
Iscritto il: 30/11/20 21:24

Re: Macro per invio mail con Aruba

Postdi kiuba » 26/12/20 22:22

Ho provato la macro e funziona tutto.

Non capisco come funziona la compilazione del campo body, in particolare come fare a scrivere più righe.

Infine ho provato la macro anche in LibreOffice, funziona ma appare il messaggio:

Errore di run time Basic '73'
Non implementato

Immagino sia legato al fatto che LibreOffice non utilizza gli stessi comandi di Office.

Posso modificare per evitare tale messaggio? Se sì, come??

Grazie 1000
Avatar utente
kiuba
Utente Junior
 
Post: 47
Iscritto il: 30/11/20 21:24

Re: Macro per invio mail con Aruba

Postdi kiuba » 26/12/20 23:09

Codice: Seleziona tutto
SendKeys "^{ENTER}", True


questa è la riga che genera l'errore
Avatar utente
kiuba
Utente Junior
 
Post: 47
Iscritto il: 30/11/20 21:24

Re: Macro per invio mail con Aruba

Postdi Anthony47 » 27/12/20 00:51

Quindi fai riferimento al codice per spedire tramite Thunderbird...

Per scrivere su piu' righe devi intercalare col carattere vbCrlf; esempio:
Codice: Seleziona tutto
TestoMail = "Testo di riga uno" & vbCrLf & "Testo di riga 2"

SendKeys e' il comando che spedisce Contr-Enter alla finestra aperta (la mail); Contr-Enter in genere significa "Invia la mail adesso"

Non conosco LibreOffice, deduco (da quel che scrivi) che non dispone dell'istruzione SendKeys ma non so se c'e' una alternativa...

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

Re: Macro per invio mail con Aruba

Postdi kiuba » 27/12/20 09:00

Buongiorno
Ho provato a scrivere su più righe in questo modo

Codice: Seleziona tutto
mBody = "body= Buongiorno" & vbCrLf & "ecco la mial" & vbCrLf & "Cordiali saluti.," & Format(Now, "hh:mm:ss")



se lo inserisco in un ciclo for succede qualcosa di strano.. Nella prima mail funziona tutto bene, mentre nella seconda il testo viene riportato tutto su di un'unica linea. Non capisco dove sbaglio.

Riporto il codice di prova completo

Codice: Seleziona tutto
Sub Invio_TBird()
'Vedi http://kb.mozillazine.org/Command_line_arguments_(Thunderbird)
Dim mDest As String, mCopy As String, Subj As String, mBody As String, mAttach As String
Dim TBApp As String, TBCommand As String
'
For i = 1 To 2
    mDest = "to='xxx@xxxxx',"                                    '<<<
    mCopy = "cc='xx@xxxxx.it',"                                   '<<< Eventuale cc, oppure mCopy=""
    Subj = "subject='Ciao',"                               '<<<
    mBody = "body= Buongiorno" & vbCrLf & "ecco la mail." & vbCrLf & "Cordiali saluti.," & Format(Now, "hh:mm:ss")           '<<< Il testo del msg
   
    mAttach = ",attachment='C:\xxxxx\xxxxx.pdf'"                     '<<< Eventuale attachment, oppure mAttach=""
    TBApp = "C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe"  '<<< Il TUO percorso completo
    '
    TBCommand = TBApp & " -compose " & mDest & mCopy & Subj & mBody & mAttach
    mypid = Shell(TBCommand, vbNormalFocus)
    Application.Wait (Now + TimeValue("0:00:01"))
    SendKeys "^{ENTER}", True
    Application.Wait (Now + TimeValue("0:00:01"))
    Beep
Next i
End Sub
Avatar utente
kiuba
Utente Junior
 
Post: 47
Iscritto il: 30/11/20 21:24

Re: Macro per invio mail con CDO o tramite Thunderbird

Postdi Anthony47 » 27/12/20 17:19

Ho visto che e' disponibile anche il comando "format", che consente di impostare formato 1=html oppure 2=Text.
Possiamo quindi usare il formato=1 e comporre il testo usando i tag html; in particolare <br> per "a capo", ma si possono anche usare altri tag per formattare il testo.
Quindi, ad esempio:
Codice: Seleziona tutto
    mBody = "format=1,body='<b>Riga 1 dell'email, </b>" & "<br>" & "<i>riga 2 </i>della mail <br>" & "Riga 3, alle " & Format(Now, "hh:mm:ss") & "'"            '<<< Il testo del msg

E' inoltre necessario che il testo sia racchiuso tra un apostrofo iniziale e uno finale, per evitare che eventuali "virgole" intermedie siano interpretate come separatore dei campi.

Non sono invece riuscito a usare il formato Text (format=2) perche' o mi ignora il comando di andare a capo oppure (se lo inserisco nella sua codifica esadecimale, %0d, come viene raccomandato in giro) va in tilt se il testo contiene il carattere "virgola"

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

Re: Macro per invio mail con CDO o tramite Thunderbird

Postdi kiuba » 28/12/20 16:54

Grazie, ora ho le idee chiare. :D
Avatar utente
kiuba
Utente Junior
 
Post: 47
Iscritto il: 30/11/20 21:24


Torna a Applicazioni Office Windows


Topic correlati a "Macro per invio mail con CDO o tramite Thunderbird":


Chi c’è in linea

Visitano il forum: Nessuno e 32 ospiti