http://digilander.libero.it/Cenati

Outlook send mail

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript

 

 

 

 

 

Invia posta con Outlook

Se avete una descrizione migliore per questo programma rispetto a quella riportata nella home page, scrivetemela. Io non sono riuscito a sintetizzare in poche parole ciò che fa questo script.

Il programma è commentato anche in inglese in quanto tempo fa l'avevo inviato ad un newsgroup.

Al lavoro utilizzo diversi pc, ma solo su alcuni ho configurato la mia casella di posta con Outlook. A volte quindi mi trovo a voler preparare una e-mail ma non posso farlo. O meglio, potrei scrivere il testo in un file di testo e poi incollarlo in un messaggio non appena uno dei "miei" computer è libero, ma la cosa è comunque scomoda.

Allora ho pensato di preparare dei file di testo contenenti, nelle prime due righe, l'indirizzo del destinatario e l'oggetto del messaggio. E dalla terza riga in poi il corpo del messaggio.

Quindi ho scritto il seguente programma, che per ciascun file di testo nella directory dello script:

1) legge la prima riga e la usa come destinatario della e-mail;

2) legge la seconda riga e la usa come oggetto;

3) legge dalla terza riga in poi e la usa come corpo del messaggio;

4) invia il messaggio utilizzando outlook.

In questo modo è sufficiente che abbia a disposizione un dischetto, oppure una chiave usb, oppure una cartella di rete condivisa. Qualsiasi supporto al quale si possa accedere dal pc sul quale ho il mio account di Outlook.

Prima di passare al commento dello script, segnalo che le guide all'uso di Outlook trattano in modo estensivo l'uso di vbScript per automatizzare compiti complessi. Nell'analisi della programmazione dell'applicazione ne è descritto in dettaglio il modello ad oggetti. Io mi sono limitato all'oggetto MailItem, ma da script si possono gestire anche il calendario, le note e parecchia altra roba.

Il programma, dopo le dichiarazioni iniziali, recupera il pathname completo dello script e lo usa per estrarne il percorso della directory in cui è contenuto.

Il nome della directory è necessario per sapere dove cercare i txt, ma se preferite potete forzare il programma a cercare i txt sempre sul dischetto a: oppure in una determinata cartella.

L'istruzione Set Messaggi=CartellaPosta.Files recupera nella collezione Messaggi tutti i files della cartella. Quindi con For Each FileMsg in Messaggi accede ai singoli files. Se è un txt assegna a EmailDestinatario il contenuto della prima riga e alla variabile Oggetto il contenuto della seconda riga.

Poi legge dalla terza riga fino alla fine del file e riempie la variabile con il corpo del messaggio.

Giusto per scrupolo, prima di inviare il messaggio controlla che l'indirizzo del destinatario contenga almeno un punto e una chiocciola.

Per spedire il messaggio bisogna istanziare outlook, creare un nuovo messaggio, avvalorarne le proprietà To, Subject, Body e infine inviarlo con il metodo Send. Nulla di più semplice. Per segnalare la fine del programma viene mostrata la conta dei messaggi spediti e dei files trovati.

Volendo si può impostare la proprietà htmlbody. Il testo contenuto verrà inviato come testo html. Quindi scrivendo msg.htmlbody="<h1>Titolo</h1>" sarà inviato un testo interpretato come intestazione molto grande dal programma di posta elettronica del destinatario.

Non ho mai provato, ma mi chiedo se usando come destinatario "fax@0165123456" si riesca a spedire un messaggio come fax. A logica dovrebbe funzionare.

Per la cronaca, io uso Outlook al lavoro, ma a casa uso Eudora.

Copia il programma riportato qui sotto in un file con estensione ".vbs" oppure scarica l'archivio zip contentente lo script.

Giovanni Cenati.


'************************************************
' File:    Outlook SendMail.vbs
' Autore:  Giovanni Cenati Reventlov at katamail com
' http://digilander.libero.it/Cenati
' Codice vbs liberamente utilizzabile citando il sito.
'************************************************
'Versione VBS di un programma gią in Visual Basic 5, gią modificato
'per l'uso con un oggetto COM e ora per appoggiarsi al modello ad oggetti
'di Microsoft Outlook 
'Nella cartella corrente ci sono dei files txt contenenti messaggi di
'posta elettronica. Le prime righe di ogni file contengono rispettivamente :
'1) Indirizzo e-mail del destinatario
'2) Oggetto del messaggio.
'Le righe successive contengono il corpo del messaggio.
'Il programma utilizza l'oggetto COM di Outlook (non express)
'Apre ogni file e se č un messaggio (la prima riga contiene una "@"), lo invia.
'[c] Cenati Giovanni 08.06.02  
'Modificato 19.09.03 per outlook
'This script looks for txt files in current (script) directory and
'if they are message files (with a valid e-mail address in the first line)
'sends the message using outlook (not express).
'The txt file must contain:
'In first line a valid e-mail address of the recipient
'In the second line the subject of the message
'From the third line to the end of file, the body of the message.

dim fso    'as filesystemobject
dim objOL  'as Outlook application
dim CartellaPosta 
	'oggetto directory dove ci sono i messaggi in formato testo
	'Directory where to look for the messages.
dim Messaggi 
	'collezione di files in CartellaPosta. Collection of files in the folder.
dim FileMsg 
	'oggetto file trovato in CartellaPosta. Single file object in the folder
dim Messaggio 
	'file aperto in lettura contenente l'E-Mail. File openend to read the message
dim ContaMail 
	'numero di messaggi e-mail spediti. Number of sent e-Mails

'Crea istanza agli oggetti necessari al programma
'Creates needed objects
set fso = CreateObject("Scripting.FileSystemObject")	
Set objOL = CreateObject("Outlook.Application")

'Ottiene la directory dove č situato script 
'Retrieves script directory
ScriptFullName =wscript.ScriptFullName 
CurrentPath = Left(ScriptFullName, InStrRev(scriptfullname, "\")-1)

'Recupera tutti i files della directory
'Sets folder where to look for messages and reads all files
set CartellaPosta = fso.GetFolder(CurrentPath)
Set Messaggi = CartellaPosta.Files

For Each FileMsg in Messaggi 'Processa ogni file della cartella
	if ucase(right(FileMsg,4))=".TXT" then
		'se č un txt... If it's a txt...
		Set f = fso.GetFile(FileMsg)	'Ne recupera il nome
		Set Messaggio = f.OpenAsTextStream 'Apre il file
  		'Legge le righe del file contenenti le intestazioni del messaggio e-mail
		EmailDestinatario = Cstr(Messaggio.readline) 
		'Prima riga: indirizzo e-mail del destinatario 
		'First line: destination e-mail address
		Oggetto = Cstr(Messaggio.readline) 
		'Seconda riga: Oggetto del messaggio
		'Second line: subject
		Body= "" 
		'Svuota la variabile e legge tutte le righe del corpo del messaggio.
		'Empty the variable which will contain the body of the message.
		Do While not Messaggio.AtEndOfStream 
			Body = Body & Messaggio.ReadLine & vbcrlf
		Loop
		Messaggio.Close	'Chiude il file contenente il messaggio

   		'Controllo validitą dati. Control of e-mail address
		'Se l'indirizzo del mittente non č una e-mail passa al prossimo messaggio.
		if instr(1,EmailDestinatario, "@")>1 and instr(1,EmailDestinatario,".")>1 then  
			'Invia il messaggio. Sends the message
			Set objMSG = objOL.CreateItem(0) 'Crea nuovo messaggio. Creates new message.
			With objMSG
				.Subject = Oggetto
				.To = EmailDestinatario
				.Body = Body
				.Send
			End With
			ContaMail = ContaMail +1  'Conta messaggi inviati. Counts messages sent.
		end if ' e-mail?
	end if ' TXT?
Next 'File

Report = "Files: " & Messaggi.count & chr(13)
report = report & "Messaggi e-mail: " & ContaMail & chr(13)
report = report & "Fine Programma" 
msgbox report ,,"Outlook Send Mail  by Cenati Giovanni"

Giovanni Cenati.

 

 
 

© Cenati Giovanni 2004/2010 - http://digilander.libero.it/Cenati - Reventlov at Katamail com

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript