картинки в mime письме

Irina

Green Team
31.05.2019
145
2
BIT
0
если в тело письма вставляется картинка
Код:
<img src="cid:test.jpg">

    Call stream.Open("...test.jpg")
    Call bodyChild.SetContentFromBytes(stream,"image/jpg",ENC_NONE)
    Call stream.Close
    Set header = bodyChild.CreateHeader("Content-ID")
    Call header.SetHeaderVal("<test.jpg>")
как правильно добавить 2 и больше картинки в тело письма?
 

azzza

Green Team
26.04.2011
68
3
BIT
17
Подобно:
Код:
objLN_Session.ConvertMime = False

...

'создаем MIMEEntity верхнего уровня, все остальные MIMEEntity будут "вложены" в него

Set objLN_MimeRoot = objLN_MailDoc.CreateMIMEEntity

'в MIMEEntity создаем дочерний ему MIMEEntity

Set objLN_Mime = objLN_MimeRoot.CreateChildEntity

'Находим заголовок с именем Content-Type

Set objLN_header = objLN_MimeRoot.Getnthheader("Content-Type")

'присваиваем заголовку значение "multipart/related"

Call objLN_header.SetHeaderVal("multipart/related")

...

' создаем stream

Set objLN_Stream = objLN_Session.CreateStream

'в stream записываем текст нашего HTML

Call objLN_Stream.WriteText(str_Html)

'записываем в дочерний MIMEEntity текстовые данные из stream и закрываем stream

Call objLN_Mime.SetContentFromText(objLN_Stream, "text/html;charset=UTF-8", ENC_NONE)

Call objLN_Stream.Close


' Вставляем картинку logotype.jpg (она в письме используется 2 раза):

'в  MIMEEntity верхнего уровня создаем дочерний ему MIMEEntity

Set objLN_Mime = objLN_MimeRoot.CreateChildEntity

' Открываем Stream с указанием пути к картинке

Call objLN_Stream.Open(str_Path & "\logotype.jpg")

'записываем в дочерний MIMEEntity из stream указав что это JPG и закрываем stream

Call objLN_Mime.SetContentFromBytes(objLN_Stream, "image/jpg", ENC_NONE)

Call objLN_Stream.Close

Call objLN_Mime.EncodeContent(ENC_BASE64)

'Создаем заголовок с именем "Content-ID" и присваиваем ему значение равное имени по которому мы будем

'ссылаться на эту картинку в HTML (img src='cid:logotype.jpg')

Set objLN_header = objLN_Mime.CreateHeader("Content-ID")

Call objLN_header.SetHeaderVal("<logotype.jpg>")

' Вставляем повторно картинку logotype2.jpg :
'в  MIMEEntity верхнего уровня дочерний ему объект уже есть
' Открываем Stream с указанием пути к картинке
Call objLN_Stream.Open(str_Path & "\logotype2.jpg")
'записываем в дочерний MIMEEntity из stream указав что это JPG и закрываем stream
Call objLN_Mime.SetContentFromBytes(objLN_Stream, "image/jpg", ENC_NONE)
Call objLN_Stream.Close
Call objLN_Mime.EncodeContent(ENC_BASE64)
'Создаем заголовок с именем "Content-ID" и присваиваем ему значение равное имени по которому мы будем
'ссылаться на эту картинку в HTML (img src='cid:logotype2.jpg')
Call objLN_header.SetHeaderVal("<logotype2.jpg>")

Call objLN_MailDoc.CloseMIMEEntities(True, "Body")

Call objLN_MailDoc.ComputeWithForm(False, False)

Call objLN_MailDoc.Send(False)

objLN_Session.ConvertMime = True
 
Последнее редактирование:
  • Нравится
Реакции: Irina

Irina

Green Team
31.05.2019
145
2
BIT
0
Может сразу в stream загрузить все картинки?
да я понимаю, что так надо, но не могу найти как их все сразу загрузить и как потом именно нужную выбирать

Подобно:
Код:
objLN_Session.ConvertMime = False

...

'создаем MIMEEntity верхнего уровня, все остальные MIMEEntity будут "вложены" в него

Set objLN_MimeRoot = objLN_MailDoc.CreateMIMEEntity

'в MIMEEntity создаем дочерний ему MIMEEntity

