Doc.getitemvalue("body") не находит текст

aguch

New member
23.07.2015
4
0
#1
Друзья ! Попал в тупиковую ситуация не могу понять куда копать...
есть vbs- скрипт, который проверяет почтовую базу, находит данные (регулярные выражения) и перекладывает их в БД...
К содержимому обращается собственно st=doc.GetItemValue("Body")(0). Все бы ничего результат чтения некоторых писем выглядит (st) примерно так: " C.htm image001.jpg image002.png ", хотя письмо читабельно и данные содержит.
Как вложение C.htm не извлекается (секция FILE отсутствует). Как прочитать заветную строчку не представляю. Выглядит это вкратце так:
Код:
Set session = CreateObject("Lotus.NotesSession")
Call session.Initialize("******")
server = session.GETENVIRONMENTSTRING("MailServer", True)
mailfile = session.GETENVIRONMENTSTRING("MailFile", True)
Set Db = session.GetDatabase(server, mailfile)
Set dc = db.AllDocuments
Set doc = dc.GetLastDocument()
 
 
 
 
While (Not(doc Is Nothing))
If (doc.HasItem("Body") Or doc.HasItem("Subject")) And doc.HasItem("From") Then 
st=doc.GetItemValue("Body")(0)
....
End If
Wend
Спасибо!
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#2
если только текст - читать
Для просмотра контента необходимо: Войти или зарегистрироваться
внимательно
или получать DXL и его обрабатывать, здесь куча вариантов была (вплоть до получения html и pdf)
но в этом случае (раз настаиваете на VB) - пойдете на форумы МСпердуляторов, по обработке хмл и получения из них того что нужно
классы для
Для просмотра контента необходимо: Войти или зарегистрироваться
можно отмести сразу (глюкав и сложен в использовании)
[DOUBLEPOST=1437743779,1437743553][/DOUBLEPOST]
некоторых писем выглядит (st) примерно так: " C.htm image001.jpg image002.png
это майм и можно пытать его, через соответ. классы ... - но вариант КМК ужасен
в этом случае ДХЛ может оказаться более удобным, хотя можно пересохранять доки как РТ, что на мой взгляд - тоже неайс
 
Последнее редактирование модератором:

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#3
для майма есть:
Для просмотра контента необходимо: Войти или зарегистрироваться

и это
Для просмотра контента необходимо: Войти или зарегистрироваться

но далее начнется получение текста из стрима ;)
[DOUBLEPOST=1437746441,1437746349][/DOUBLEPOST]для java
Для просмотра контента необходимо: Войти или зарегистрироваться
сразу текст
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#5

garrick

Lotus team
26.10.2009
894
61
#6
Для просмотра контента необходимо: Войти или зарегистрироваться

- If the NotesEmbeddedObject is a file attachment, this property returns the file name of the original file.

...или я не о том?
[DOUBLEPOST=1437999291,1437999083][/DOUBLEPOST]Если речь идёт о теле письма, то ещё можно попробовать
Для просмотра контента необходимо: Войти или зарегистрироваться
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#7
Если речь идёт о теле письма, то ещё можно попробовать NotesMIMEEntity
ну вот я о том и писал
[DOUBLEPOST=1438002973,1438002887][/DOUBLEPOST] проблема в том - что тело письма, программно, видно как аттач, с к-л именем...
ну т.е. - майм
 

aguch

New member
23.07.2015
4
0
#8
Спасибо !
NotesMIMEEntity - как раз то
правда GetContentAsText и GetEntityAsText - это не наш метод :) (они для text/plain MIME, а у меня оказался multipart/related). GetNextEntity - вот чем я в итоге сделал. И ключевая ошибка, из-за которой я сам сразу не разобрался, был переключатель session.ConvertMIME = False/True.
Этого привело к новой проблеме: мне приходится разбирать письма с ConvertMIME = False отмечая ID писем с ".htm". А потом заново создавать сессию с ConvertMIME = True перебирать базу заново обрабатывая уже только письма из списка....
Как то это не рационально.
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#9
Последнее редактирование модератором:

aguch

New member
23.07.2015
4
0
#10
В общем сейчас это выглядит примерно вот так и даже работает. С DXL попробую разобраться....
Код:
	Const ForReading = 1, ForWriting = 2, ForAppending = 8
	Set fso = CreateObject("Scripting.FileSystemObject")Set ff = fso.CreateTextFile(unufile, True)
	tmpfile="#temp"
	Set tt = fso.CreateTextFile(tmpfile, True)
 
	Set session = CreateObject("Lotus.NotesSession")
	Call session.Initialize("****")
	server = session.GETENVIRONMENTSTRING("MailServer", True)
	mailfile = session.GETENVIRONMENTSTRING("MailFile", True)'"mail\ps.nsf" '
	session.ConvertMIME = True
	Set Db = session.GetDatabase(server, mailfile)
	Set dc = db.AllDocuments
	Set doc = dc.GetLastDocument()
 
	While (Not(doc Is Nothing))
		If (doc.HasItem("Body") Or doc.HasItem("Subject")) And doc.HasItem("From") Then
			st=doc.GetItemValue("Body")(0)
			If InStr(st, ".htm" ) <>0 Or InStr(st, ".html" ) <>0 Then
				tt.writeline id
			End If
			....
		End If
		Set doc = dc.GetPrevDocument(doc)
	Wend
	
	Set Db = Nothing
	Set Session = Nothing
 
	'MIME
 
	Set rtt = fso.OpenTextFile("#temp", ForReading)
	stt = rtt.ReadAll
	If Len(stt) > 0 Then
 
		Set session = CreateObject("Lotus.NotesSession")
		Call session.Initialize("****")
		session.ConvertMIME = False
		Set Db = session.GetDatabase(server, mailfile)
		Set dc = db.AllDocuments
		Set doc = dc.GetLastDocument()
 
		While (Not(doc Is Nothing))
			id=doc.NoteID   
			If InStr(stt,id) Then
				Set mime = doc.GetMIMEEntity
				If Not mime Is Nothing Then
					Set child = mime.GetNextEntity'(SEARCH_BREADTH)
					While Not(child Is Nothing)
						Set mime = child
						......
						Set child = mime.GetNextEntity'(SEARCH_BREADTH)
					Wend
				End If
				.....
			End If
			Set doc = dc.GetPrevDocument(doc)
		Wend
		rtt.Close
		session.ConvertMIME = True
		Set Db = Nothing
		Set Session = Nothing
	End If
Еще раз спасибо!
 
Последнее редактирование модератором:

aguch

New member
23.07.2015
4
0
#11
А вот EmbeddedObjects с последующим ExtractFile - сохраняет только часть htm Видимо остальные это не вложения(?)
И я не понял отличия oFile.Name от oFile.Source?