powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Outlook ошибка проверки писем
25 сообщений из 33, страница 1 из 2
Outlook ошибка проверки писем
    #38936583
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, снова с просьбой помочь...
У меня 2007, у человека тоже 2007
У человека в цикле по письмам в папке входящие выпадает с ошибкой.Писем порядка 4000, выпадает гдето на 1800м
Код: vbnet
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.
Private OL_ItemMail As Outlook.MailItem

'спиcок писем в папке "входящие"
Function EmailInbox()
Dim OL_App As Outlook.Application
Dim OL_NameSpace As Outlook.NameSpace
Dim OL_FolderMail As Outlook.MAPIFolder
Dim InitiationMaill As Long, HEARINGMaill As Long
Dim myItems As Outlook.Items
Dim n As Long

   On Error GoTo EmailInbox_Error
 
er = 1
' получаем объект Outlook
Set OL_App = CreateObject("Outlook.Application")

er = 2
'получаем Namespace
Set OL_NameSpace = OL_App.GetNamespace("MAPI")

er = 3
' получаем ссылку на папку Входящие
Set OL_FolderMail = OL_NameSpace.GetDefaultFolder(olFolderInbox)
Set myItems = OL_FolderMail.Items 

er = 4
' перебираем все письма в папке
For Each OL_ItemMail In myItems 
    
    With OL_ItemMail
er = 50
        If .UnRead Then ' фильтр по непрочитанным
              ' здесь идет обработка писем
        End If
    End With
' на 1800 письме после следующей строки сразу выпадает в ошибку
Next
    
   On Error GoTo 0
   Exit Function

EmailInbox_Error:
' здесь обработка ошибок    
End Function


Почему не доходит до конца колекции писем?
У меня на компе работает.У человека нет...
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38936590
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортан,

у вас не тот набор писем, нужно исследовать на компе клиента...
- заремить строку On Error GoTo EmailInbox_Error и посмотреть на каком операторе клинит...
(или ещё как)
- попробовать вычислить, посмотреть и удалить кривое письмо или удалить первые 5 - будет ли падать на 1795 м письме (кривом), потом дальше думать...
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38936595
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В довесок:
Попробуйте объяснить человеку что 4 000 писем во входящих это дохрена, лично у меня там больше 10-15 никогда не бывает,
нужные я сразу разбрасываю по тематическим папкам, не нужные удаляю - так легче жить...
Для справки: в аутлук экспресс размер папки Входящие (и любой другой) около 2 гиг вызывает непонятные случайные глюки этой
папки и на прием и на просмотр даже в самом почтовике... в мс аутлуке 4 000 писем с вложениями совокупно тоже далеко не подарок....
В качестве превентивной меры можно попросить чела глянуть размер папки Входящие и сделать её принудительное сжатие, не
удивлюсь если размер файла в районе 4 гига...
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38936596
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,

vmagу вас не тот набор писем, нужно исследовать на компе клиента..
не совсем понял..
у меня просто при проверке работы - все ок. Человеку отдаю файл - бьет ошибку

vmagзаремить строку On Error GoTo EmailInbox_Error
я построчно смотрел выполнение
на строке - Next - выпадает
непонятно - Цикл, следующий обьект из коллекции, получается при обращении к обьекту вываливается

вспомнил - один раз у него "нормально" отработал цикл. Правда с нужными письмами ничего не сделал..
уже и на оперативу думал(типа мало), письма от 10кб до 5мб весят. Но у него на рабочем компе 4 гига оперативы..

За советы спасибо, попробую завтра на клиентском поиграться с письмами
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38936597
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортанпопробую завтра на клиентском поиграться с письмами

отпишитесь потом, если не трудно - в чем была причина...
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38936599
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне просто интересно: кривое письмо или неподъемная папка Входящие (4 000 писем)
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38936600
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,

vmagотпишитесь потом, если не трудно - в чем была причина...
ок

могу ошибаться, но уже сейчас подумал...обращение к обьекту - грузит его в память целиком(все сразу)? или просто дает ссылку на обьект, который уже потом загружается и в конце выгружается и грузится новый?
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38936601
Outlook,
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игортан,

Ошибка какая?
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38936602
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Outlook,,

13 - несоответсвие типа данных.
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38936608
Outlook,
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИгортанOutlook,,

13 - несоответсвие типа данных.значит у человека, в папке "Входящие" не только письма
сделай
Код: vbnet
1.
OL_ItemMail As object 'Outlook.MailItem


