Отправка сообщения электронной почты через VBScript

  • 17.01.2021
  • 3 622
  • 7
  • 28.09.2022
  • 6
  • 6
  • 0
Отправка сообщения электронной почты через VBScript

Отправка простого письма

В том случае, если требуется отправить письмо по электронной почте, с использованием какого-нибудь скрипта, очень пригодится возможность отправки писем встроенными средствами VBScript. Шаблон такого скрипта выглядит следующим образом:

Set objMessage = CreateObject("CDO.Message")

' Настройки почтового сервера
Set objConfig = objMessage.Configuration
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "[ПАРОЛЬ]"
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "[ЛОГИН]"
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "[АДРЕС SMTP СЕРВЕРА]"
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
objConfig.Fields.Update

' Сообщение
objMessage.Subject = "Проверка"
objMessage.From = """Проверка"" <[АДРЕС ЭЛЕКТРОННОЙ ПОЧТЫ ОТПРАВИТЕЛЯ]>" 
objMessage.To = "[АДРЕС ЭЛЕКТРОННОЙ ПОЧТЫ ПОЛУЧАТЕЛЯ]" 
objMessage.TextBody = "Сообщение для проверки отправки электронной почты через VBScript"

' Отправка сообщения
objMessage.Send

Давайте разберем основные важные параметры конфигурации в данном скрипте (в алфавитном порядке):

  • objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") - пароль от почтового сервера.
  • objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") - логин от почтового сервера.
  • objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") - для отправки через внешний сервер, следует устанавливать значение 2. Значение 1 предназначено для использования с локальным сервером, к примеру Microsoft Exchange или IIS, где настроена служба SMTP.
  • objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") - авторизация на сервере SMTP. Если она не требуется (анонимная отправка), нужно поставить значение 0, в противном случае должно быть значение 1.
  • objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") - адрес сервера SMTP.
  • objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") - порт SMTP сервера. По умолчанию это 25 порт.
  • objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl") - использовать (1) или не использовать (0) защищенное SSL соединение.

Соответственно, установив нужные параметры в данном скрипте, можно спокойно отправлять письма электронной почты через VBScript с использованием внешних почтовых сервисов - к примеру, Яндекс Почты.

Отправка письма с вложениями

Если вы захотите добавить в свое письмо какое-то вложение, то нужно будет добавить параметр objMessage.AddAttachment, в котором следует указать полный путь к отправляемому файлу. Например:

objMessage.AddAttachment "C:\Mail\1.txt"

Как должно быть понятно, здесь мы указываем необходимость вложить в письмо файл по пути C:\Mail\1.txt.

Но что, если требуется отправить несколько файлов в одном письме? В таком случае, нужно повторно использовать все тот же параметр objMessage.AddAttachment, просто задав в нем путь к следующему файлу.

objMessage.AddAttachment "C:\Mail\1.txt"
objMessage.AddAttachment "C:\Mail\2.txt"

В таком случае, полный скрипт будет иметь следующий вид:

Set objMessage = CreateObject("CDO.Message")

' Настройки почтового сервера
Set objConfig = objMessage.Configuration
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "[ПАРОЛЬ]"
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "[ЛОГИН]"
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "[АДРЕС SMTP СЕРВЕРА]"
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
objConfig.Fields.Update

' Сообщение
objMessage.Subject = "Проверка"
objMessage.From = """Проверка"" <[АДРЕС ЭЛЕКТРОННОЙ ПОЧТЫ ОТПРАВИТЕЛЯ]>" 
objMessage.To = "[АДРЕС ЭЛЕКТРОННОЙ ПОЧТЫ ПОЛУЧАТЕЛЯ]" 
objMessage.TextBody = "Сообщение для проверки отправки электронной почты через VBScript"
objMessage.AddAttachment "[ПОЛНЫЙ ПУТЬ К ПЕРВОМУ ФАЙЛУ ВЛОЖЕНИЯ]"
objMessage.AddAttachment "[ПОЛНЫЙ ПУТЬ КО ВТОРОМУ ФАЙЛУ ВЛОЖЕНИЯ]"

' Отправка сообщения
objMessage.Send
Была ли эта статья Вам полезна?

Комментарии к статье (7)

    • Юрий

    Как управлять кодировкой? В Содержании приходят знаки ? вместо русских букв

    • Как я понимаю, это зависит от того, с какой кодировкой вы сохраняете vbs файл. Если с UTF-8, то попробуйте добавить следующую строку:

      objMessage.TextBodyPart.Charset = "utf-8"
    • Аркадий

    Добрый день!
    Скажите, пожалуйста, как задать время отправки письма, если требуется отправить его не сразу.

    • Что конкретно хочется сделать?
      Отправить письмо через определенный промежуток времени, или в какой-то определенный период времени?
      Если первый вариант, то нужно воспользоваться функцией sleep, а для второго случая, полагаю, нужно городить какой-то цикл с проверкой времени.

    • Вячеслав

    Здравствуйте, подскажите, как отправить в письме НЕСКОЛЬКО (для упрощения все) файлов из конкретной папки
    Один файл отправляется без вопросов, а по маске как то можно отправить все файлы указанного места?
    objEmail.AddAttachment("file://e:\temp\pochta\описание")

    • Если нужно отправить буквально все файлы из папки, то просто замените строку/строки с objMessage.AddAttachment из примера в статье, на вот это:

      Set objFSO = CreateObject("Scripting.FileSystemObject")
      Set objFolder = objFSO.GetFolder("[ПУТЬ К ДИРЕКТОРИИ]")
      
      For Each objFile in objFolder.Files
      	objMessage.AddAttachment objFSO.GetAbsolutePathName(objFolder) & "\" & objFile.Name
      Next
    • Мирон

    Здравствуйте! У меня почему то пишется, что сервер not available. Если заходить сюда http://schemas.microsoft.com/cdo/configuration вручную, то будет написано, что Ресурс, который вы ищете, был удален, изменил свое имя или временно недоступен. Я где-то ошибся или что-ь=то перестало работать?

Добавить комментарий для Вячеслав

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Напоминаем Вам, что Ваше сообщение будет опубликовано только после проверки администратором сайта. Обычно это занимает 1-2 рабочих дня.