Kushavin's blog

Обзоры, статьи и руководства по Windows и Linux системам

Отправка почты из MS Excel с помощью VBA

На любом предприятии возникает необходимость автоматизировать то или иное рутинное действие. Так как большинство предприятий работает с программной платформой от Microsoft, то и автоматизировать приходится в Visual Basic (MS Office). Сегодня мне пришлось решать одну очень интересную задачу, а именно – организовать рассылку данных из таблицы Excel по e-mail. Сам скрипт был не сложным, но пришлось повозится с процедурой отправки. Ниже я привожу простой пример отправки e-mail силами VBA.

Итак, есть два способа отправить e-mail, но я воспользовался самым простым. Для этого нам нужно подключить к проекту библиотеку ADO, делается это следующим образом: заходим в меню tools, затем References и выбираем Microsoft ADO(всё это в редакторе макросов).

Код для отправки сообщения выглядит так:

Sub send_mail_CDO()
Dim MSG As New CDO.Message
MSG.to = “user@corp.net” ‘-> адрес получателя
MSG.From = “boss@corp.net” ‘-> от кого
MSG.Subject = “С днём рождения” ‘-> Тема
MSG.textbody = “С днём рождения, желаю счастья и здоровья” ‘->тело письма
MSG.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/sendusing”) = 2 ‘->тип отправки, в данном случае SMTP
MSG.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpserver”) = “smtp.corp.net” ‘->Адрес SMTP Сервера
MSG.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpauthenticate”) = “1″ ‘->Способ аунтификации (0 – нет, 1 – простой, 2 – NTLM аунтификация)
MSG.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/sendusername”) = “boss” ‘->имя пользователя
MSG.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/sendpassword”) = “123qwe” ‘->пароль пользователя
MSG.Configuration.Fields.Item(“urn:schemas:mailheader:content-language”) = “windows-1251″ ‘->кодировка
MSG.Send ‘-> команда отправить
End Sub

Слегка модифицировав этот код, я поместил его в цикл и организовал отправку уникального, для каждого из 60-ти получатей, сообщения.

Данный пример актуален для MS Office 2003.

P.S.

Пример с днём рождения взят для наглядности, с помошью этого метода можно решить много других проблем.

Раскажи



Ещё интересные материалы:

Самые обсуждаемые статьи:


  • Прошиваем МФУ Sumsung SCX 4824 FN - 112 comments
  • Asus K40AB - маленький монстр - 64 comments
  • Как выбрать ноутбук? Или как купить ноутбук правильно? - 19 comments
  • Обзор Microsoft Security Essentials - 18 comments
  • Установка BackTrack 4 на USB брелок - 17 comments

  • Отзывов: 8, Отзывы или Пинг

    1. norov1

      //Антиспам
      Ваш и многие другие коды выдают одну и туже ошибку:
      “Run-time error ‘-2147220960 (80040220)’
      Automation error”

      09 Сен 2009

    2. Понятия не имею, почему один и тот же код на разных машинах работает по разному, видимо это косяк MS. Я тоже заметил такую ошибку, но она появилась только на одном ПК с 2007 офисом. Я обошёл её, отправляя почту через outlook. Делается это так:

      Dim oOutlook As New Outlook.Application
      Dim oMessage As Outlook.MailItem
      Set oMessage = oOutlook.createitem(oMailItem)
      oMessage.To = your@mail.ru
      oMessage.Subject = “Тема письма”
      oMessage.Body = “текст письма”
      oMessage.Send

      Правда есть одно НО – при отправке таким образом, Винда будет спрашивать на это разрешение.

      09 Сен 2009

    3. Дмитрий

      А можно с помощью данного скрипта отправить заданный диапазон ячеек? интересуют разные варианты отправки, т.е. вложенным xls файлом, html файлом

      24 Фев 2010

    4. Всё можно :)
      Это не скрипт, это даже не часть скрипта, это просто пример VBA кода

      24 Фев 2010

    5. Дмитрий

      Если не сложно, можно показать, как это реализовать. Сколько не бился, не могу разобраться с VBA :( ((

      24 Фев 2010

    6. oMessage.Body = Mail_body
      Где Mail_body переменная, до этого приравниваешь её к нужным ячейкам или добавляешь текст, например:
      mail_body = “Добрый день, ” + Worksheets(“имена”).Cells(10.1).Value
      Вот и всё, с HTML нужно дополнительно разбираться.

      Диапазон обычно не нужно отправлять, из ячеек, чаще всего требуется создать текст, это делается как я описал – переменная=текст+ячейка+текст+ячейка и т.п.
      Chr$(10) – символ перевода строки (Новая строка).

      24 Фев 2010

    7. Сергей

      “Ваш и многие другие коды выдают одну и туже ошибку:
      “Run-time error ‘-2147220960 (80040220)’
      Automation error””

      данная ошибка может возникать из-за того что подключена лишняя библиотека точно какая не помню

      01 Июнь 2010

    8. Пётр

      Проблема с “Run-time error ‘-2147220960 (80040220)’ решается элементарно: нужно перед MSG.send добавить строку
      MSG.Configuration.Fields.Update и при необходимости правильно указать смтп порт (MSG.Configuration.Fields.Item(“http://schemas.microsoft.com/cdo/configuration/smtpserverport”) = Порт)

      18 Июнь 2010

    Отзыв на “Отправка почты из MS Excel с помощью VBA”


    3 × = пятнадцать

    Rambler's Top100