Как вставить изображение в электронное письмо с помощью lotusscript? - PullRequest
0 голосов
/ 03 марта 2020

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

И у меня есть форма с полем для расширенного текста, куда пользователи будут прикреплять изображение.

У меня проблема с ним:

  • Мне нужно, чтобы изображение показывалось в электронном письме, и оно должно быть в правильном месте. Вложение появляется в начале.
  • И другая проблема: метод не определил поле расширенного текста. Поэтому мне нужно знать, как отображать только указанное поле c.

Способ отправки HTML почтой

' Sub to send an email with attachments
Public Sub SendEmailHTMLAttachments()

    ' General variables
    Dim ws As New NotesUIWorkspace
    Dim ns As New NotesSession
    Dim maildoc As NotesDocument
    Dim doc As NotesDocument
    Dim body As NotesMIMEEntity
    Dim mh As NotesMIMEHeader
    Dim mc As NotesMIMEEntity
    Dim stream As NotesStream
    Dim link As New Link

    Set maildoc = ws.Currentdocument.Document
    Set doc = ws.Currentdocument.Document

    ' Dont convert text to rich text
    ns.ConvertMIME = False

    ' Configure the mail
    maildoc.Form = "Memo"
    maildoc.Subject = me.m_subject
    maildoc.SendTo = me.m_sendto
    maildoc.CopyTo = me.m_sendtocc
    maildoc.blindCopyTo = me.m_sendtobcc

    ' Create the MIME headers
    Set body = maildoc.Createmimeentity
    Set mh = body.Createheader({MIME-Version})
    Call mh.Setheaderval("1.0")
    Set mh = body.Createheader("Content-Type")
    Call mh.Setheadervalandparams({multipart/alternative})

    ' Send the plain text part first
    Set mc = body.Createchildentity()
    Set stream = ns.Createstream()
    Call mc.Setcontentfromtext(stream, {text/plain}, ENC_NONE)

    ' Now send the HTML part. Order is important!
    Set mc = body.Createchildentity()
    Set stream = ns.Createstream()
    Call stream.Writetext(|<html lang="es">|)
    Call stream.Writetext(|<head>|)
    Call stream.Writetext(|<meta name="viewport" content="width=device-width, initial-scale=1.0">|)
    Call stream.Writetext(|<meta http-equiv="X-UA-Compatible" content="ie=edge">|)
    Call stream.Writetext(|</head>|)
    Call stream.Writetext(|<body>|)
    Call stream.Writetext(|<div style="background-color: #897d7d; border-radius: 0.5em; width: auto; height: 50px;">
                        <h1 style="color: white; text-align: center; padding: 0.1em;
                        font-family: Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;">| & me.m_header & |</h1>
                        </div>|)
    Call stream.Writetext(|<p>| & me.m_body & |</p>|)
    Call stream.Writetext(|<a href="| & link.GetLink() & |" target="_blank"
                        style="background-color: #A01314; color: white; padding: 14px 25px; text-align: center;
                        text-decoration: none; display: inline-block; border-radius: 1em;">Link to Form</a>|)
    Call stream.Writetext(|</body>|)
    Call stream.Writetext(|</html>|)
    Call mc.Setcontentfromtext(stream, {text/html;charset="utf-8"}, ENC_NONE)

    ' Close the stream
    Call stream.Close()

    ' Send it
    Call maildoc.Send(False)

    Delete link

End Sub

Событие для отправки электронного письма (Кнопка)

Sub Click(Source As Button)

    Dim subject As String
    Dim header As String
    Dim body As String
    Dim sendto(1 To 9) As String
    Dim sendtocc(1 To 3) As String
    Dim sendtobcc(1 To 3) As String
    Dim alert As String
    Dim flagalert As Boolean

    subject = "Form Lotus Notes: Test"
    header = "Form Lotus Notes: Test"
    body = "This is an example email using <b>HTML</b>."
    body = body + "<p>Url: <a href='www.google.es'>Google</a></p>."
    sendto(1) = "people"
    alert = ""

    Dim msj As New Mensaje(subject, header, body, sendto, "", "", alert, False)

    Call msj.SendEmailHTMLAttachments

    Delete msj

End Sub

Пример, когда я получаю электронное письмо

enter image description here

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Одним из способов решения этой проблемы является использование apache обыкновенной электронной почты java библиотеки https://commons.apache.org/proper/commons-email/

0 голосов
/ 04 марта 2020

Что вы делаете неправильно, вы создаете многочастное / альтернативное сообщение без данных об изображении, и вы полагаетесь на Domino, чтобы каким-то образом выяснить, что вы действительно хотите сделать. Это невозможно.

Вы должны создать все сообщение MIME с составной / смешанной частью, которая содержит составные / связанные и составные / альтернативные части.

Составная / связанная часть должна содержать часть image / gif (или некоторый другой допустимый формат изображения), которая имеет Content-disposition: Embedded; filename = xxx, и вам нужно будет направить закодированные байты изображения в эту часть - что непросто, и у меня нет кода, чтобы показать вам, как это сделать. Я думаю, что DXL - это, вероятно, способ, которым большинство людей подошло к этому, хотя я почти уверен, что MIDAS Rich Text API (не бесплатный) делает это намного проще.

Составная / альтернативная часть - это то, что у вас есть в том, что он содержит ваши текстовые / обычные и текстовые / html части, но ваша текстовая / hteml часть должна включать тег img, который правильно ссылается на данные изображения, которые находятся внутри multipart / related, используя src = cid: xxx, где xxx соответствует тому, что вы указали в имени файла = xxx для изображения.

...