Как отправить простое электронное письмо из пакетного файла Windows?
Я использую Windows 2003 Service Pack 2. У меня есть командный файл, который запускается по требованию. Я хочу, чтобы электронная почта отправлялась каждый раз, когда запускается пакетный файл. Письмо простое, просто предложение, указывающее, что пакетный файл запущен; это то же самое каждый раз.
Я попробовал пару вещей, чтобы сделать это. Я думал о telnet, но не могу понять, как перенаправить набор команд в telnet; Пакетные файлы Windows не имеют Unix-стиля "здесь документ" и вызова "telnet <scriptfile"
где скрипт-файл содержит команды для отправки электронной почты не работает. Я также нашел пару решений в Интернете, использующих CDO.Message, но я никогда не использовал это раньше, и я продолжал получать сообщения об ошибках, которые я не понимаю.
Как я могу отправить простое электронное письмо из пакетного файла Windows?
8 ответов
Макс идет по правильному пути с предложением использовать Windows Scripting как способ сделать это без установки каких-либо дополнительных исполняемых файлов на машину. Его код будет работать, если у вас настроена служба IIS SMTP для пересылки исходящей электронной почты с использованием параметра "промежуточный узел" или на компьютере также работает Microsoft Exchange. В противном случае, если это не настроено, ваши письма будут просто накапливаться в папке очереди сообщений (\inetpub\mailroot\queue). Поэтому, если вы не можете настроить эту службу, вы также захотите указать почтовый сервер, который вы хотите использовать для отправки сообщения. Чтобы сделать это, вы можете сделать что-то вроде этого в вашем файле сценария Windows:
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 = "your@address.com"
objMail.To = "destination@address.com"
objMail.Subject = "Email Subject Text"
objMail.TextBody = "The message of the email..."
objMail.Send
Set objFlds = Nothing
Set objConf = Nothing
Set objMail = Nothing
Я использовал Blat ( http://www.blat.net/) в течение многих лет. Это простая утилита командной строки, которая может отправлять электронную почту из командной строки. Это бесплатно и с открытым исходным кодом.
Вы можете использовать команду типа "Blat myfile.txt -to fee@fi.com -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, а также ссылку на некоторые из упомянутых программ.
Следующий код VBScript взят с этой страницы
Set objEmail = CreateObject("CDO.Message")
objEmail.From = "me@mydomain.com"
objEmail.To = "you@yourdomain.com"
objEmail.Subject = "Server is down!"
objEmail.Textbody = "Server100 is no longer accessible over the network."
objEmail.Send
Сохраните файл как что-то. VBS
Set Msg = CreateObject("CDO.Message")
With Msg
.To = "you@yourdomain.com"
.From = "me@mydomain.com"
.Subject = "Hello"
.TextBody = "Just wanted to say hi."
.Send
End With
Сохраните файл как что-то2.vbs
Я думаю, что эти сценарии VBS используют почтовый сервер Windows по умолчанию, если он присутствует. Я не проверял эти сценарии...
Если PowerShell доступен, командлет Send-MailMessage представляет собой однострочную команду, которую можно легко вызвать из пакетного файла для обработки уведомлений по электронной почте. Ниже приведен пример строки, которую вы бы включили в свой пакетный файл для вызова скрипта PowerShell (%xVariable%
переменная, которую вы, возможно, захотите передать из командного файла в сценарий PowerShell):
- [Пакетный файл]-
:: ...your code here...
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden -command C:\MyScripts\EmailScript.ps1 %xVariable%
Ниже приведен пример того, что вы можете включить в свой скрипт PowerShell (вы должны включить строку PARAM в качестве первой строки без примечаний в вашем скрипте, если вы включили передачу %xVariable%
из вашего пакетного файла:
- [СКРИПТ ПОЛОЖЕНИЯ]-
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
Я боролся с той же проблемой и, наконец, нашел простую душу. Я знаю, что опаздываю с ответом на этот вопрос. Но все же пишу, если это может помочь кому-то вроде меня, ищущему это.
Вы можете отправлять простую почту, используя скрипт Powershell. Обязательно подключите это в своем bat-файле
$Outlook = New-Object -ComObject Outlook.Application
$Mail = $Outlook.CreateItem(0)
$Mail.To = "hi@company.com"
$Mail.Subject = "hello"
$Mail.Body ="Hello. I am here to wish you"
$Mail.Send()
Используя это, вам не нужно использовать какие-либо сторонние приложения или устанавливать что-либо дополнительное. Ему просто нужен Outlook. Я надеюсь, что это будет уже во многих офисных аккаунтах. Этот пост помог мне отправить электронную почту с помощью powershell
$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 )
У меня это работает с использованием двойных кавычек вокруг переменных.
Я использую пакетный скрипт для вызова 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 "noreply@$env:computername" -To '<target_email@example.com>' -Subject 'Blah Blah' -SmtpServer 'smtp.domain.com' -Attachments 'E:\path\file.log' -BODY "Blah Blah on Host: $env:computername "
Если вы не можете следовать предложению Макса об установке Blat (или любой другой утилиты) на вашем сервере, то, возможно, на вашем сервере уже установлено программное обеспечение, которое может отправлять электронные письма.
Я знаю, что и Oracle, и SqlServer имеют возможность отправлять электронную почту. Возможно, вам придется работать с вашим администратором базы данных, чтобы включить эту функцию и / или получить привилегию для ее использования. Конечно, я вижу, как это может представлять свой собственный набор проблем и волокиту. Предполагая, что вы можете получить доступ к этой функции, достаточно просто зарегистрировать пакетный файл в базе данных и отправить почту.
Пакетный файл может легко запустить VBScript через CSCRIPT. Быстрый поиск в Google находит много ссылок, показывающих, как отправлять электронную почту с помощью VBScript. Первый, на который я случайно наткнулся, был http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/enterprise/mail/. Это выглядит прямо вперед.
Я боролся с той же проблемой и, наконец, нашел простую душу. Я знаю, что это устаревший пост. Но все же пишу, если это может помочь кому-то вроде меня, кто ищет это.
Вы можете отправлять простую почту, используя скрипт Powershell. Обязательно подключите это в своем bat-файле
$Outlook = New-Object -ComObject Outlook.Application
$Mail = $Outlook.CreateItem(0)
$Mail.To = "hi@company.com"
$Mail.Subject = "hello"
$Mail.Body ="Hello. I am here to wish you"
$Mail.Send()
Этот пост помог мне отправить электронную почту с помощью powershell