Розсилка електронної пошти з MS Access, MS Office, Програмні керівництва, статті

Пропоноване рішення грунтується на використання програми blat.exe, Здатної відправляти лист з параметрами, які отримуються через командний рядок. Даний метод дозволяє розсилати пошту, не чіпаючи багатостраждальне registry на Вашому комп’ютері.

Процедура Email() розсилає листи, параметри яких вказані в записах таблиці eLetters:

































Ім’я поля


Тип даних


Опис


eLetterID


Лічильник


 


Recipient


Текстовий


Адреса одержувача


CopyTO


Текстовий


Адреса для надсилання копії


Subject


Текстовий


Тема листа


Body


Поле MEMO


Текст листа


AttachedFileName


Текстовий


Повне ім’я приєднаного файлу


Для того, щоб мати можливість робити розсилки, Ви повинні налаштувати роботу програми blat.exe. Для цього скачайте blat.zip (Унікальна копія, між іншим! Я зв’язався з одним із авторів – Tim Charron. Він зглянувся наді мною і спеціально для мене перекомпіліл програму, щоб вона відсилала листа в кодуванні KOI8R) і розпакуйте його в будь-який каталог на Вашому диску. Шлях до каталогу, в якому знаходиться програма blat.exe, Зробіть значенням константи PathToBlat і пропишіть в параметрі PATH файлу autoexec.bat.


Якщо у Вас зв’язок з Інтернет по модему – встановіть прапорець “Підключатися автоматично” у властивостях броузера.


Тепер Ви готові розсилати листи. Нижче – модуль, що дозволяє це здійснювати.


Option Compare Database
Option Explicit


“Даний модуль розсилає листи, вибираючи зміст та реквізити листа з таблиці eLetters
“Основна процедура – Email () Вона формує файл sendmail.bat і при підтвердженні користувача запускає його
“(С) 2001 Максименко Юрій


“Константи, конфігурують програму blat.exe
Public Const PathToBlat As String = “C:Blat”
Public Const PathToEmailFile As String = “C:mail”
Public Const ServerName As String = “ІмяПочтовогоСервера”
Public Const UserName As String = “Логін”


“Таблиці кодувань
Public Const S_WIN =
Public Const S_KOI8R =
Public Const S_DOS866 = “ЂЃ, ѓ” … р † ‡? ‰ Љ “ЊЌЋЏђ” “” “• – ™ њ” љќћџ ЎўЈ ¤ Ґс | § Е © Є “¬ ® Їабвгдежзіймлкноп”
Public Const S_ISO88595 =


“Процерура розсилки листів з таблиці. Головна процедура модуля
Sub Email()


Dim rst As DAO.Recordset
Dim n As Long
Dim strToFile, FileName As String


“Убиваємо старий командний файли


On Error Resume Next
  Kill (PathToBlat & “sendmail.bat”)
  Kill PathToEmailFile & “Body*.txt”
On Error Goto 0


“Створюємо bat-файл
n = FreeFile
FileName = PathToBlat & “sendmail.bat”
n = FreeFile
Open FileName For Output As #n
strToFile = “blat.exe -install ” & ServerName & ” ” & UserName & vbCrLf
Print #n, , strToFile


Set rst = CurrentDb.OpenRecordset(“SELECT eLetterID FROM eLetters”)
If Not rst.EOF Then


rst.MoveLast
rst.MoveFirst


End If
Do While Not rst.EOF


strToFile = StringForBat (rst! eLetterID) “Рядок для одного листа
Print #n, , strToFile
rst.MoveNext


Loop
rst.Close


Close #n


If MsgBox (“bat-файл для відсилання листів створений. Штовхнути його на виконання?”, VbQuestion + vbYesNo + vbDefaultButton2, “А це комусь потрібно?”) = VbYes Then Call Shell (FileName, vbHide)


End Sub


Function StringForBat(ByVal eLetterID As Long) As String


“Складається командний файл і запускається
Dim Recipient, Subject, body, CopyTO, AttachedFileName, FileName, strToFile As String
Dim rst As DAO.Recordset
Dim n As Long


“З’ясуємо параметри листа
Set rst = CurrentDb.OpenRecordset(“SELECT * FROM eLetters WHERE eLetterID=” & eLetterID)
Recipient = rst!Recipient
CopyTO = rst!CopyTO
Subject = rst!Subject
body = CODE_TO_CODE(rst!body)
AttachedFileName = rst!AttachedFileName
rst.Close


“Створюємо txt-файл для тіла повідомлення
n = FreeFile
FileName=PathToEmailFile & “Body” & EletterID & “.txt”


Open FileName For Output As #n
Print #n, Spc(0), Trim(body)
Close #n


StringForBat = “blat.exe ” & chr(34) & FileName & chr(34) & ” -t ” & Recipient
If Not (CopyTO = “”) Then StringForBat = StringForBat & ” -c ” & CopyTO
If Not (Subject = “”) Then


Subject = CODE_TO_CODE(Subject)
StringForBat = StringForBat & ” -s ” & Chr(34) & CODE_TO_CODE(Subject, , S_DOS866) & Chr(34)


End If


If Not (AttachedFileName = “”) Then StringForBat = StringForBat & ” -attach ” & chr(34) & AttachedFileName & chr(34)
StringForBat = StringForBat & ” -mime”


End Function


“Функція перекодування
“(c) Володимир Лаврушкина
Public Function CODE_TO_CODE(ByVal Ustr As String, Optional S_Input = S_WIN, Optional S_OutPut = S_KOI8R) As String


Dim i, k As Integer


CODE_TO_CODE = “”


For i = 1 To Len(Ustr)


k = InStr(1, S_Input, Mid(Ustr, i, 1), vbBinaryCompare)
If k > 0 Then
     CODE_TO_CODE = CODE_TO_CODE & Mid(S_OutPut, k, 1)
Else
     CODE_TO_CODE = CODE_TO_CODE & Mid(Ustr, i, 1)
End If


Next i


End Function

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*