и проверяй его Class
Код: vbnet
1.
2.
3.
For Each OL_ItemMail In myItems 
    If OL_ItemMail.Class = olMail Then
       With OL_ItemMail
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38936640
4507
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Outlook,Игортан,
Ошибка какая?

ну вообще-то насчет 4000 писем во входящих тоже имеет смысл очень здорово задуматься...
имеет смысл брать только свежие письма, т.е. полученные >= даты последней проверки почты
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38936950
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4507,


4507имеет смысл брать только свежие письма, т.е. полученные >= даты последней проверки почты
согласен полностью
я и так поставил фильтр по непросмотренным письмам
Код: vbnet
1.
2.
3.
4.
5.
6.
    With OL_ItemMail
er = 50
        If .UnRead Then ' фильтр по непрочитанным
              ' здесь идет обработка писем
        End If
    End With


пробовал фильтр ставить прямо на цикл,
что то вот так вроде
Код: vbnet
1.
2.
3.
    For Each OL_ItemMail In OL_FolderMail.Items.Restrict("[Unread]=TRUE")
              ' здесь идет обработка писем
    End With


но там как то не все письма непрочитанные брались. Как будто колекция обновлялась по мере чтения писем. Например непрочитанных - 3. Пока импортировали письмо, отметили его прочитанным и опана а в коллекциии уже не 3 а 2 письма непрочитанных. и по циклу как то выходил недопросматривая все непрочтенные письма. Решил брать все и потом только уже смотреть только непрочитанные..

Outlook,значит у человека, в папке "Входящие" не только письма
а вот про это я не подумал...
нужно проверить. Спасибо!
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38937051
В чем заключается "обработка писем"? Если удаляются или перемещаются в другую папку, то цикл надо делать с конца в начало.
Игортанодин раз у него "нормально" отработал цикл. Правда с нужными письмами ничего не сделал. Эта фраза наводит на мысль, что я угадал.
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38937157
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagмне просто интересно: кривое письмо или неподъемная папка Входящие (4 000 писем)

все таки оказался обьект другого класа(olReportItem) - на нем и стопорило.
Проверка класса обьекта перед манипуляциями помогла!
Отдельное спасибо Outlook - его помощь.

Папка входящие, экспортированная в .pst файл, весит чуть более 1гб.

Песни бы петь)))...но
При работе с конкретным письмом я считывал его и искал нужные куски текста, например: "AAA Case No.:" после этого текста были нужные данные - я их и брал себе.
Так вот, у себя настроил, вылавливал данные. У человека
Я сейчас попытаюсь чуть описать, может сумбурно, но парсингом до этого не занимался...
при выделении мышкой данных прямо в письме - видна табличная структура(правда не видно границ ячеек)
я письмо считываю как обычный текст
у меня - до текста стоит перевод строки(почему то так)
у человека - этого перевода строки НЕТ.

Я вот подумал, может письмо парсить не как текстовое, а HTML?
Если это разумно - киньте пожалуйста кусок кода для парсинга письма в html формате.
Может так будет стабильнее работать на разных компах
С человеком у нас разные локализации и винды и акса
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38937252
Outlook,
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А не проще было прилинковать папку "Входящие" и работать с ней как с таблицей?

ИгортанПри работе с конкретным письмом я считывал его и искал нужные куски текста, например: "AAA Case No.:" после этого текста были нужные данные - я их и брал себе.
Так вот, у себя настроил, вылавливал данные. У человека
Я сейчас попытаюсь чуть описать, может сумбурно, но парсингом до этого не занимался...
при выделении мышкой данных прямо в письме - видна табличная структура(правда не видно границ ячеек)
я письмо считываю как обычный текст
у меня - до текста стоит перевод строки(почему то так)
у человека - этого перевода строки НЕТ.

Я вот подумал, может письмо парсить не как текстовое, а HTML?
Если это разумно - киньте пожалуйста кусок кода для парсинга письма в html формате.
Может так будет стабильнее работать на разных компах
С человеком у нас разные локализации и винды и акса

Т.е. данные, которые нужно получить где-то в ячейке HTML-таблицы?
Самое простое, Split-ом
Код: vbnet
1.
2.
3.
4.
5.
6.
vTab = split(sTxt, "<table ")
sTxt = vTab(1) ' вся таблица
vRow = split(sTxt, "</tr>") ' все строки таблицы
sTxt = vRow(0) ' первая строка таблицы
vCol = split(sTxt, "</td><td>") ' все ячейки первой строки таблицы
sTxt = vCol(2) ' содержимое третьего поля (ячейки) первой строки


В крайних ячейках только будет немного HTML-"мусора", но его не сложно убрать

