Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/103: Рейтинг темы: голосов - 103, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 12.06.2012
Сообщений: 9

Простой скрипт для сохранения писем Outlook

20.01.2015, 02:00. Показов 20278. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Прочитал все подобные темы на форуме и ничего не нашел. Нужен самый простой скрипт, который берет письма из определенной папки и сохраняет текст письма в файл .txt(к примеру). Желательно чтобы создавался только один файл, который содержит тексты всех писем в папке. Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.01.2015, 02:00
Ответы с готовыми решениями:

Макрос Outlook для прочтения и сохранения писем
Помогите пожалуйста! У меня в Outlook был макрос, который прочитывал все письма входящие и сохранял их в определенную папку. Потом...

Outlook - скрипт для сохранения файлов по вложенной ссылке
Всем доброго дня! Прошу уточнить возможно ли реализовать описанную ниже схему через скрипт VBA или нет? В Outlook приходит письмо с...

Чтение писем и сохранения вложений Outlook
Добрый день. Интересует задача, проанализировать отдельно входящие и исходящие письма на предмет писем содержания в теме текста и...

18
 Аватар для Bitton
11 / 11 / 0
Регистрация: 23.11.2014
Сообщений: 114
20.01.2015, 17:46
Привет, вначале помогу чем смогу

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub test()
Dim vhod, ee, impor, MyObj, myob1 As Object
Dim text As String
 
 Set ee = Session.Folders.Item(2) ' папки могут отличаться
 Set vhod = ee.Folders.Item(3)
 Set impor = vhod.Items.Item(6)
  text = impor.Body ' таким образом мы достали текст из письма
 
End Sub
Я тоже много искал по поводу OutLook VBA мало что дельного. Поэтому копался сам, хорошим помощником Вам в этом будет Watch Window, там вы сможете отыскать те папки, которые Вам нужны, пример как нарыть текст письма я показал, можно добавить цикл. Думаю другие ребята покажут как копировать его и добавлять в текстовый файл.
0
1 / 1 / 0
Регистрация: 12.06.2012
Сообщений: 9
21.01.2015, 06:09  [ТС]
А где указывается имя папки из которой идет обработка писем?

Добавлено через 4 часа 18 минут
Может кому-нибудь пригодится рабочий скрипт по сохранению текста письма в определенный файл на диске:
Visual Basic
1
2
3
4
5
6
Sub save(myItem As Outlook.MailItem)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set logs = objFSO.OpenTextFile("C:\temp\1.txt", 8, True)
a = myItem.Body
logs.writeline (a)
End Sub
1
 Аватар для Bitton
11 / 11 / 0
Регистрация: 23.11.2014
Сообщений: 114
21.01.2015, 12:47
Цитата Сообщение от skompr Посмотреть сообщение
А где указывается имя папки из которой идет обработка писем?
Попробуй поищи информацию описание Watch Window в VBA именно это тебе поможет найти нужную папку.
0
12 / 12 / 2
Регистрация: 30.10.2013
Сообщений: 46
21.01.2015, 22:26
Итак. Давайте уясним для себя простые вещи. Автоматизация Outlook'а - не такое популярное дело, если сравнивать с Excel или Access. Объектная модель Outlook'а не такая уж и сложная, ее можно достаточно безболезненно выучить.
В интерфейсе программы нужно знать об объектах Inspector(окно после двойного ЛКМ на сообщении) и Explorer (основное окно программы). Есть несколько важных коллекций. Folders - папки, Folders(x).items - сообщения в папке, Items(x).Attachments - вложения в сообщениях. Над перечисленными объектами выполняются действия - всем знакомые по пользованию программой, соответствующие методы можно найти нажав на f2. Так как я не очень то и пользуюсь oulook'ом дома, для меня нет особых предпочтений со всякими коллекциями типа Tasks и проч. Их указывать посему я и не стал.

Основные приемы работы можно почерпнуть работая в Excel. Опыт может конвертироваться в данном смысле.

