Как в письме с Html добавить картинку ?

  • Автор темы PavelT100
  • Дата начала
P

PavelT100

LN 7.0.3. Отправляю письмо с HTML нижеприведенным способом, а хочется еще вставить картинки чтобы они были видны на странице. Как это можно сделать ? Мне представляется, что их надо приаттачить, а потом как то хитро указать в теге IMG ссылку на аттачмент. А как это правильно сделать я не знаю. Или может быть есть другие технологии ?

Код:
Dim s As New NotesSession
Dim db As NotesDatabase
Set db = s.CurrentDatabase

Dim stream As NotesStream
Dim body As NotesMIMEEntity
Dim html As Variant

Dim mail As NotesDocument 
Set mail=db.CreateDocument
mail.Subject="Nouveau commentaire sur l' idée!"

s.ConvertMIME = False
Set body = mail.CreateMIMEEntity("Body")

html = "<H1>Test</H1>"
html = html & "<p><img src=?????????????????? ></p>" 'вот что надо записать, чтобы вставить картинку в это место
html = html & doc.Subject(0) & "<br>"
html = html & sArAdress(j) & Cstr(Len(sArAdress(j)))
j=j+1
Set stream = s.CreateStream
Call stream.WriteText(html)
Call body.SetContentFromText(stream, {text/html; charset="UTF-8"}, ENC_IDENTITY_BINARY)
Call mail.ComputeWithForm(False, False)
Call stream.Close
Set stream = Nothing
s.ConvertMIME = True

mail.From = "idees@winpharma.com"
mail.Principal = "idees@winpharma.com"
mail.SendTo="tomsky@everys.com"
Call mail.Send(False)
 
V

vladoos

сам недавно изучал похожую проблему... и нашёл интересную ветку на интертрастовском формуе, мне не помогло, но моло ли.....

 
P

PavelT100

вот здесь скачал базу лотуса с агентом который посылает письмо HTML с картинкой, но он не работает, письмо посылается, открывается но вместо картинки квадратик с крестиком - что я неправильно сделал ?

Код:
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim parent As NotesMimeEntity
Dim child1 As NotesMimeEntity
Dim child2 As NotesMimeEntity
Dim header As NotesMimeHeader
Dim dataDir As String
Dim stream As NotesStream
Dim prompt As String
Dim recipients As String

session.ConvertMime = False	' We do want Notes to convert MIME to Rich Text

Set db = session.CurrentDatabase
Set doc = db.CreateDocument
Call doc.ReplaceItemValue("Form", "Memo")
Call doc.ReplaceItemValue("Subject", "Doc created " & Format$(Now, "dd mmm yyyy hh:nn:ss AM/PM"))

' Figure out the path to the domino\icons directory under the user's data directory
dataDir = "D:\Clients\"
If Right(dataDir, 1) <> "\" Then dataDir = dataDir & "\"	

' Create all the Entities - one parent, two children. 
Set parent = doc.CreateMIMEEntity
Set child2 = parent.CreateChildEntity
Set child1 = parent.CreateChildEntity(child2)	' Create so that children 1 & 2 are siblings

' Update all the header information. At this point we cannot create another "Content-Type"
' entity on the parent, but we can update the existing value
Set header = parent.GetNthHeader("Content-Type")
Call header.SetHeaderValAndParams({multipart/alternative; boundary="} & child1.BoundaryStart & {"})
Set header = child2.CreateHeader("Content-ID")
Call header.SetHeaderVal("<_1_" & doc.UniversalID & ">")

' Build the entire HTML table, including a reference to an image that is yet to come (its ID 
' was created above). This HTML goes into child 1
Set stream = session.CreateStream
Call stream.WriteText({<img src=cid:_1_} & doc.UniversalID & {>})
Call child1.SetContentFromText(stream, "text/html", ENC_NONE)
Call stream.Truncate

' Bring the image into its entity (parent 2)
Set stream = session.CreateStream
If Not stream.Open(dataDir & "ex.gif", "binary") Then
Msgbox "Could not open " & dataDir & "ex.gif", 16, "Open failed"
Goto ExitSub
End If
If stream.Bytes = 0 Then
Msgbox "File " & dataDir & "meapp.gif" & " has no content", 16, "No Content"
Goto ExitSub
End If
Call child2.SetContentFromBytes(stream, "image/gif", ENC_NONE)
Call child2.EncodeContent(ENC_BASE64)
Call stream.Close

' Prompt for the recipients	
recipients = "tomsky@everys.com"
Call doc.Send(False, Split(recipients, ","))
ExitSub:
session.ConvertMime = True	' Reset the value
End Sub
 
K

Kee_Keekkenen

смешно.. вообще-то, чтобы в письме отображалась картинка при открытии письма, то картинка должна быть где-то выложена в инете - постоянно доступна, например, делается рассылка (новости) со ссылкой на новостной портал и в письме есть лого портала, а лого висит на сайте новостного портала..
 
O

Omh

Kee_Keekkenen
Ну, я бы сказал, необязательно.
Можно приложить картинку к письму (в base64), а в теле письма сделать ссылку на неё.
Всё это делается через NotesMIMEEntity, так что PavelT100 на правильном пути :)
 
P

PavelT100

Kee_Keekkenen
Можно приложить картинку к письму (в base64), а в теле письма сделать ссылку на неё.
Именно так. С письмами можно работать и не находясь в онлайне, именно для этого и передается картинка в письме, а не делается на нее ссылка.
У меня почти все получается, при более тщательном тестировании вышеприведенного кода в Outlook Express и в мозиле картинка отображается, а вот если я посылаю тоже самое в MS Office Outlook 2003, то там она не отображается.
 
O

Omh

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

PavelT100

Ну все, добил я эту задачу!

В вышеприведенном коде надо заменить:
Код:
Call header.SetHeaderValAndParams({multipart/alternative; boundary="} & child1.BoundaryStart & {"})
на
Код:
Call header.SetHeaderValAndParams({multipart/related; boundary="} & child1.BoundaryStart & {"})

После этого письмо стало правильно отображаться, в Outlook и мозилла. В Outlook Express тоже изображение не нарушилось. Вообщем во всех доступных мне сейчас почтовых клиентах все правильно отображается.
 
Мы в соцсетях:

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