Можно ещё сохранить HTML-содержимое во временный файл, и обращаться, к таблице в нём, запросом (или прилинковать).
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38937284
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Outlook,


Outlook,Т.е. данные, которые нужно получить где-то в ячейке HTML-таблицы?
сам не знаю, не умею посмотреть.
Смотрел в браузере письмо и потом просмотр html кода. А как это программно сделать..
Нва картинке видно, что я подразумеваю под табличной структурой.
И вот вопрос, как тело письма прочитать в формате html. Думаю тогда легко выловлю нужные данные.
И стабильнее будет нужное находить
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38937305
Outlook,
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИгортанOutlook,


Outlook,Т.е. данные, которые нужно получить где-то в ячейке HTML-таблицы?
сам не знаю, не умею посмотреть.
А что ты парсил?
Как получал вот это
ИгортанПри работе с конкретным письмом я считывал его и искал нужные куски текста, например: "AAA Case No.:"?

у MailItem есть свойство - HTMLBody.
В нём тело письма в HTML.
Вот выведи его в окно отладки и покажи здесь.
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38937339
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Outlook,А что ты парсил?
Как получал вот это
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        lngFrom = InStr(1, strBody, "AAA Case No.:") 
        If Nz(lngFrom, 0) <> 0 Then
            lngFrom = lngFrom + Len("AAA Case No.:") 
            lngFrom = InStr(lngFrom + 2, strBody, "" & Chr$(13) & Chr$(10) & "") 
            lngTo = InStr(lngFrom + 2, strBody, "" & Chr$(13) & Chr$(10) & "") 
            strTemp = Trim(Mid(strBody, lngFrom + 2, lngTo - lngFrom - 2))
            AAA = Trim(strTemp)
            If Len(AAA) = 0 Then ResultProcessed = ResultProcessed & "; AAA Case No.: = NULL"
'            Debug.Print "AAA - " & AAA & "///"
        End If



Outlook,у MailItem есть свойство - HTMLBody.
В нём тело письма в HTML.
Ага. Структуру увидел.
Теперь, как я понял, Split мне в помощь
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38939640
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортан,

вобщем после мытарств, вернулся к текстовому варианту.Только теперь перед выдергиванием данных из письма немного подпиливаю Replace структуру(переносы строки, табуляция).

отказался от HTML потому что напоролся на кучу мусора в тегах.Нужно чуть ли не отдельный модуль писать на очистку от мусора. Причем у меня и у человека - мусор принципиально разный. И не факт, что на 3м компе все будет как у нас.
Почему уперся в мусор - при мусоре становится неизвестным ни начало данного, ни его конца. Все облеплено непонятными тегами, - из поиска - эти теги вставляют прогаммы типа ворда для борьбы с вредоносными кодами и пр.
Как то так...
Может кому пригодится
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38939890
Outlook,
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игортанотказался от HTML потому что напоролся на кучу мусора в тегах.Нужно чуть ли не отдельный модуль писать на очистку от мусора. Одна процедура
VBA – Remove HTML Tags from a String
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38939896
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Outlook,,

Вахх
Жаль, что уже в стринге сделать получилось(но есть сомнения по масштабируемости).
Но и так, Outlook,,большое спасибо!)
На досуге поиграю.
А я из за очень слабого знания html не знал что в принципе так "просто".

Я потом сюда обращусь, если чего не догоню...
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38941982
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортан,

попробовал
Outlook,Одна процедура
VBA – Remove HTML Tags from a String
если запихнуть HTMLBody, - получил тоже что и в текстовом варианте - не прокатило

после сплита и выделения нужной данных, но с html мусором процедурка помогла.
Правда вместо тегов остались пробелы, табуляция, переводы строки... и мусор за спецсимволами(должен быть "&" - а остается "&")
В общем то все равно потом остаток дошлифовываю и вырезаю нужное.

Из плюсов - действительно стабильнее ведет себя выделение данных из письма. Сходу письмо прочитал нормально "своей версией", без подбора среднего варианта "для всех". С текстоовым вариантом так не прокатывало.
Из минусов - остался мусор после всех действий с html, который пришлось чистить.
И остаток мусора в самих данных - вероятно вставка перед спецсимволами(&). Тут вопрос не решен на 100%. А не будет ли спецсивол как то обозначен по другому(не так - "&"), единая ли это система?
Просто по отдельным даннным из письма идет поиск в базе и наличие спесимвола, подобного "&", убьет напроч импорт данных в базу.
Как бы это и есть самое слабое звено.
Пока в рабочем проекте не менял на обработку через html. Но в архивчик себе положил, может в тупик попаду, пригодится, да и статистика может по спецсимволам наберется...

п.с. в предпросмотре обнаружил, что обрамление спецсивола - на форуме вырезало,
вот он(удалить нижнее подчеркивание - будет оригинал) - "&_amp;"
пробовал немного разобраться в скрипте - пока глухо...
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
    With oRegEx
        .Pattern = "<!*[^<>]*>"    'html tags and comments
        .Global = True
        .IgnoreCase = True
        .MultiLine = True
    End With
RemoveHTML = oRegEx.Replace(MyStr, "")



может кто подскажет, что подставить для обрезки и этого тега
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38942016
Outlook,
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игортан,

Можно ещё через MSHTML.HTMLDocument сделать.
Он и с тегами "справится" и кодированные спецсимволы понимает.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Sub test()
    Dim htmlDoc As MSHTML.IHTMLDocument
    Dim tagElem
    
    Set htmlDoc = New MSHTML.HTMLDocument
    htmlDoc.write _
        "<html><body>" & vbCrLf & _
        "<table>" & vbCrLf & _
        "<tr><td>1 &</td><td>2 <</td></tr>" & vbCrLf & _
        "<tr><td>3 ></td><td>4 "</td></tr>" & vbCrLf & _
        "</table>" & vbCrLf & _
        "</body></html>"

'    Debug.Print htmlDoc.body.outerHTML
'    Debug.Print "-------------------------------------"
'    Debug.Print htmlDoc.body.outerText
'    Debug.Print "-------------------------------------"
    For Each tagElem In htmlDoc.getElementsByTagName("td")
        Debug.Print tagElem.outerText ', tagElem.outerHTML
    Next
End Sub


Код: vbnet
1.
2.
3.
4.
5.
test
1 &
2 <
3 >
4 "


Создаешь MSHTML.HTMLDocument
Через htmlDoc.write вгружаешь в него MailItem.HTMLBody
И потом, в цикле, по htmlDoc.getElementsByTagName("td") получаешь содержимое ячеек
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #38942019
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Outlook,,

спасибо, пороюсь!
...
Рейтинг: 0 / 0
Outlook ошибка проверки писем
    #39000070
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
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.
If InternetGetConnectedState(0&, 0&) Then
    DoCmd.Hourglass True
    ' получаем объект Outlook
    Set OL_App = CreateObject("Outlook.Application")
    
er = 2
    'получаем Namespace
    Set OL_NameSpace = OL_App.GetNamespace("MAPI")
    '?OL_NameSpace.CurrentUser
er = 3
    ' получаем ссылку на папку Черновики
    Set OL_FolderMail = OL_NameSpace.GetDefaultFolder(olFolderDrafts)
    Set myItems = OL_FolderMail.Items
    
er = 4
    ' перебираем все письма в папке
    For Each OL_ItemMail In myItems
        If OL_ItemMail.Class = olMail Then
            Set OL_ItemMail1 = OL_ItemMail
            With OL_ItemMail1
er = 5
                MySubject = Trim(Mid(.Subject, 1, 27))
                '   выборка данных для записи или сравнения
                If MySubject = "INITIAL SETTLEMENT PROPOSAL" Then
er = 6
                    .Send
                    InitiationMaill = InitiationMaill + 1
                End If
            End With
        End If
    Next
er = 7
        MsgBox "" & InitiationMaill & " Initial settlement offers have been successfully sent.", , "Sending Initiation"
Else
    MsgBox "No internet connection!"
End If

DoCmd.Hourglass False



Господа.
Понимаю, воскресенье, вечер...., но может кто и завтра ответит.
Напоролся на старую проблему, которую думал, что обошел.

Есть письма в папке "Черновики". Например их 20 шт. Из них нужно отправить письма по опред. названию...
И старая проблема ... по мере убытия писем из папки "Черновики" акс выходит из цикла раньше намеченного количества писем.

если проверять myItems.Count после каждой отправки письма, то
с каждым отправленным письмом Count уменьшается
и наступает момент, когда письма еще все не проверены, а акс выходит из цикла
потому что у него в счетчике остается 16(например) писем.
В паке в этот момент реально 16 писем
Но на начало процесса их было 20.
К сожалению не знаю как к этой проблеме подойти...
Запоминать количество в начале...но ведь это цикл не по long и по коллекции писем, как я понимаю.

Одним предложением:
Как пройти циклом ВСЕ письма. Как вариант, чтобы не обновлялось количество писем в коллекции...
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Outlook ошибка проверки писем
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]