Как отправить простую электронную почту из командного файла Windows?

Я запускаю Windows 2003 Service Pack 2. У меня есть пакетный файл, который работает по требованию. Я хочу, чтобы письмо отправлялось каждый раз, когда запускается командный файл. Письмо простое, просто предложение, указывающее, что командный файл запущен; это одно и то же каждый раз.

Я пробовал пару вещей, чтобы сделать это. Я думал о telnet, но я не могу понять, как перенаправить набор команд в telnet; Пакетные файлы Windows не имеют "здесь документ в стиле Unix" и вызов "telnet <scriptfile", где файл сценария содержит команды для отправки электронной почты, не работал. Я также нашел пару решений в Интернете с помощью CDO.Message, но я никогда не использовал это раньше, и я продолжал получать сообщения об ошибках, которые я не понимаю.

Как я могу отправить простую электронную почту из командного файла Windows?

Ответ 1

Max находится на правильном пути с предложением использовать Windows Scripting для того, чтобы сделать это, не устанавливая никаких дополнительных исполняемых файлов на машине. Его код будет работать, если у вас есть настройка службы SMTP IIS для пересылки исходящей электронной почты с использованием параметра "умный хост", или на компьютере также работает Microsoft Exchange. В противном случае, если это не настроено, вы обнаружите, что ваши письма просто накапливаются в папке очереди сообщений (\ inetpub\mailroot\queue). Таким образом, если вы не можете настроить эту услугу, вы также захотите указать сервер электронной почты, который хотите использовать для отправки сообщения. Для этого вы можете сделать что-то вроде этого в вашем файле script

:
Set objMail = CreateObject("CDO.Message")
Set objConf = CreateObject("CDO.Configuration")
Set objFlds = objConf.Fields
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 'cdoSendUsingPort
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.your-site-url.com" 'your smtp server domain or IP address goes here
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 'default port for email
'uncomment next three lines if you need to use SMTP Authorization
'objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "your-username"
'objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "your-password"
'objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 'cdoBasic
objFlds.Update
objMail.Configuration = objConf
objMail.FromName = "Your Name"
objMail.From = "[email protected]"
objMail.To = "[email protected]"
objMail.Subject = "Email Subject Text"
objMail.TextBody = "The message of the email..."
objMail.Send
Set objFlds = Nothing
Set objConf = Nothing
Set objMail = Nothing

Ответ 2

