Предыстория:
С определенного адреса приходят письма с вложением в архиве .rar, в этом архиве находится .txt файл. Имена у файла и архива различаются и каждый раз меняются.
Необходимо:
Сохранить вложение на диск, разархивировать полученный архив в любую папку (например туда же где он лежит), содержимое файла .txt вставить в письмо и отправить на определенный адрес.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
Option Compare Text
Sub SaveAllAttachments(objitem As MailItem)
Dim objAttachments As Outlook.Attachments
Dim strName, strLocation As String
Dim dblCount, dblLoop As Double
strLocation = "C:\Attachment\" 'папка куда будут сохраняться вложения, создаем руками
On Error GoTo ExitSub
If Len(Dir(strLocation & Date, vbDirectory)) = 0 Then 'проверка существования директории
MkDir strLocation & Date 'делаем папку с текущей датой
End If
If objitem.Class = olMail Then
Set objAttachments = objitem.Attachments
dblCount = objAttachments.Count
If dblCount <= 0 Then
GoTo 100
End If
For dblLoop = 1 To dblCount
strName = objAttachments.Item(dblLoop).FileName
strName = strLocation & "\" & Date & "\" & strName
objAttachments.Item(dblLoop).SaveAsFile strName
Next dblLoop
End If
100
Call unrar 'разархивируем
Call send 'отправляем
ExitSub:
Set objAttachments = Nothing
Set objOutlook = Nothing
End Sub
Sub unrar()
ipath = "C:\Attachment\" & "\" & Date & "\"
myname = Dir(ipath, vbNormal)
Do While myname <> ""
If myname Like "*.rar" Or myname Like "*.zip" Or myname Like "*.7z" Then
WinRarApp$ = "C:\Program Files\WinRAR\WinRAR.exe x -o+ -y -vp"
' x - извлечь с полными путями
' -o+ - перезаписываем существующие файлы
' -y отвечаем на все запросы ДА
' -vp делает паузу перед следующим томом - не уверен в необходимости
iArhivName$ = myname
adr$ = WinRarApp$ & " """ & ipath & iArhivName$ & """ """ & ipath & """ "
RetVal = Shell(adr$, vbHide)
End If
myname = Dir()
Loop
End Sub
Sub send()
Dim objOL As Outlook.Application
Dim objMail As MailItem
Dim fso, ts, s
Const ForReading = 1
Set fso = CreateObject("Scripting.FileSystemObject")
Set objOL = Outlook.Application
Set objMail = objOL.CreateItem(olMailItem)
Set ts = fso.OpenTextFile("c:\testreadfile.txt", ForReading)
s = ts.ReadAll
With objMail
.To = "" 'получатель
'.CC = "" копия
.Body = s 'тело письма
.Subject = "Тема письма" 'тема
'.Attachments.Add = "" указывается полный путь к файлу
.send
End With
ts.Close
Set objMail = Nothing
Set objOL = Nothing
End Sub
Sub getfile()
' ищем все файлы TXT
' Просматриваются папки с глубиной вложениея не более трех.
Dim coll As Collection, PathTo As String
' получаем путь к папке
PathTo = CreateObject("WScript.Shell").SpecialFolders("Desktop")
' считываем в коллекцию coll нужные имена файлов
Set coll = FilenamesCollection(PathTo, ".txt", 3)
Application.ScreenUpdating = False ' отключаем обновление экрана
End Sub
Это наброски, которые сохраняют файл на диск, разархивируют его и после всех этих действий мне приходит письмо с определенным содержимым файла .txt .
Основная проблема заключается в том, что чтобы прикрепить файл к письму, необходимо узнать его путь. Необходимо узнать имя файла.
P.S. с vba вообще не знаком :( Все это написано из набросков найденных в интернете.