Ответ 1
Вариант 1
Вы мало говорили о своей среде, но, предполагая, что у вас есть это, вы можете использовать PowerShell script; один пример здесь. Суть этого заключается в следующем:
$smtp = New-Object Net.Mail.SmtpClient("ho-ex2010-caht1.exchangeserverpro.net")
$smtp.Send("[email protected]","[email protected]","Test Email","This is a test")
Затем вы можете запустить script из командной строки в соответствии с этот пример:
powershell.exe -noexit c:\scripts\test.ps1
Обратите внимание, что PowerShell 2.0, установленный по умолчанию в Windows 7 и Windows Server 2008R2, содержит более простую команду Send-MailMessage
, что делает вещи легче.
Вариант 2
Если вы готовы использовать стороннее программное обеспечение, это строка это средство командной строки SendEmail. Однако это зависит от вашей целевой среды; если вы развертываете пакетный файл на нескольких машинах, это будет требовать включения (но не формальной установки) каждый раз.
Вариант 3
Вы можете управлять Outlook непосредственно из VBA script, который, в свою очередь, вы будете запускать из пакетного файла; это позволит вам отправлять электронное письмо с использованием самого Outlook, который, как представляется, ближе всего к тому, что вы хотите. Для этого есть две части; во-первых, выясните скрипты VBA, необходимые для отправки электронной почты. Есть много примеров для этого онлайн, в том числе от Microsoft здесь. Суть этого:
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
Затем запустите Outlook из командной строки с параметром /autorun
в соответствии с этим ответом (измените путь/макронаем при необходимости):
C:\Program Files\Microsoft Office\Office11\Outlook.exe" /autorun macroname
Вариант 4
Вы можете использовать тот же подход, что и вариант 3, но переместите Outlook VBA в PowerShell script (который вы запускаете из командной строки). Пример здесь. Это, вероятно, самое удобное решение, IMO.