Set objLN_Mime = objLN_MimeRoot.CreateChildEntity

'Находим заголовок с именем Content-Type

Set objLN_header = objLN_MimeRoot.Getnthheader("Content-Type")

'присваиваем заголовку значение "multipart/related"

Call objLN_header.SetHeaderVal("multipart/related")

...

' создаем stream

Set objLN_Stream = objLN_Session.CreateStream

'в stream записываем текст нашего HTML

Call objLN_Stream.WriteText(str_Html)

'записываем в дочерний MIMEEntity текстовые данные из stream и закрываем stream

Call objLN_Mime.SetContentFromText(objLN_Stream, "text/html;charset=UTF-8", ENC_NONE)

Call objLN_Stream.Close


' Вставляем картинку logotype.jpg (она в письме используется 2 раза):

'в  MIMEEntity верхнего уровня создаем дочерний ему MIMEEntity

Set objLN_Mime = objLN_MimeRoot.CreateChildEntity

' Открываем Stream с указанием пути к картинке

Call objLN_Stream.Open(str_Path & "\logotype.jpg")

'записываем в дочерний MIMEEntity из stream указав что это JPG и закрываем stream

Call objLN_Mime.SetContentFromBytes(objLN_Stream, "image/jpg", ENC_NONE)

Call objLN_Stream.Close

Call objLN_Mime.EncodeContent(ENC_BASE64)

'Создаем заголовок с именем "Content-ID" и присваиваем ему значение равное имени по которому мы будем

'ссылаться на эту картинку в HTML (img src='cid:logotype.jpg')

Set objLN_header = objLN_Mime.CreateHeader("Content-ID")

Call objLN_header.SetHeaderVal("<logotype.jpg>")

' Вставляем повторно картинку logotype2.jpg :
'в  MIMEEntity верхнего уровня дочерний ему объект уже есть
' Открываем Stream с указанием пути к картинке
Call objLN_Stream.Open(str_Path & "\logotype2.jpg")
'записываем в дочерний MIMEEntity из stream указав что это JPG и закрываем stream
Call objLN_Mime.SetContentFromBytes(objLN_Stream, "image/jpg", ENC_NONE)
Call objLN_Stream.Close
Call objLN_Mime.EncodeContent(ENC_BASE64)
'Создаем заголовок с именем "Content-ID" и присваиваем ему значение равное имени по которому мы будем
'ссылаться на эту картинку в HTML (img src='cid:logotype2.jpg')
Call objLN_header.SetHeaderVal("<logotype2.jpg>")

Call objLN_MailDoc.CloseMIMEEntities(True, "Body")

Call objLN_MailDoc.ComputeWithForm(False, False)

Call objLN_MailDoc.Send(False)

objLN_Session.ConvertMime = True
вроде также и сделано
но у меня вообще нет картинок
Код:
    Call stream.Open("test1.jpg" )
    Call bodyChild.SetContentFromBytes(stream,"image/jpg",ENC_NONE)
    Call stream.Close
    Call bodyChild.EncodeContent(ENC_BASE64)
    Set header = bodyChild.CreateHeader("Content-ID")
    Call header.SetHeaderVal("<test1.jpg>")
    
Call stream.Open("test2.jpg")
Call bodyChild.SetContentFromBytes(Stream, "image/jpg", ENC_NONE)
Call stream.Close
Call bodyChild.EncodeContent(ENC_BASE64)
Call header.SetHeaderVal("<test2.jpg>")
 

Irina