Я использовал Blat (http://www.blat.net/) в течение многих лет. Это простая утилита командной строки, которая может отправлять электронную почту из командной строки. Это бесплатно и с открытым исходным кодом.

Вы можете использовать команду "Blat myfile.txt -to [email protected] -server smtp.domain.com -port 6000"

Вот еще одно программное обеспечение, которое вы можете попробовать отправить по электронной почте из командной строки (я их никогда не использовал):
http://caspian.dotconf.net/menu/Software/SendEmail/
http://www.petri.co.il/sendmail.htm
http://www.petri.co.il/software/mailsend105.zip
http://retired.beyondlogic.org/solutions/cmdlinemail/cmdlinemail.htm

Здесь (http://www.petri.co.il/send_mail_from_script.htm) вы можете найти другой способ отправки электронной почты с VBS script, плюс ссылку на некоторые из упомянутое программное обеспечение

Следующий код VBScript берется с этой страницы

Set objEmail = CreateObject("CDO.Message")
objEmail.From = "[email protected]"
objEmail.To = "[email protected]"
objEmail.Subject = "Server is down!"
objEmail.Textbody = "Server100 is no longer accessible over the network."
objEmail.Send

Сохраните файл как something.vbs

Set Msg = CreateObject("CDO.Message")

With Msg

 .To = "[email protected]"
 .From = "[email protected]"
 .Subject = "Hello"
 .TextBody = "Just wanted to say hi."
 .Send

End With

Сохраните файл как something2.vbs

Я думаю, что эти сценарии VBS используют почтовый сервер Windows по умолчанию, если он есть. Я не тестировал эти скрипты...

Ответ 3

Если PowerShell доступен, команда Send-MailMessage - это одна однострочная команда, которая может легко вызывать из командного файла для обработки уведомлений по электронной почте. Ниже приведен пример строки, которую вы включили бы в пакетный файл для вызова PowerShell script (%xVariable% - это переменная, которую вы, возможно, захотите передать из вашего пакетного файла в PowerShell script):

- [ФАЙЛ BATCH] -

:: ...your code here...
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe  -windowstyle hidden -command C:\MyScripts\EmailScript.ps1 %xVariable%

Ниже приведен пример того, что вы можете включить в свой PowerShell script (вы должны включить строку PARAM в качестве первой строки без примечаний в script, если вы включили передачу %xVariable% из вашего пакетного файла:

- [POWERSHELL SCRIPT] -

Param([String]$xVariable)
# ...your code here...
$smtp = "smtp.[emaildomain].com"
$to = "[Send to email address]"
$from = "[From email address]" 
$subject = "[Subject]" 
$body = "[Text you want to include----the <br> is a line feed: <br> <br>]"    
$body += "[This could be a second line of text]" + "<br> "

$attachment="[file name if you would like to include an attachment]"
send-MailMessage -SmtpServer $smtp -To $to -From $from -Subject $subject -Body $body -BodyAsHtml -Attachment $attachment -Priority high  

Ответ 4

Если вы не можете следовать рекомендациям Max по установке Blat (или любой другой утилиты) на вашем сервере, то, возможно, на вашем сервере уже установлено программное обеспечение, которое может отправлять электронные письма.

Я знаю, что как Oracle, так и SqlServer имеют возможность отправлять электронную почту. Возможно, вам придется работать с вашим администратором баз данных, чтобы включить эту функцию и/или получить привилегию использовать ее. Конечно, я вижу, как это может представлять собой собственный набор проблем и бюрократизм. Предполагая, что вы можете получить доступ к этой функции, довольно просто иметь логический вход в базу данных и отправлять почту.

Пакетный файл может легко запускать VBScript через CSCRIPT. Быстрый поиск в Google находит много ссылок, показывающих, как отправлять электронную почту с помощью VBScript. Первым, с которым я столкнулся, был http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/enterprise/mail/. Он выглядит прямо.

Ответ 5

Нет, я использую Windows 10, и все они сказали, что "(команда)" не является (благими бла-бла-бла). Я думал, что это сработает, но неважно!

Ответ 6

$emailSmtpServerPort = "587"
$emailSmtpUser = "username"
$emailSmtpPass = 'password'
$emailMessage = New-Object System.Net.Mail.MailMessage
$emailMessage.From = "[From email address]"
$emailMessage.To.Add( "[Send to email address]" )
$emailMessage.Subject = "Testing e-mail"
$emailMessage.IsBodyHtml = $true
$emailMessage.Body = @"
<p>Here is a message that is <strong>HTML formatted</strong>.</p>
<p>From your friendly neighborhood IT guy</p>
"@
$SMTPClient = New-Object System.Net.Mail.SmtpClient( $emailSmtpServer , $emailSmtpServerPort )
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential( $emailSmtpUser , $emailSmtpPass );
$SMTPClient.Send( $emailMessage )

Ответ 7

Это работает для меня, используя двойные кавычки вокруг переменных.

Я использую пакетный скрипт для вызова powershell Send-MailMessage

Пакетный скрипт: send_email.bat

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe  -command 'E:\path\send_email.ps1

Скрипт Pwershell send_email.ps1

Send-MailMessage -From "[email protected]$env:computername" -To '<[email protected]>' -Subject 'Blah Blah' -SmtpServer  'smtp.domain.com'  -Attachments 'E:\path\file.log' -BODY "Blah Blah on Host: $env:computername "

Ответ 8

Этот форум может помочь мне с моим бесплатным проектом Windows Freestyle Edition 6.5. В текстовом редакторе я сделал часть, в которой после создания файла требуется ввести имя пользователя и пароль, а затем отправляет мне электронное письмо.