Теперь по теме.
Чтобы выйти к любого типа интересующих нас данным можно идти двумя взаимозаменяемыми путями (согласно Technket - MSDN). Первый путь - через GetNameSpace, второй через Session (который и будет использоваться далее):
Visual Basic
1
GetNameSpace("MAPI").(что-то там используя Intellisense)
или
Visual Basic
1
Session.(что-то там используя Intellisense
Далее, чтобы узнать как пройти по структуре папок к нужной папке:
Visual Basic
1
2
3
4
5
6
Dim i&
Dim fld As Folder
For Each fld In Session.Folders
    i = i + 1
    MsgBox fld.name & " " & i
Next fld
Возле папок будет указываться индекс который вставляется далее:
Visual Basic
1
2
3
4
5
6
Dim i&
Dim fld As Folder
For Each fld In Session.Folders(1).Folders
    i = i + 1
    MsgBox fld.name & " " & i
Next fld
Таким образом ищется нужная папка.
Если вы точно знаете, что нужная папка дефолтная (типа Inbox (или Входящие), Drafts (черновики), и т.д.), используем следующее:
1.Папка Входящие
Visual Basic
1
2
Dim fld As Folder
Set fld = Session.GetDefaultFolder(olFolderInbox)
2.Папка Черновики
Visual Basic
1
2
Dim fld As Folder
Set fld = Session.GetDefaultFolder(olFolderDrafts)
Многое можно почерпнуть из Intellisense. Если что нужно, обращайтесь. Попробую подсказать
0
1 / 1 / 0
Регистрация: 26.01.2015
Сообщений: 26
11.07.2019, 10:43
Рискну поднять тему.
У меня появилась такая же необходимость, что и у автора темы.
Нужно сохранять письма (не вложения, а сам текст) в виде текстовых файлов. Например, приходят письма от адресата user2@xx.xx. Ложаться в папку User2. И надо их сохранять в C:\mailUser\mail1.txt, C:\mailUser\mail2.txt и т.д.
Может кто-нибудь на пальцах объяснить как и что написать?
0
 Аватар для Bitton
11 / 11 / 0
Регистрация: 23.11.2014
Сообщений: 114
11.07.2019, 15:58
Вроде работает

Visual Basic
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
Sub save_mail_txt()
Dim fld As folder
Dim mBody, mFolderName As String
scan = scan_folders(Session.Folders.Item(1)) 'первый аккаунт почты, если их несколько то надо допилить
End Sub
 
Function scan_folders(fld As folder)
Dim fldr As folder
Dim itms As MailItem
For Each fldr In fld.Folders
   For Each itms In fldr.Items
   Save = save_mail("C:\mail\" & fldr.Name & "\", itms.Body, itms.SenderEmailAddress, itms.subject) 'C:\mail\ - папка куда все будет складываться при необходимости заменить
   Next
   scan_folders = scan_folders(fldr)
 
 
Next
scan_folders = "done"
End Function
 
Function save_mail(folder As String, mail_body As String, sender As String, subject As String) 'текстовые файлы будут сохраняться по субъекту, если субъект одинаковый будет перезапись, нужно допиливать, мне лень
Dim FSO
subject = Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(subject, ":", ""), " ", "_"), "!", ""), "?", ""), ">", ""), """", ""), ",", ""), "    ", "")
Set FSO = CreateObject("Scripting.FileSystemObject")
check = FSO.FolderExists(folder)
If check = False Then
FSO.CreateFolder (folder)
End If
check_sender_fld = FSO.FolderExists(folder & sender & "\")
If check_sender_fld = False Then
FSO.CreateFolder (folder & sender & "\")
End If
check_file = FSO.FileExists(folder & sender & "\" & subject & ".txt")
If check_file = True Then
FSO.DeleteFile (folder & sender & "\" & subject & ".txt")
End If
On Error Resume Next
Set txt = FSO.OpenTextFile(folder & sender & "\" & subject & ".txt", 8, True)
If Err.Number = 52 Then
Set txt = FSO.OpenTextFile("C:\mail\log.txt", 8, True)
txt.WriteLine (folder & sender & "\" & subject & ".txt //// не удалось открыть файл")
txt.Close
Exit Function
End If
txt.Write (mail_body)
If Err.Number = 5 Then
txt.Write ("Не удалось прочитать тело письма, возможно имеются недопустимые символы")
End If
txt.Close
End Function
допилить привести в порядок и будет норм
1
1 / 1 / 0
Регистрация: 26.01.2015
Сообщений: 26
11.07.2019, 17:01
Bitton, большое спасибо!
Пойду пробовать и разбираться.

Добавлено через 38 минут
Bitton, к сожалению в VBA не силён. Как ограничить поиск писем только одной папкой, находящейся во Входящих?
0
 Аватар для Bitton
11 / 11 / 0
Регистрация: 23.11.2014
Сообщений: 114
11.07.2019, 17:36
Northern, например так

Visual Basic
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
Sub save_mail_txt()
Dim fld As folder
Dim mBody, mFolderName As String
For Each fld In Session.Folders.Item(1).Folders
 If fld.Name = "Inbox" Then ' если папка по русски называется надо переименовать
    scan = scan_folders(fld)
 End If
Next
End Sub
 
Function scan_folders(fld As folder)
Dim fldr As folder
Dim itms As MailItem
   For Each itms In fld.Items
      Save = save_mail("C:\mail\" & fld.Name & "\", itms.Body, itms.SenderEmailAddress, itms.subject)
   Next
   For Each fldr In fld.Folders
       For Each itms In fldr.Items
           Save = save_mail("C:\mail\" & fldr.Name & "\", itms.Body, itms.SenderEmailAddress, itms.subject)
       Next
       scan_folders = scan_folders(fldr)
 
 
   Next
scan_folders = "done"
End Function
Добавлено через 14 минут
Northern, почитайте документацию, там не плохо описан каждый метод и свойство объекта outlook
0
1 / 1 / 0
Регистрация: 26.01.2015
Сообщений: 26
12.07.2019, 10:49
Попытался объединить.
Но в подпапки во Входящих не идет. Не подскажите, что надо добавить?

Visual Basic
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
Sub save_mail_txt()
Dim fld As folder
Dim mBody, mFolderName As String
For Each fld In Session.Folders.Item(1).Folders
 If fld.Name = "GPRS_channels" Then
scan = scan_folders(Session.Folders.Item(1)) 'ïåðâûé àêêàóíò ïî÷òû
End If
Next
End Sub
 
Function scan_folders(fld As folder)
Dim fldr As folder
Dim itms As MailItem
For Each fldr In fld.Folders
   For Each itms In fldr.Items
   save = save_mail("C:\temp" & fldr.Name & "", itms.Body, itms.SenderEmailAddress, itms.subject) 'C:\mail\ - ïàïêà êóäà âñå áóäåò ñêëàäûâàòüñÿ ïðè íåîáõîäèìîñòè çàìåíèòü
   Next
   scan_folders = scan_folders(fldr)
 
 
Next
scan_folders = "done"
End Function
 
Function save_mail(folder As String, mail_body As String, sender As String, subject As String) 'òåêñòîâûå ôàéëû áóäóò ñîõðàíÿòüñÿ ïî ñóáúåêòó, åñëè ñóáúåêò îäèíàêîâûé áóäåò ïåðåçàïèñü, íóæíî äîïèëèâàòü, ìíå ëåíü
Dim FSO
subject = Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(subject, ":", ""), " ", "_"), "!", ""), "?", ""), ">", ""), """", ""), ",", ""), "    ", "")
Set FSO = CreateObject("Scripting.FileSystemObject")
check = FSO.FolderExists(folder)
If check = False Then
FSO.CreateFolder (folder)
End If
check_sender_fld = FSO.FolderExists(folder & sender & "")
If check_sender_fld = False Then
FSO.CreateFolder (folder & sender & "")
End If
check_file = FSO.FileExists(folder & sender & "" & subject & ".txt")
If check_file = True Then
FSO.DeleteFile (folder & sender & "" & subject & ".txt")
End If
On Error Resume Next
Set txt = FSO.OpenTextFile(folder & sender & "" & subject & ".txt", 8, True)
If Err.Number = 52 Then
Set txt = FSO.OpenTextFile("C:\mail\log.txt", 8, True)
txt.WriteLine (folder & sender & "" & subject & ".txt //// íå óäàëîñü îòêðûòü ôàéë")
txt.Close
Exit Function
End If
txt.Write (mail_body)
If Err.Number = 5 Then
txt.Write ("Íå óäàëîñü ïðî÷èòàòü òåëî ïèñüìà, âîçìîæíî èìåþòñÿ íåäîïóñòèìûå ñèìâîëû")
End If
txt.Close
End Function
0
 Аватар для Bitton