Green Team
31.05.2019
145
2
BIT
0
Код:
        Set body = doc.CreateMIMEEntity
        Set bodyChild = body.CreateChildEntity
        Set header = body.Getnthheader("Content-Type")
        Call header.setHeaderVal("multipart/related")
        Set stream = session.CreateStream


        Call stream.WriteText (
        .............
       
        Call bodyChild.SetContentFromText(stream, "text/html;charset=utf-8", ENC_NONE)
        Call stream.Close
   
        Set bodyChild = body.CreateChildEntity
         Call stream.Open("test1.jpg" )
    Call bodyChild.SetContentFromBytes(stream,"image/jpg",ENC_NONE)
    Call stream.Close
    Call bodyChild.EncodeContent(ENC_BASE64)
    Set header = bodyChild.CreateHeader("Content-ID")
    Call header.SetHeaderVal("<test1.jpg>")
   
Call stream.Open("test2.jpg")
Call bodyChild.SetContentFromBytes(Stream, "image/jpg", ENC_NONE)
Call stream.Close
Call bodyChild.EncodeContent(ENC_BASE64)
Call header.SetHeaderVal("<test2.jpg>")

        .......

но картинок вообще нет
 

Irina

Green Team
31.05.2019
145
2
BIT
0
в хтмл надо ссылаться на cid
стрим с картинками д.б. бинарный (тип ENC_IDENTITY_BINARY)
<img src="cid:1photo.jpg" alt='test1' >
<img src="cid:2photo.jpg" alt='test2' >
в тело письма вставляю так
если делать только один раз
Код:
Call stream.Open("test1.jpg")
Call bodyChild.SetContentFromBytes(Stream, "image/jpg",  ENC_IDENTITY_BINARY )
то оно работает
только добавляю
Код:
Call stream.Open("test2.jpg")
Call bodyChild.SetContentFromBytes(Stream, "image/jpg",  ENC_IDENTITY_BINARY )
перестают вообще добавляться картинки
 
Последнее редактирование:

Irina

Green Team
31.05.2019
145
2
BIT
0
в хтмл надо ссылаться на cid
стрим с картинками д.б. бинарный (тип ENC_IDENTITY_BINARY)
по ссылке что-то не пойму , как использовать метод addImage , если вставлять картинку <img src="cid:imagename.gif" /> и где указать именно путь к самим картинкам
 

Irina

Green Team
31.05.2019
145
2
BIT
0
надо было отвлечься на другую работу, а потом вернуться к этой. я просто упустила Set bodyChild = body.CreateChildEntity
теперь отображаются все картинки

правда не в тему, но может поможете
если в самом письме указать
Код:
Set header = body.getNthHeader("Subject")
Call header.SetHeaderValAndParams("charset=utf-8")
Call header.SetHeaderVal("Ы І Ї")
то приходит |Ы|І|Ї
а как-то можно именно тему в нужной кодировке указать ?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 983
611
BIT
454
надо было отвлечься на другую работу, а потом вернуться к этой. я просто упустила Set bodyChild = body.CreateChildEntity
теперь отображаются все картинки

правда не в тему, но может поможете
если в самом письме указать
Код:
Set header = body.getNthHeader("Subject")
Call header.SetHeaderValAndParams("charset=utf-8")
Call header.SetHeaderVal("Ы І Ї")
то приходит |Ы|І|Ї
а как-то можно именно тему в нужной кодировке указать ?
определенно сказать - где в нотусне что-то не заладилось, сложно...
там много всяких переконвертаций
проще - поставьте сторонний меэлер и шлите через него ;)
либо: долго приводите в соответствие кодировку на клиенте, обработку заголовков на сервере домины , играйте с версиями домины и кодировки в ОС
пример траблы
 

Irina

Green Team
31.05.2019
145
2
BIT
0
определенно сказать - где в нотусне что-то не заладилось, сложно...
там много всяких переконвертаций
проще - поставьте сторонний меэлер и шлите через него ;)
либо: долго приводите в соответствие кодировку на клиенте, обработку заголовков на сервере домины , играйте с версиями домины и кодировки в ОС
пример траблы
"проще - поставьте сторонний меэлер и шлите через него ;) "
а где мне указать этот сторонний?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 983
611
BIT
454
"проще - поставьте сторонний меэлер и шлите через него ;) "
а где мне указать этот сторонний?
postfix или готовый комплект
отключить бесполезный (в бесплатном варианте) авер и все будет замечательно ;)
библиотек для отправки по smtp достаточно, javamail как пример
схема:
internet -> pmg -> domino
domino -> pmg -> internet это необязательно
код -> pmg -> internet
и никаких рулесов по фильтрации спама на стороне домины и гимора с маймом на стороне ЛС
в коде по ссылкеprops.put("mail.smtp.port", "25"); порт (для pgm) будет 26 (по-умолчанию, можно настроить и другой)
1578589966847.png
 
Последнее редактирование:
  • Нравится
Реакции: Irina
Мы в соцсетях:

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