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

Тема в разделе "Lotus - Программирование", создана пользователем PavelT100, 9 июн 2008.

  1. PavelT100

    PavelT100 Well-Known Member

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

    Код (Text):
    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)
     
  2. vladoos

    vladoos Гость

  3. PavelT100

    PavelT100 Well-Known Member

    Регистрация:
    9 июл 2007
    Сообщения:
    105
    Симпатии:
    0
    вот здесь http://my.advisor.com/doc/17381?open&p=6&pid=ztdbms скачал базу лотуса с агентом который посылает письмо HTML с картинкой, но он не работает, письмо посылается, открывается но вместо картинки квадратик с крестиком - что я неправильно сделал ?

    Код (Text):
    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
     
  4. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    смешно.. вообще-то, чтобы в письме отображалась картинка при открытии письма, то картинка должна быть где-то выложена в инете - постоянно доступна, например, делается рассылка (новости) со ссылкой на новостной портал и в письме есть лого портала, а лого висит на сайте новостного портала..
     
  5. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Kee_Keekkenen
    Ну, я бы сказал, необязательно.
    Можно приложить картинку к письму (в base64), а в теле письма сделать ссылку на неё.
    Всё это делается через NotesMIMEEntity, так что PavelT100 на правильном пути :)
     
  6. PavelT100

    PavelT100 Well-Known Member

    Регистрация:
    9 июл 2007
    Сообщения:
    105
    Симпатии:
    0
    Именно так. С письмами можно работать и не находясь в онлайне, именно для этого и передается картинка в письме, а не делается на нее ссылка.
    У меня почти все получается, при более тщательном тестировании вышеприведенного кода в Outlook Express и в мозиле картинка отображается, а вот если я посылаю тоже самое в MS Office Outlook 2003, то там она не отображается.
     
  7. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Я помню такое реализовывал, но за давностью этой работы уже нифига не помню и поэтому помочь советом не могу.
    Но точно знаю, что это реализуемо.
     
  8. PavelT100

    PavelT100 Well-Known Member

    Регистрация:
    9 июл 2007
    Сообщения:
    105
    Симпатии:
    0
    Ну все, добил я эту задачу!

    В вышеприведенном коде надо заменить:
    Код (Text):
    Call header.SetHeaderValAndParams({multipart/alternative; boundary="} & child1.BoundaryStart & {"})
    на
    Код (Text):
    Call header.SetHeaderValAndParams({multipart/related; boundary="} & child1.BoundaryStart & {"})
    После этого письмо стало правильно отображаться, в Outlook и мозилла. В Outlook Express тоже изображение не нарушилось. Вообщем во всех доступных мне сейчас почтовых клиентах все правильно отображается.
     
Загрузка...

Поделиться этой страницей