Скрипт для отправки сообщения по электронной почте

Иногда бывает удобно получать на электронную почту результаты выполнения скриптов или ПО, чтобы контролировать их работу. В этом случае можно использовать следующий скрипт sendmail.vbs:

Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Test Subject"
objMessage.Sender = "script@domain.com"
objMessage.To = "admin@domain.com"
objMessage.TextBody = "Test Body"
objMessage.AddAttachment "c:\attachment.txt"
'==This section provides the configuration information for the remote SMTP server.
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2'Name or IP of Remote SMTP Server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.domain.com"'Server SMTP port (typically 25)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMessage.Configuration.Fields.Update
objMessage.Send

Скачать sendmail.zip

Пожалуйста, оцените статью:
(всего оценок: 6, средняя: 3,67 из 5)
  • Игорь

    Так и не смог разобраться, как это работает, подставлял в выделенные жирным шрифтом свои данные, но так ничего и не получилось отправить ((

  • Игорь

    Ну вот примерно так у меня получилось, никак не пойму где и что не так указал ((

    Set objMessage = CreateObject(«CDO.Message»)
    objMessage.Subject = «Test Subject»
    objMessage.Sender = «agent-korz@rambler.ru»
    objMessage.To = «agent-korz@rambler.ru»
    objMessage.TextBody = «Test Body»
    objMessage.AddAttachment «c:\attachment.txt»

    ‘==This section provides the configuration information for the remote SMTP server.
    objMessage.Configuration.Fields.Item _
    («http://schemas.microsoft.com/cdo/configuration/sendusing») = 2

    ‘Name or IP of Remote SMTP Server
    objMessage.Configuration.Fields.Item _
    («http://schemas.microsoft.com/cdo/configuration/smtpserver») = «mail.rambler.ru»

    ‘Server port (typically 25)
    objMessage.Configuration.Fields.Item _
    («http://schemas.microsoft.com/cdo/configuration/smtpserverport») = 25
    objMessage.Configuration.Fields.Update

    objMessage.Send

    • Скорее всего проблема в том, что Рамблер требует авторизации для отправки почты. В текущем виде скрипт авторизацию не поддерживает.
      Возможно проблему можно решить (не проверял) добавив следующие строки перед objMessage.Send:

      objMessage.Configuration.Fields.Item _
      («http://schemas.microsoft.com/cdo/configuration/smtpauthenticate») = 1
      objMessage.Configuration.Fields.Item _
      («http://schemas.microsoft.com/cdo/configuration/sendusername») = "имя_пользователя"
      objMessage.Configuration.Fields.Item _
      («http://schemas.microsoft.com/cdo/configuration/sendpassword») = "пароль"

  • Игорь

    Эх, ну ничего не получается. Совсем. ((
    Пробовал и с яндекс почтой и с мейл.ру ну не отправляется и всё! ((
    Буду очень Вам признателен, если подскажите, где, то есть на каком почтовом сервере нужно зарегистрироваться, чтобы данный скрипт работал без проблем. Спасибо :)

    • Только что проверил отправку через smtp.yandex.by с авторизацией (см. предыдущий комментарий). Все работает.

  • Рамиль

    Александр, а будет ли работать скрипт если smtp использует SSL ? если да, то подскажите пожалуйста какие параметры вставить?

    • Чтобы использовать SSL, надо добавить:
      objMessage.Configuration.Fields.Item _
      («http://schemas.microsoft.com/cdo/configuration/smtpusessl») = True

  • Рамиль

    Александр, спасибо

  • Алексей

    Здравствуйте Александр! Буду признателен за помощь. У меня есть скрипт для отправки писем, работал через mail.ru, но в связи с введением ими SSL, скрипт перестал работать((( Пробовал вставить

    objMessage.Configuration.Fields.Item _
    («http://schemas.microsoft.com/cdo/configuration/smtpusessl») = True

    но так как у меня все по другому, не знаю куда((( Я в этом деле не понимаю (скрипт достался от случайно).
    Если не затруднит, подскажите…
    Вот сам скрипт:

    option explicit
    ‘————————————————
    const SMTP_Subj = «Molochniy_Flash» ‘Название фирмы
    const Cons_Path = «..\Consultant» ‘Путь к папке Консультант+
    const STTf_Path = «..\Consultant\CONS.CFG» ‘Путь к файлам STT
    const USRf_Path = «..\Consultant\RECEIVE» ‘Путь к файлам USR
    ‘————————————————
    dim fso, fn, f, ff(), cnt, WshShell, Response
    Set WshShell = CreateObject(«WScript.Shell»)
    set fso=createobject(«Scripting.FileSystemObject»)
    WshShell.CurrentDirectory = Cons_Path
    ‘————————————————

    ‘————————————————
    WshShell.Run «Cons.exe /adm /base* /receive_inet /yes /localtmp», 2, true ‘delete /localtmp
    ‘————————————————
    WshShell.Run «Cons.exe /usr», 2, true
    ‘————————————————
    WshShell.run «zISS.DAT\pkcb.exe a -y -r -ep -ibck zISS.DAT\» & SMTP_Subj & «.zip » & STTf_Path & «\*.stt», 2, true
    WshShell.run «zISS.DAT\pkcb.exe a -y -r -ep -ibck zISS.DAT\» & SMTP_Subj & «.zip » & USRf_Path & «\*.usr», 2, true
    ‘————————————————
    const SMTP_Host = «smtp.mail.ru»
    const SMTP_Port = 2525
    const SMTP_From = «почта@mail.ru»
    const SMTP_Text = «Файлы USR STT»
    const SSAP_INDX = «пароль»
    const SMTP_ToPP = «почта@mail.ru»
    const cdoSendUsingPort = 2 ‘
    ‘————————————————
    fn= fso.buildpath(Cons_Path, «zISS.DAT»)
    Set f = fso.GetFolder(fn).Files
    for each fn in f
    if lcase(fso.getextensionname(fn))=»zip» then
    AddToArray fn, ff, cnt
    end if
    next
    ‘————————————————
    SendMessage SMTP_ToPP, SMTP_Subj, SMTP_Text, ff

    ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    sub SendMessage(Recipient, Subj, Text, Attachments)
    dim msg,fn
    set msg = WScript.CreateObject(«CDO.Message»)
    with msg
    .BodyPart.charset = «KOI8-R»
    .From = SMTP_From
    .To = Recipient
    .Subject = Subj
    .TextBody = text
    .Configuration.Fields(«http://schemas.microsoft.com/cdo/configuration/smtpserver») = SMTP_Host
    .Configuration.Fields(«http://schemas.microsoft.com/cdo/configuration/smtpserverport») = SMTP_Port
    .Configuration.Fields(«http://schemas.microsoft.com/cdo/configuration/smtpauthenticate») = 1 ‘моя
    .Configuration.Fields(«http://schemas.microsoft.com/cdo/configuration/sendusername») = SMTP_From ‘моя
    .Configuration.Fields(«http://schemas.microsoft.com/cdo/configuration/sendpassword») = SSAP_INDX ‘моя
    .Configuration.Fields(«http://schemas.microsoft.com/cdo/configuration/sendusing») = cdoSendUsingPort
    .Configuration.Fields.Update
    .MimeFormatted = true
    for each fn in attachments
    .addattachment fn
    next
    .Send
    end with
    end sub
    ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    sub AddToArray(Itm, Arr, Count)
    Count = Count + 1
    ReDim Preserve Arr(Count-1)
    Arr(Count-1) = Itm
    end sub
    ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Очень нужен по работе

    • Здравствуйте, Алексей!
      Вам надо добавить строку:

      .Configuration.Fields(«http://schemas.microsoft.com/cdo/configuration/smtpusessl») = True

      между .TextBody = text и Configuration.Fields.Update.

  • Алексей

    Спасибо огромное, ошибка исчезла, но теперь другая : Транспорту не удалось подключиться к серверу. Код: 80070213.

  • Алексей

    Разобрался, надо было порт поменять! Спасибо!!!

  • Александр

    Здравствуйте!
    Можете подсказать, что не так с моим скриптом? Он должен отправлять письмо с ящика на mail.ru на gmail.

    Set objMessage = CreateObject(«CDO.Message»)
    objMessage.Subject = «Test Subject»
    objMessage.Sender = «отправитель»
    objMessage.To = «получатель»
    objMessage.TextBody = «Test Body»

    objMessage.Configuration.Fields.Item _
    («http://schemas.microsoft.com/cdo/configuration/smtpusessl») = True

    objMessage.Configuration.Fields.Item _
    («http://schemas.microsoft.com/cdo/configuration/sendusing») = 2

    objMessage.Configuration.Fields.Item _
    («http://schemas.microsoft.com/cdo/configuration/smtpserver») = «smtp.mail.ru»

    objMessage.Configuration.Fields.Item _
    («http://schemas.microsoft.com/cdo/configuration/smtpserverport») = 465
    objMessage.Configuration.Fields.Update

    objMessage.Configuration.Fields.Item _
    («http://schemas.microsoft.com/cdo/configuration/smtpauthenticate») = 1
    objMessage.Configuration.Fields.Item _
    («http://schemas.microsoft.com/cdo/configuration/sendusername») = «мыло»
    objMessage.Configuration.Fields.Item _
    («http://schemas.microsoft.com/cdo/configuration/sendpassword») = «пароль»

    objMessage.Send

    Выдает ошибку, что authozisation requiered. но ведь у меня прописаны логин и пароль

    • Александр, вам надо выполнять objMessage.Configuration.Fields.Update после установки параметров авторизации. Перенесите эту строку перед objMessage.Send.

      • Александр

        Спасибо, это помогло! А не подскажете, где можно почитать гайды по созданию подобных скриптов? А то я поступил просто — нашел код на каком-то форуме и стал проверять, работает или нет.

        • Пожалуйста, Александр!

          К сожалению, не могу подсказать ничего конкретного. Просто почитайте про PS, VBS и т.д. Если есть минимальные навыки программирования — разберётесь без проблем.

  • Александр

    Можно еще вопрос? А то поторопился я сказать, что все работает.

    Поменял в скрипте адрес отправителя (тоже на мейл.ру) и поменял его входящие логин и пароль. Теперь при запуске скрипт выдает отклик сервера: not available. В чем может быть причина? smtp сервер ведь тот же?

    • Если с одним адресом отправителя работает, а с другим на этом же сервере — нет, посмотрите, возможно, вы просто где-то допустили опечатку. Чудес не бывает, здесь явно проблема не со скриптом.

      • Александр

        Знаете, я предполагаю, что у новосозданных емейлов есть некая защита от спама, что должно пройти какое-то время, прежде чем их можно будет использовать в данном ключе. Было бы логично.

        А вы не знаете, как можно организовать отправку сразу на несколько емейлов? Просто добавить несколько новых строк objMessage.To = «получатель» ?

  • Александр

    Спасибо, вы мне очень помогли!

  • Александр

    Здравствуйте!
    Можете подсказать, как сделать чтобы при получении письма отображалось корректно имя from на русском, а не
    «=?koi8-r?B?weXr/OTl5eIgxOzo8vDo6Q?
    Текст письма при этом нормальный.

    • Здравствуйте, Александр!
      Попробуйте установить кодовую страницу следующим образом:

      objMessage.Configuration.Fields.Item _
      («http://schemas.microsoft.com/cdo/configuration/languagecode») = 1049
      objMessage.BodyPart.CharSet = «windows-1251»
      objMessage.Configuration.Fields.Item _
      («http://schemas.microsoft.com/cdo/configuration/usemessageresponsetext») = true