11 / 11 / 0
Регистрация: 23.11.2014
Сообщений: 114
12.07.2019, 12:55
Цитата Сообщение от Northern Посмотреть сообщение
GPRS_channels
- это точно не входящие, если эта папка в директории аккаунта находится, то сработало бы, если же она все таки во входящих, то нужно еще один цикл пускать, то что ниже пишу - не буду тестировать, так что возможно нужно поправить

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub save_mail_txt()
Dim fld, fld1 As folder
Dim mBody, mFolderName As String
For Each fld In Session.Folders.Item(1).Folders
    If fld.Name = "Inbox" Then 'опять же если по русски то по русски
        for each fld1 in fld.Folders
            if fld1.name = "GPRS_channels" then
                scan = scan_folders(fld1)
            end if 
        next
    End If
Next
End Sub
И если в этой папке тоже есть папки, то нужно использовать функцию, которую я второй раз указал, немного измененную
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Function scan_folders(fld As folder)
Dim fldr As folder
Dim itms As MailItem
   For Each itms In fld.Items
      Save = save_mail("C:\mail\" & fld.Name & "\", itms.Body, itms.SenderEmailAddress, itms.subject)
   Next
   For Each fldr In fld.Folders
       For Each itms In fldr.Items
           Save = save_mail("C:\mail\" & fldr.Name & "\", itms.Body, itms.SenderEmailAddress, itms.subject)
       Next
       scan_folders = scan_folders(fldr)
 
 
   Next
scan_folders = "done"
End Function
1
1 / 1 / 0
Регистрация: 26.01.2015
Сообщений: 26
12.07.2019, 20:35
Что-то я делаю не так. Подскажите что? В таком варианте из цикла в процедуре не выходит и ничего не делает.
Visual Basic
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
Sub save_mail_txt()
Dim fld, fld1 As folder
Dim mBody, mFolderName As String
For Each fld In Session.Folders.Item(1).Folders
    If fld.Name = "Входящие" Then 'опять же если по русски то по русски
        For Each fld1 In fld.Folders
            If fld1.Name = "GPRS_channels" Then
                scan = scan_folders(fld1)
            End If
        Next
    End If
Next
End Sub
 
Function scan_folders(fld As folder)
Dim fldr As folder
Dim itms As MailItem
For Each fldr In fld.Folders
   For Each itms In fldr.Items
   save = save_mail("C:\еуьз\" & fldr.Name & "\", itms.Body, itms.SenderEmailAddress, itms.subject) 'C:\еуьз\ - папка куда все будет складываться при необходимости заменить
   Next
   scan_folders = scan_folders(fldr)
 
 
Next
scan_folders = "done"
End Function
 
Function save_mail(folder As String, mail_body As String, sender As String, subject As String) 'текстовые файлы будут сохраняться по субъекту, если субъект одинаковый будет перезапись, нужно допиливать, мне лень
Dim FSO
subject = Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(subject, ":", ""), " ", "_"), "!", ""), "?", ""), ">", ""), """", ""), ",", ""), "    ", "")
Set FSO = CreateObject("Scripting.FileSystemObject")
check = FSO.FolderExists(folder)
If check = False Then
FSO.CreateFolder (folder)
End If
check_sender_fld = FSO.FolderExists(folder & sender & "\")
If check_sender_fld = False Then
FSO.CreateFolder (folder & sender & "\")
End If
check_file = FSO.FileExists(folder & sender & "\" & subject & ".txt")
If check_file = True Then
FSO.DeleteFile (folder & sender & "\" & subject & ".txt")
End If
On Error Resume Next
Set txt = FSO.OpenTextFile(folder & sender & "\" & subject & ".txt", 8, True)
If Err.Number = 52 Then
Set txt = FSO.OpenTextFile("C:\mail\log.txt", 8, True)
txt.WriteLine (folder & sender & "\" & subject & ".txt //// не удалось открыть файл")
txt.Close
Exit Function
End If
txt.Write (mail_body)
If Err.Number = 5 Then
txt.Write ("Не удалось прочитать тело письма, возможно имеются недопустимые символы")
End If
txt.Close
End Function
0
 Аватар для Bitton
11 / 11 / 0
Регистрация: 23.11.2014
Сообщений: 114
12.07.2019, 20:53
попробуйте вот так

Visual Basic
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
Sub save_mail_txt()
Dim fld, fld1 As folder
Dim mBody, mFolderName As String
For Each fld In Session.Folders.Item(1).Folders
    If fld.Name = "Входящие" Then
        For Each fld1 In fld.Folders
            If fld1.Name = "GPRS_channels" Then
                scan = scan_folders(fld1)
            End If
        Next
    End If
Next
End Sub
 
Function scan_folders(fld As folder)
    Dim fldr As folder
    Dim itms As MailItem
    For Each itms In fld.Items
        Save = save_mail("C:\еуьз\" & fld.Name & "\", itms.Body, itms.SenderEmailAddress, itms.subject)
    Next
    For Each fldr In fld.Folders
        For Each itms In fldr.Items
            save = save_mail("C:\еуьз\" & fldr.Name & "\", itms.Body, itms.SenderEmailAddress, itms.subject)
        Next
        scan_folders = scan_folders(fldr)
    Next
    scan_folders = "done"
End Function
 
Function save_mail(folder As String, mail_body As String, sender As String, subject As String)
    Dim FSO
    subject = Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(subject, ":", ""), " ", "_"), "!", ""), "?", ""), ">", ""),"""", ""), ",", ""), "    ", "")
    Set FSO = CreateObject("Scripting.FileSystemObject")
    check = FSO.FolderExists(folder)
    If check = False Then
        FSO.CreateFolder (folder)
    End If
    check_sender_fld = FSO.FolderExists(folder & sender & "\")
    If check_sender_fld = False Then
        FSO.CreateFolder (folder & sender & "\")
    End If
    check_file = FSO.FileExists(folder & sender & "\" & subject & ".txt")
    If check_file = True Then
        FSO.DeleteFile (folder & sender & "\" & subject & ".txt")
    End If
    On Error Resume Next
    Set txt = FSO.OpenTextFile(folder & sender & "\" & subject & ".txt", 8, True)
    If Err.Number = 52 Then
        Set txt = FSO.OpenTextFile("C:\mail\log.txt", 8, True)
        txt.WriteLine (folder & sender & "\" & subject & ".txt //// не удалось открыть файл")
        txt.Close
        Exit Function
    End If
    txt.Write (mail_body)
    If Err.Number = 5 Then
        txt.Write ("Не удалось прочитать тело письма, возможно имеются недопустимые символы")
    End If
    txt.Close
End Function
0
1 / 1 / 0
Регистрация: 26.01.2015
Сообщений: 26
12.07.2019, 21:08
Попробовал. Тоже самое. Она из цикла вот этого никуда не выходит
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub save_mail_txt()
Dim fld, fld1 As folder
Dim mBody, mFolderName As String
For Each fld In Session.Folders.Item(1).Folders
    If fld.Name = "Входящие" Then
        For Each fld1 In fld.Folders
            If fld1.Name = "Castle" Then
                scan = scan_folders(fld1)
            End If
        Next
    End If
Next
End Sub
0
 Аватар для Bitton
11 / 11 / 0
Регистрация: 23.11.2014
Сообщений: 114
12.07.2019, 21:13
папка Castle точно во входящих находится? запустите этот скрипт через F8 и пошагово проверяйте, срабатывают ли условия, в идеале должны добраться до строки scan = scan_folders(fld1), если нет, то значит структура папок иная и условие данное не подходит
0
1 / 1 / 0
Регистрация: 26.01.2015
Сообщений: 26
14.07.2019, 08:56
Bitton, спасибо!
Выгружает в текст. С подпапками пока не совсем разобрался. Что означает Session.Folders.Item(1).Folders А именно цифра 1 в скобках?

Мне надо будет этот макрос прицепить как правило в Outlook. Т.е. оно будет срабатывать на приходящие письма. Как можно сделать, чтобы макрос не все письма каждый раз копировал, а только новые?
0
1 / 1 / 0
Регистрация: 26.01.2015
Сообщений: 26
15.07.2019, 16:52
Немного подправил под себя. Спасибо, Bitton, за помощь

Visual Basic
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
Sub save_mail_txt()
Dim fld, fld1, fld2 As folder
Dim mBody, mFolderName As String
 For Each fld In Session.Folders.Item(4).Folders
    If fld.Name = "Входящие" Then
       For Each fld1 In fld.Folders
            If fld1.Name = "Castle" Then
                For Each fld2 In fld1.Folders
                   If fld2.Name = "s_castle" Then
                     scan = scan_folders(fld2)
                   End If
                Next
            End If
        Next
    End If
 Next
End Sub
 
Function scan_folders(fld As folder)
    Dim fldr As folder
    Dim itms As MailItem
    For Each itms In fld.Items
        save = save_mail("C:\mail\" & fld.Name & "\", itms.Body, itms.subject)
    Next
       scan_folders = "done"
End Function
 
Function save_mail(folder As String, mail_body As String, subject As String)
    Dim FSO
    subject = Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(subject, ":", ""), " ", "_"), "!", ""), "?", ""), ">", ""), """", ""), ",", ""), "    ", "")
    Set FSO = CreateObject("Scripting.FileSystemObject")
    check = FSO.FolderExists(folder)
    If check = False Then
        FSO.CreateFolder (folder)
    End If
    check_file = FSO.FileExists(folder & "\" & subject & ".txt")
    If check_file = True Then
        FSO.DeleteFile (folder & "\" & subject & ".txt")
    End If
    On Error Resume Next
    Set txt = FSO.OpenTextFile(folder & "\" & subject & ".txt", 8, True)
    If Err.Number = 52 Then
        Set txt = FSO.OpenTextFile("C:\mail\log.txt", 8, True)
        txt.WriteLine (folder & "\" & subject & ".txt //// не удалось открыть файл")
        txt.Close
        Exit Function
    End If
    txt.Write (mail_body)
    If Err.Number = 5 Then
        txt.Write ("Не удалось прочитать тело письма, возможно имеются недопустимые символы")
    End If
    txt.Close
End Function
Остаётся вопрос с применением всего этого только для новых писем. Т.е если уже копировал, то не трогать. Или если так никак, то как вариант, удалять письма после копирования.
0
 Аватар для Bitton
11 / 11 / 0
Регистрация: 23.11.2014
Сообщений: 114
15.07.2019, 17:00
По поводу новых писем, у меня сейчас нет времени, надо читать документацию, там в любом случае должно быть такое свойство.

Что касается удалять и записывать занеово, то функция, которая записывает тело письма в txt это умеет делать, если файл уже имеется такой, то он удаляется и записывается заново.
0
1 / 1 / 0
Регистрация: 26.01.2015
Сообщений: 26
16.07.2019, 09:45
Вот такой вариант написал для правила, обрабатывающего приходящие письма, благодаря всем отписавшим сейчас и ранее в этой ветке.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub save_mail_txt(myItem As Outlook.MailItem)
Set FSO = CreateObject("Scripting.FileSystemObject")
check_file = FSO.FileExists("C:\mail\" & myItem.subject & ".txt")
    If check_file = True Then
        FSO.DeleteFile ("C:\mail\" & myItem.subject & ".txt")
    End If
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set logs = objFSO.OpenTextFile("C:\mail\" & myItem.subject & ".txt", 8, True)
a = myItem.Body
logs.writeline (a)
 End Sub
Вроде, пока устраивает.
Спасибо!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.07.2019, 09:45
Помогаю со студенческими работами здесь

Надстройка Outlook для шифрования писем
Необходимо, чтобы при нажатии кнопки "отправить" задавался вопрос "Хотите подписать данное письмо?" Если нажали "да", то,...

Правило для отправки писем outlook 2010
Добрый день! Передо мной стоит задача, над которой бьюсь всю неделю и видимо не пойду на выходные :( Помогите, пожалуйста, блондинке....

Макрос для отправки писем через outlook
Необходимо создать макрос для отправки писем через outlook листа 3, с ориентацией по названию фирмы и емэйлом

Код на VBA для Outlook (поиск непрочитанных писем)
Подскажите, пожалуйста, какой код понадобится для следующих действий: Необходимо с заданной периодичностью включать событие (поиск...

Как в Outloook 2013 задать папку на диске по умолчанию для сохранения писем
Требуется чтобы письма в формате msg из Outloook сохранялись на жесткий диск в нужную папку. Подскажите, пожалуйста, как это решить?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru