Отправка электронной почты из программы

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
(Отсылка отчета)
(Содержимое страницы заменено на «Отправить электронную почту из программы можно с помощью встроенных фу…»)
Строка 1: Строка 1:
Организовать отсылку электронной почты из Гедымина проще всего с использованием [http://en.wikipedia.org/wiki/Collaboration_Data_Objects Collaboration Data Objects (CDO)].
+
Отправить электронную почту из программы можно с помощью встроенных функций платформы или используя внешние COM-объекты. Последний случай рассмотрен отдельно, см. [[Отправка электронной почты с использованием Collaboration Data Objects (CDO)]].
  
===Пример отсылки простого сообщения===
 
  
<syntaxhighlight lang="vbnet">
 
Option Explicit
 
Sub SendEmail
 
  ''''''''''''''''''''''''''''''''''''''''''''
 
  ' Объявляем переменную и создаем объект
 
  ' для работы с электронной почтой
 
  Dim objMessage
 
  Set objMessage = CreateObject("CDO.Message")
 
 
 
  ''''''''''''''''''''''''''''''''''''''''''''
 
  ' Заполняем поля сообщения
 
 
 
  ' Заголовок сообщения
 
  objMessage.Subject = "Привет от Гедымина!"
 
 
 
  ' Обратный адрес. Не забудьте указать свой!
 
  objMessage.From = "xxxx@yyyy.by"
 
 
 
  ' Кому посылаем. Пропишите тут правильный адрес!
 
  objMessage.To = "xxxx@yyyy.by"
 
 
 
  ' Текст сообщения
 
  objMessage.TextBody = "Это сообщение отослано из макроса."
 
 
 
  ''''''''''''''''''''''''''''''''''''''''''''
 
  ' Указываем параметры почтового сервера
 
  ' Если они Вам неизвестны -- проконсультируйтесь
 
  ' у своего провайдера.
 
  objMessage.Configuration.Fields.Item _
 
    ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
 
   
 
  ' Адрес SMTP servera
 
  objMessage.Configuration.Fields.Item _
 
    ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "yyyy.by"
 
  objMessage.Configuration.Fields.Item _
 
    ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
 
 
  ' Имя пользователя. Укажите правильную информацию!
 
  objMessage.Configuration.Fields.Item _
 
    ("http://schemas.microsoft.com/cdo/configuration/sendusername") = "user"
 
  ' Пароль
 
  objMessage.Configuration.Fields.Item _
 
    ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password"
 
  ' Номер порта. Если в Вашей сети используется брэндмаур,
 
  ' убедитесь, что соответствующий порт открыт!
 
  objMessage.Configuration.Fields.Item _
 
    ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
 
  objMessage.Configuration.Fields.Item _
 
    ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
 
  objMessage.Configuration.Fields.Item _
 
    ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
 
  objMessage.Configuration.Fields.Update
 
 
 
  ''''''''''''''''''''''''''''''''''''''''''''
 
  ' Посылаем сообщение
 
  objMessage.Send
 
End Sub
 
</syntaxhighlight>
 
 
Вам наверняка захочется поэксперементировать с приведенным здесь кодом и отослать несколько тестовых сообщений на один и тот же адрес. Будьте внимательны, так как почтовая система может трактовать такую рассылку как вредный спам и поместить ваши послания в соответствующую папку.
 
 
===Автоматическое построение и отсылка отчета===
 
 
Ниже приводится пример макроса, предложенный [http://code.google.com/u/nkornachenko/ nkornachenko], который строит отчет, сохраняет его в PDF файле и отсылает на указанный адрес электронной почты.
 
 
<syntaxhighlight lang="vbnet">
 
  ...
 
  Dim B(2)
 
  Set B(0) = OwnerForm
 
  B(1) = Date
 
  B(2) = Array(CarType)
 
 
  Dim FileName, objMessage, WScript 
 
  FileName = ...
 
 
  Call System.ReportSystem.ExportReportWithParam(<id отчета>, B, FileName , "PDF")
 
  Set WScript = CreateObject("WScript.Shell")
 
  Call WScript.Run("ping localhost", 1, True)  'Это пауза, потому что отчет не успевает
 
  Call WScript.Run("ping localhost", 1, True)  'построиться до отправки так как строится в отдельном потоке
 
  'WScript.Sleep 5000 'Пауза, чтобы отчет успел построиться
 
 
  Set objMessage = CreateObject("CDO.Message")
 
  objMessage.Subject = "Тема письма"
 
  objMessage.From = "xxxxx@yyyy.by"
 
  objMessage.To = "xxxxx@yyyy.by"
 
  objMessage.TextBody = "Текст письма"
 
  objMessage.Configuration.Fields.Item _
 
    ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
 
  objMessage.Configuration.Fields.Item _
 
    ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "xxx.xxx.xxx.xxx" 'Адрес SMTP servera
 
  objMessage.Configuration.Fields.Item _
 
    ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
 
  objMessage.Configuration.Fields.Item _
 
    ("http://schemas.microsoft.com/cdo/configuration/sendusername") = "xxxxx" 'Имя пользователя
 
  objMessage.Configuration.Fields.Item _
 
    ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "yyyyy" 'Пароль
 
  objMessage.Configuration.Fields.Item _
 
    ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
 
  objMessage.Configuration.Fields.Item _
 
    ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
 
  objMessage.Configuration.Fields.Item _
 
    ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
 
 
  If FileName > "" Then
 
    objMessage.MimeFormatted = True
 
    objMessage.AddAttachment("file:" & FileName)
 
  End if
 
 
  objMessage.Configuration.Fields.Update
 
 
  objMessage.Send
 
  ...
 
</syntaxhighlight>
 
 
==См. также==
 
 
* [http://www.paulsadowski.com/wsh/cdo.htm Send Email Using CDO]
 
  
 
[[Category:Школа системного администратора]]
 
[[Category:Школа системного администратора]]

Версия 08:32, 17 августа 2015

Отправить электронную почту из программы можно с помощью встроенных функций платформы или используя внешние COM-объекты. Последний случай рассмотрен отдельно, см. Отправка электронной почты с использованием Collaboration Data Objects (CDO).

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты