Notes邮件显然是支持HTML/MIME的了。在Notes客户端RTF域里面写的邮件无论是文本、图片还是附件都能直接转为MIME发送出去,在Web下写在HTML编辑器里面的东西也能转成MIME的发出去。如何在程序里面发送HTML/MIME邮件呢?其实也很简单,就是用到 Domino的两个类:NotesMimeEntity和NotesMimeHeader就足够了。
1、发送HTML文本含图片
- Sub SendMIMEMail
- On Error Goto ErrorHandler
- sImage$ = “seal.jpg”
- sHtml$ = {
- <table border=”0″ cellpadding=”0″ cellspacing=”0″ width=”700″ align=”center”>
- <tr>
- <td><img src=”cid:} + sImage$ + {“></td>
- </tr>
- </table>
- }
- session.ConvertMIME = False
- Dim doc As NotesDocument
- Set doc = curDb.CreateDocument
- Call doc.ReplaceItemValue(“Form”, “Memo”)
- Call doc.ReplaceItemValue(“Principal”, “xxx@163.com“)
- Dim body As NotesMimeEntity
- Dim header As NotesMimeHeader
- Set body = doc.CreateMIMEEntity(“body”)
- Set header = body.CreateHeader(“Content-Type”)
- Call header.SetHeaderVal(“multipart/related”)
- Set header = body.CreateHeader(“Subject”)
- Call header.SetHeaderVal(“MIME TEST!!!!”)
- Set header = body.CreateHeader(“To”)
- Call header.SetHeaderVal(“xxx@gmail.com“)
- Dim stream As NotesStream
- Set stream = session.CreateStream
- Dim child As NotesMimeEntity
- Set child = body.CreateChildEntity
- Call stream.WriteText(sHtml$)
- Call child.SetContentFromText(stream, “text/html;charset=gb2312″, ENC_NONE)
- Call stream.Close()
- Set child = body.CreateChildEntity
- Set header = child.CreateHeader(“Content-ID”)
- Call header.SetHeaderVal(sImage$)
- If stream.Open(“C:\” + sImage$) Then
- If stream.Bytes <> 0 Then
- Call child.SetContentFromBytes(stream, {image/jpeg; name=”} + sImage$ + {“}, ENC_IDENTITY_BINARY)
- End If
- End If
- Call stream.Close()
- session.ConvertMIME = True
- Call doc.Send(False)
- Exit Sub
- ErrorHandler: Call curLog.Debug(1)
- End Sub
在HTML插入图片的关键是这一句:<img src=”cid:seal.jpg”>
其中cid:seal.jpg就是后面创建的一个NotesMimeEntity,注意这个NotesMimeEntity加了一个名字是Content-ID值为seal.jpg的NotesMimeHeader。如此这个图片就能在邮件里面显示了。
2、发送附件
在Notes编程里面发送附件的方式至少有两种,一种是通过NotesRichTextItem的EmbedObject方法将附件扔到$File 域中,然后发送文档;另一种还是通过上面说得NotesMimeEntity和NotesMimeHeader的方式来发送。这里只说后面一种:
- Sub SendMIMEMail
- On Error Goto ErrorHandler
- sAttach$ = “struts.txt”
- session.ConvertMIME = False
- Dim doc As NotesDocument
- Set doc = curDb.CreateDocument
- Call doc.ReplaceItemValue(“Form”, “Memo”)
- Call doc.ReplaceItemValue(“Principal”, “xxx@163.com”)
- Dim body As NotesMimeEntity
- Dim header As NotesMimeHeader
- Set body = doc.CreateMIMEEntity(“body”)
- Set header = body.CreateHeader(“Content-Type”)
- Call header.SetHeaderVal(“multipart/related”)
- Set header = body.CreateHeader(“Subject”)
- Call header.SetHeaderVal(“MIME TEST!!!!”)
- Set header = body.CreateHeader(“To”)
- Call header.SetHeaderVal(“xxx@gmail.com“)
- Dim stream As NotesStream
- Set stream = session.CreateStream
- Dim child As NotesMimeEntity
- Set child = body.CreateChildEntity
- Call stream.WriteText(sHtml$)
- Call child.SetContentFromText(stream, “text/html;charset=gb2312″, ENC_NONE)
- Call stream.Close()
- Set child = body.CreateChildEntity
- Set header = child.CreateHeader(“Content-Type”)
- Call header.SetHeaderVal(“multipart/related”)
- Set header = child.CreateHeader(“Content-Disposition”)
- Call header.SetHeaderVal(“attachment; filename=” + sAttach$)
- Set header = child.CreateHeader(“Content-ID”)
- Call header.SetHeaderVal(sAttach$)
- If stream.Open(“C:\” + sAttach$) Then
- If stream.Bytes <> 0 Then
- Call child.SetContentFromBytes(stream, “application/octet-stream” + {“}, ENC_IDENTITY_BINARY)
- End If
- End If
- Call stream.Close()
- session.ConvertMIME = True
- Call doc.Send(False)
- Exit Sub
- ErrorHandler: Call curLog.Debug(1)
- End Sub