Отправка электронной почты из программы
Материал из GedeminWiki
(Различия между версиями)
SYSDBA (обсуждение | вклад) |
SYSDBA (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
| + | Организовать отсылку электронной почты из Гедымина проще всего с использованием [http://en.wikipedia.org/wiki/Collaboration_Data_Objects 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 файле и отсылает на указанный адрес электронной почты. | Ниже приводится пример макроса, предложенный [http://code.google.com/u/nkornachenko/ nkornachenko], который строит отчет, сохраняет его в PDF файле и отсылает на указанный адрес электронной почты. | ||
| Строка 38: | Строка 105: | ||
objMessage.Configuration.Fields.Item _ | objMessage.Configuration.Fields.Item _ | ||
("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 | ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 | ||
| + | |||
If FileName > "" Then | If FileName > "" Then | ||
objMessage.MimeFormatted = True | objMessage.MimeFormatted = True | ||
objMessage.AddAttachment("file:" & FileName) | objMessage.AddAttachment("file:" & FileName) | ||
End if | End if | ||
| + | |||
objMessage.Configuration.Fields.Update | objMessage.Configuration.Fields.Update | ||
| + | |||
objMessage.Send | objMessage.Send | ||
... | ... | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| + | |||
| + | ==См. также== | ||
| + | |||
| + | * [http://www.paulsadowski.com/wsh/cdo.htm Send Email Using CDO] | ||
[[Category:Школа системного администратора]] | [[Category:Школа системного администратора]] | ||
Версия 11:04, 31 октября 2011
Организовать отсылку электронной почты из Гедымина проще всего с использованием Collaboration Data Objects (CDO).
Пример отсылки простого сообщения
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
Вам наверняка захочется поэксперементировать с приведенным здесь кодом и отослать несколько тестовых сообщений на один и тот же адрес. Будьте внимательны, так как почтовая система может трактовать такую рассылку как вредный спам и поместить ваши послания в соответствующую папку.
Отсылка отчета
Ниже приводится пример макроса, предложенный nkornachenko, который строит отчет, сохраняет его в PDF файле и отсылает на указанный адрес электронной почты.
... 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 ...