Opzione 1
Lei non ha detto molto riguardo l'ambiente, ma a patto di avere a disposizione si potrebbe utilizzare uno script PowerShell; un esempio è here. L'essenza di questo è:
$smtp = New-Object Net.Mail.SmtpClient("ho-ex2010-caht1.exchangeserverpro.net")
$smtp.Send("[email protected]","[email protected]","Test Email","This is a test")
È quindi possibile lanciare lo script dalla linea di comando come da this example:
powershell.exe -noexit c:\scripts\test.ps1
noti che PowerShell 2.0, che viene installato di default su Windows 7 e Windows Server 2008R2, include un comando più semplice Send-MailMessage
, che semplifica le cose.
Opzione 2
Se siete pronti a utilizzare software di terze parti, è qualcosa linea this SendEmail command-line tool. Dipende dal tuo ambiente di destinazione, però; se si sta distribuendo il file batch su più macchine, ciò richiederà ovviamente l'inclusione (ma non l'installazione formale) ogni volta.
Opzione 3
si potrebbe guidare Outlook direttamente da uno script VBA, che a sua volta si sarebbe scatenare da un file batch; questo ti permetterebbe di inviare un'e-mail usando Outlook stesso, che sembra essere il più vicino a ciò che vuoi. Ci sono due parti in questo; in primo luogo, capire lo script VBA richiesto per inviare un messaggio di posta elettronica. Ci sono molti esempi per questo online, incluso da Microsoft here. Essenza di questo è:
Sub SendMessage(DisplayMsg As Boolean, Optional AttachmentPath)
Dim objOutlook As Outlook.Application
Dim objOutlookMsg As Outlook.MailItem
Dim objOutlookRecip As Outlook.Recipient
Dim objOutlookAttach As Outlook.Attachment
Set objOutlook = CreateObject("Outlook.Application")
Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
With objOutlookMsg
Set objOutlookRecip = .Recipients.Add("Nancy Davolio")
objOutlookRecip.Type = olTo
' Set the Subject, Body, and Importance of the message.
.Subject = "This is an Automation test with Microsoft Outlook"
.Body = "This is the body of the message." &vbCrLf & vbCrLf
.Importance = olImportanceHigh 'High importance
If Not IsMissing(AttachmentPath) Then
Set objOutlookAttach = .Attachments.Add(AttachmentPath)
End If
For Each ObjOutlookRecip In .Recipients
objOutlookRecip.Resolve
Next
.Save
.Send
End With
Set objOutlook = Nothing
End Sub
Poi, avviare Outlook dalla riga di comando con il parametro /autorun
, come da this answer (alter percorso/nomemacro se necessario):
C:\Program Files\Microsoft Office\Office11\Outlook.exe" /autorun macroname
Opzione 4
È possibile utilizzare lo stesso approccio dell'opzione 3, ma spostare il VBA di Outlook in uno script PowerShell (che si eseguirà da una riga di comando). Esempio here. Questa è probabilmente la soluzione più semplice, IMO.
scusa, il mio script è basato su batch. – Mowgli
Quindi devi solo creare lo script PowerShell, quindi avviarlo dal tuo file batch. Dovresti usare i parametri, come per [questa domanda] (http://stackoverflow.com/questions/5592531/how-to-pass-an-argument-to-a-powershell-script). – Geoff
Grazie per gli ottimi collegamenti, ma tutti richiedono l'accesso al server smtp e non posso memorizzare il mio utente e la mia password in nessuno script che sia molto insicuro. – Mowgli