• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Письмо как Html + аттачмент (MIME)

  • Автор темы Gor
  • Дата начала
G

Gor

Здравствуйте All!

Немного затупил с отправкой письма.

Надо формировать письмо в бэке агентом на сервере в определённом стиле + к этому письму прикладывать определённый аттач.

Пошёл путём через MIME.

Код:
	Dim mime As NotesMIMEEntity
Dim memo As NotesDocument
Set memo = mdb.CreateDocument	


Dim texthtml As NotesStream		
htmltext = {<body>
<br>
<br>
Всем привет
<br>
<br>
</body>}
Set texthtml = session.CreateStream
texthtml.WriteText htmltext
Set mime = memo.CreateMIMEEntity("Body")
mime.SetContentFromText texthtml, "text/html; charset=Windows-1251", ENC_NONE


memo.Closemimeentities True


memo.Form = "Memo"
memo.From = "Auto рассылка"		
memo.SendTo = "получатель@om.com"
memo.Recipients = "получатель@om.com"


memo.Subject = "Автоматическая рассылка"

Call memo.Save(True, True)

т.е. письмо получается формируется в html, нужным мне, а аттач то сейчас как прикрутить?

ЧЕрез richtext и embededobjects не получается...
 
A

amigolinx

ЧЕрез richtext и embededobjects не получается...
отнюдь. приписал к коду кусочек, все пришпилилось (создал под атачмент отдельный ричтекститем)
Код:
memo.Subject = "Автоматическая рассылка"
'--->
Dim rtitem As NotesRichTextItem	
Set rtitem = New NotesRichTextItem(memo, "att")
Dim object As NotesEmbeddedObject	
Set object = rtitem.EmbedObject(EMBED_ATTACHMENT, "", "c:\tmp\load\test.gif")
'--->
Call memo.Save(True, True)
 
G

Gor

to: amigolinx

Да я уже прикручивал подобный кусочек к коду... Письмо приходит в html нормально, а аттача нет(((

Ради интереса - застопил роутер, глянул в маилбокс - ПИСЬМО ЛЕЖИТ С аттачем!!!!
Включаю роутер - приходит письмо с текстом но без аттача.... Мистика... Голову сломал...

Ещё попробовал убрать кусок кода с Mime и оставить с одной отсылкой аттачмента - Аттачмент прекрасно доходит.

т.е. одно без другого работает, а одновременно нет...

А у меня задача то всего в письме пару строк красным цветом подчеркнуть и аттач прицепить....
 
A

amigolinx

мистика еще и в том что я не смог воспроизвести подобный трабл у себя...
такая мыслишка вот закралась - а если соблюсти все буквально и перед созданием/после создания mime поиграться с session.ConvertMIME = False/True ?
 
30.06.2006
141
5
BIT
0
Gor,

Если тебе надо отправлять письма в формате MIME (например, на внешние адреса), то для прикрепления файлов надо использовать возможности формата MIME.

Использовать функции, связаные c форматом Notes Rich Text (NRT), в данном случае недопустимо, т.к. у тебя письмо должно быть или формата NRT (тогда роутер при отправке его во вне автоматически сконвертирует его в MIME) или MIME (тогда роутер отправит его как есть).

Код полностью описывать долго, вратце можно посмотреть на LDD:


Также можешь поискать в интернете уже готовые для использования классы для работы с MIME в Лотусе, например:

Jake Howlett's CodeStore -
Jake Howlett's CodeStore -

P.S.
На всякий случай, еще не забывай отключать конвертирование MIME в NRT на время создания MIME письма (session.ConvertMime = False)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
216
если в нотусах не конвертятся письма в РТ, а остаются маймами - скрепки не будет
 
G

Gor

to Кирилл Шваб:

Спасибо, практически получилось то, что хотел.

Код:
 '================
Dim memo As NotesDocument
Set memo = mdb.CreateDocument	
Set result = memo.CreateMIMEEntity("Body") 
Dim hdr As NotesMIMEHeader 
Set hdr = result.CreateHeader("Subject") 
Call hdr.SetHeaderValAndParams("SUBJ") 
Set hdr = result.CreateHeader("MIME-Version") 
Call hdr.SetHeaderValAndParams(|1.0|) 

Dim tmp1 As NotesMIMEEntity 
Set tmp1 = result.CreateChildEntity( ) 
' text entity, encoding type ENC_NONE 
Dim stream As NotesStream 

Set stream = session.CreateStream 
stream.WriteText {<body>
<br>
Уважаемый коллега,
<br>
<br>
Dear colleague,

<br>

</body>} 
tmp1.SetContentFromText stream, "text/html", ENC_NONE 

Set tmp1 = result.CreateChildEntity( ) 
Set hdr = tmp1.CreateHeader("Content-Disposition") 
Call hdr.SetHeaderValAndParams(|attachment; filename=|+ filename$) 
Set stream = session.CreateStream 
stream.Open pathName$+ filename$, "binary" 
tmp1.SetContentFromBytes stream, "application/octet-stream", ENC_BINARY 
tmp1.EncodeContent ENC_BASE64 
Call memo.CloseMIMEEntities(True, "Body")

'===============



memo.Form = "Memo"
memo.From = "рассылка"	
memo.SendTo = "123@rambler.com"
memo.Recipients = "123@rambler.com"

Call memo.Save(True, True)

Текст Письма есть и аттачмент цепляется, НО почему то русский текст - Уважаемый коллега,

отображается как ????????? ???????,

С кодировкой что то не то?

Куда копать??
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
216
вот:

Код:
Call mime.SetContentFromText(stream,"text/html;charset=windows-1251",ENC_IDENTITY_8BIT)

и вот на будущее :(
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!