Отправка почты из скрипта Windows

Я хотел бы отправить почту из сценария на Windows Server 2003 Standard Edition. Я думаю, что настройка сервера в значительной степени из коробки.

почтовый сервер является Exchange, и когда вы находитесь во внутренней сети, вы можете использовать простой старый SMTP. Я сделал это с моей машины с Perl, но, к сожалению, Perl недоступен на сервере.

есть простой способ сделать это .bat-файл или любой другой способ, который не требует установки некоторых дополнительное программное обеспечение?

Edit:
Спасибо за быстрые ответы. "Blat" thingie, вероятно, будет работать нормально, но с wscript мне не нужно использовать отдельный двоичный файл.

Я не видел пост PhiLho в первый раз я отредактировал и выбрал ответ. Мне не нужно дублировать код.

просто сохраните скрипт в файл, скажем sendmail.vbs, а затем вызовите его из командной строки следующим образом:
wscript sendmail.vbs

7 ответов


это возможно с помощью Wscript, используя CDO:

Dim objMail

Set objMail = CreateObject("CDO.Message")

objMail.From = "Me <Me@Server.com>"
objMail.To = "You <You@AnotherServer.com>"
objMail.Subject = "That's a mail"
objMail.Textbody = "Hello World"
objMail.AddAttachment "C:\someFile.ext"

---8<----- You don't need this part if you have an active Outlook [Express] account -----
' Use an SMTP server
objMail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

' Name or IP of Remote SMTP Server
objMail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
    "smtp.server.com"

' Server port (typically 25)
objMail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25

objMail.Configuration.Fields.Update
----- End of SMTP usage ----->8---

objMail.Send

Set objMail=Nothing
Wscript.Quit

Update: нашел больше информации там:VBScript для отправки электронной почты с помощью CDO По умолчанию он использует Outlook [Express], поэтому он не работал на моем компьютере, но вы можете использовать данный SMTP-сервер, который отлично работал для меня.


Я не знаю, сбрасывает ли двоичный файл рядом с ним .файл bat считается установкой программного обеспечения, но если нет, вы можете использовать блат для этого.


Если на сервере (я понимаю, сколько лет этому вопросу) установлен Powershell v2, командлет Send-MailMessage сделает это в одной строке.

Send-MailMessage [-To] <string[]> [-Subject] <string> -From <string> [[-Body] <string>] [[-SmtpServer] <string>] [-Attachments <string[]>] [-Bcc <string[]>] [-BodyAsHtml] [-Cc <string[]>] [-Credential <PSCredential>] [-DeliveryNotficationOption {None | OnSuccess | OnFailure | Delay | Never}] [-Encoding <Encoding>] [-Priority {Normal | Low | High}] [-UseSsl] [<CommonParameters>]

Если у вас установлен outlook / exchange, вы должны иметь возможность использовать CDONTs, просто создайте почту.VBS-файл и назовите его в пакетном файле так (забавно, что они находятся в одном каталоге)

wscript mail.vbs

для кода VBScript проверьте

http://support.microsoft.com/kb/197920

http://www.w3schools.com/asp/asp_send_email.asp

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


Я думаю, что вам придется установить какой-либо ActiveX или другой компонент, который может быть вызван из WScript, например: http://www.activexperts.com/ActivEmail/ и: http://www.emailarchitect.net/webapp/SMTPCOM/developers/scripting.asp

в противном случае вам придется написать всю логику SMTP (если возможно, не уверен) в WScript все самостоятельно.


используйте CDONTS с хостом сценариев Windows (WScript)


есть ли способ отправить без ссылки на внешние URL-адреса, схемы. http://schemas.microsoft.com/cdo/configuration/

Это очень бесполезно, поскольку нельзя предположить, что все ящики будут иметь внешний доступ к интернету для отправки почты внутри локального обмена. Есть ли способ сохранить информацию из этих URL-адресов локально?