Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2009, 13:54   #1
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию Сохранить письмо с расширением *.msg или *.eml

Добрый день.
Пишу программку на VBA for Access
на Аксесовской форме у меня есть кнопка, при нажатии которой формируется Excel-ский файл и сохраняется в определенную папку.
Затем мне нужно создать письмо с вложением этого файла. и сохранить это письмо с расширением *.msg или *.eml.
Можно ли это сделать?
Сейчас сделал: создается файл, создается письмо с вложением и сразу отправляется. Как можно сохранить это письмо?
Код:
Dim name_k, email_k As String
Dim oMSG As Object
Dim oConfig As Object
Dim CFields As Object
Dim strBody As String

'Здесь создается Excel файл и сохраняется под определенным именем'

name_k = "SELECT Контрагент.Имя, Контрагент.email FROM Контрагент where (((Контрагент.код)=" & CLng(Kod) & "))"
Set quer = CurrentDb.OpenRecordset(name_k)

Set oMSG = CreateObject("CDO.Message")
Set oConfig = CreateObject("CDO.Configuration")
Set CFields = oConfig.Fields
Set oMSG.Configuration = oConfig
CFields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
CFields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.ru" 'smtp сервер моего ящика'
CFields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
CFields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "Login" 'Логин моего ящика'
CFields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "Pass" 'Мой пароль'
CFields("urn:schemas:mailheader:content-language") = "windows-1251"
CFields.update
oMSG.To = quer![email] 
oMSG.From = login@mail.ru
oMSG.Subject = "Тема письма"
oMSG.BodyPart.Charset = "windows-1251" 
oMSG.AddAttachment "C:\tabel.xls" 'добавляю вложение'
oMSG.HTMLBody = "Текст письма"

'Вот здесь нужно не отпралять письмо, а сохранить???????'
oMSG.Send

Set CFields = Nothing
Set oConfig = Nothing
Set oMSG = Nothing

Set rst = Nothing
Set quer = Nothing
Сохранение нужно, что бы потом вручную открыть это письмо в The Bat если надо отредактировать, а потом отправить.
S@fer вне форума Ответить с цитированием
Старый 10.03.2009, 21:21   #2
Sparxy
Пользователь
 
Регистрация: 26.01.2009
Сообщений: 29
По умолчанию

если сильно не заморачиваться то можно просто сделать oMSG.display и в ручную сохранить туда, куда надо.
Не стоит чинить то, что еще не сломалось...
Sparxy вне форума Ответить с цитированием
Старый 10.03.2009, 21:31   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Сохранение нужно, что бы потом вручную открыть это письмо в The Bat если надо отредактировать, а потом отправить
Так не проще ли тогда создавать письмо средствами TheBAT?

Пример работы с этой программой из VBA можно посмотреть здесь:
http://www.programmersforum.ru/showp...4&postcount=10
EducatedFool вне форума Ответить с цитированием
Старый 11.03.2009, 09:41   #4
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Спасибо.
Пока временно сделал так
Код:
oMSG.GetStream.SaveToFile ("C:\mail.eml")
Буду пробовать, что предложил EducatedFool
S@fer вне форума Ответить с цитированием
Старый 11.03.2009, 12:17   #5
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

to EducatedFool
Для чего необходима строчка?
Код:
 For i = 1 To 10000: DoEvents: Next
т.е. (для чего необходима задержка создания письма?)
Если я ее убираю, то письмо создается моментально.
S@fer вне форума Ответить с цитированием
Старый 11.03.2009, 14:49   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
For i = 1 To 10000: DoEvents: Next ' пауза для формирования уникальных имён файлов
    ИмяФайла = ФайлДляСохраненияТекстаПисьма & "." & Replace(Timer, ",", "")
    'Debug.Print ИмяФайла
    Open ИмяФайла For Output As #1
    Print #1, Текст: Close #1    ' пишем текст в файл
Написан же комментарий - для чего эта пауза.
Мне просто неохота было придумывать нормальный способ формирования уникальных имён файлов... и я к имени файла просто приписывал значение таймера (& Replace(Timer, ",", ""))
Без паузы всё работает настолько быстро, что за 10 миллисекунд успевает создаваться несколько файлов с текстами писем...
Самым простым решением с моей стороны было добавление паузы

Конечно, чуточку подкорректировав код, от паузы можно избавиться.
EducatedFool вне форума Ответить с цитированием
Старый 12.03.2009, 06:28   #7
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Спасибо. Немножко переделал для своих целей получилось так
Код:
Dim strTO, strSUBJECT, AttachFilename, StrTEXT, StrAttach, cmd As String
Dim ИмяФайла, Текст As String

Текст = "Текст письма" 

strTO = "TO=" & Chr(34) & quer![Email] & Chr(34)
strSUBJECT = "SUBJECT=" & Chr(34) & "Уведомление" & Chr(34)
AttachFilename = "C:\Temp\" & tbNdoc_sale & ".xls"

ИмяФайла = "C:\Temp\" & tbNdoc_sale & ".txt"
      
Open ИмяФайла For Output As #1
Print #1, Текст: Close #1

    StrTEXT = "TEXT=" & Chr(34) & ИмяФайла & Chr(34)
    StrAttach = "ATTACH=" & Chr(34) & AttachFilename & Chr(34)

    cmd = "C:\Program Files\The Bat!\thebat.exe" & " /MAIL;" & strTO & ";" & strSUBJECT & ";" & _
          StrTEXT & ";" & StrAttach & " "    
    CreateObject("WScript.Shell").Exec cmd
S@fer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли внести изменения в файл с расширением .exe Sanlev Помощь студентам 12 08.02.2010 15:49
Как сохранить строку в регистр или переменную Demonidze Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 10.02.2009 19:52
Генерация файла с расширением CPP Solan Общие вопросы C/C++ 8 28.09.2007 10:01
как под структуру типа MSG выделить строго определенное количество байт? Morskoivolk Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 03.04.2007 20:12