Рассылка электронной почты из MS AccessИсточник: sgml
Предлагаемое решение основывается на использование программы blat.exe, способной отправлять письмо с параметрами, получаемыми через командную строку. Данный метод позволяет рассылать почту, не трогая многострадальное registry на Вашем компьютере. Процедура Email() рассылает письма, параметры которых указаны в записях таблицы eLetters:
Для того, чтобы иметь возможность делать рассылки, Вы должны настроить работу программы blat.exe. Для этого скачайте blat.zip (уникальная копия, между прочим! Я связался с одним из авторов - Tim Charron. Он сжалился надо мной и специально для меня перекомпилил программу, дабы она отсылала письма в кодировке KOI8R) и распакуйте его в любой каталог на Вашем диске. Путь к каталогу, в котором находится программа blat.exe, сделайте значением константы PathToBlat и пропишите в параметре PATH файла autoexec.bat. Если у Вас связь с Интернет по модему - установите флажок "Подключаться автоматически" в свойствах броузера. Теперь Вы готовы рассылать письма. Ниже - модуль, позволяющий это осуществлять. Option Compare Database 'Данный модуль рассылает письма, выбирая содержание и реквизиты письма из таблицы eLetters 'Константы, конфигурирующие программу blat.exe 'Таблицы кодировок 'Процерура рассылки писем из таблицы. Главная процедура модуля Dim rst As DAO.Recordset 'Убиваем старый командный файлы On Error Resume Next 'Создаем bat-файл Set rst = CurrentDb.OpenRecordset("SELECT eLetterID FROM eLetters") rst.MoveLast End If strToFile = StringForBat(rst!eLetterID) 'Строка для одного письма Loop Close #n If MsgBox("bat-файл для отсылки писем создан. Толкнуть его на выполнение?", vbQuestion + vbYesNo + vbDefaultButton2, "А это кому-нибудь нужно?") = vbYes Then Call Shell(FileName, vbHide) End Sub Function StringForBat(ByVal eLetterID As Long) As String 'Создается командный файл и запускается 'Выясним параметры письма 'Создаем txt-файл для тела сообщения Open FileName For Output As #n StringForBat = "blat.exe " & chr(34) & FileName & chr(34) & " -t " & Recipient Subject = CODE_TO_CODE(Subject) End If If Not (AttachedFileName = "") Then StringForBat = StringForBat & " -attach " & chr(34) & AttachedFileName & chr(34) End Function 'функция перекодировки Dim i, k As Integer CODE_TO_CODE = "" For i = 1 To Len(Ustr) k = InStr(1, S_Input, Mid(Ustr, i, 1), vbBinaryCompare) Next i End Function |