VBA:通过IBM Notes发送电子邮件,添加签名?

我有以下的VBA代码,从Excel中运行。 它将电子邮件发送到范围内的收件人列表。

Sub Send_Email() Dim answer As Integer answer = MsgBox("Are you sure you want to Send All Announcements?", vbYesNo + vbQuestion, "Notice") If answer = vbNo Then Exit Sub Else Dim rnBody As Range Dim Data As DataObject Set rnBody = Worksheets(1).Range("N3") rnBody.Copy Dim Maildb As Object Dim MailDoc As Object Dim Body As Object Dim Session As Object Dim i As Long Dim j As Long Dim server, mailfile, user, usersig As String Dim LastRow As Long, ws As Worksheet LastRow = Worksheets(1).Range("F" & Rows.Count).End(xlUp).Row 'Finds the last used row j = 18 'Start a session of Lotus Notes Set Session = CreateObject("Lotus.NotesSession") 'This line prompts for password of current ID noted in Notes.INI Call Session.Initialize 'Open the Mail Database of your Lotus Notes user = Session.UserName usersig = Session.CommonUserName server = Session.GetEnvironmentString("MailServer", True) mailfile = Session.GetEnvironmentString("MailFile", True) Set Maildb = Session.GetDatabase(server, mailfile) If Not Maildb.IsOpen = True Then Call Maildb.Open With ThisWorkbook.Worksheets(1) For i = 18 To LastRow 'Create the Mail Document Session.ConvertMime = False ' Do not convert MIME to rich text Set MailDoc = Maildb.CREATEDOCUMENT Call MailDoc.ReplaceItemValue("Form", "Memo") 'Set From Call MailDoc.ReplaceItemValue("Principal", "Food.Specials@Lidl.co.uk") Call MailDoc.ReplaceItemValue("ReplyTo", "Food.Specials@Lidl.co.uk") Call MailDoc.ReplaceItemValue("DisplaySent", "Food Specials") Call MailDoc.ReplaceItemValue("iNetFrom", "Food.Specials@Lidl.co.uk") Call MailDoc.ReplaceItemValue("iNetPrincipal", "Food.Specials@Lidl.co.uk") 'Set the Recipient of the mail Call MailDoc.ReplaceItemValue("SendTo", Range("Q" & i).value) 'Call MailDoc.ReplaceItemValue("CopyTo", "food.specials@lidl.co.uk") 'Set subject of the mail Call MailDoc.ReplaceItemValue("Subject", "Promotion Announcement for week " & Range("I8").value & ", " & Range("T8").value & " - Confirmation required") 'Create and set the Body content of the mail Set Body = MailDoc.CREATERICHTEXTITEM("Body") If Range("I10").value <> "" Then Call Body.APPENDTEXT("Good " & Range("A1").value & "," & vbNewLine & vbNewLine _ & "Please see attached an announcement of the spot buy promotion for week " & Range("I8").value & ", " & Range("T8").value & "." & vbNewLine & vbNewLine _ & "Please can you confirm within 24 hours." & vbNewLine & vbNewLine _ & Range("I10").value & vbNewLine) Else Call Body.APPENDTEXT("Good " & Range("A1").value & "," & vbNewLine & vbNewLine _ & "Please see attached an announcement of the spot buy promotion for week " & Range("I8").value & ", " & Range("T8").value & "." & vbNewLine & vbNewLine _ & "Please can you confirm within 24 hours." & vbNewLine) End If 'Embed Excel Sheet Range Set Data = New DataObject Data.GetFromClipboard Call Body.ADDNEWLINE(2) Call Body.EmbedObject(1454, "", Range("F" & i).value, "Attachment") 'create an attachment (optional) Call Body.ADDNEWLINE(3) Call Body.APPENDTEXT(Data.GetText) 'create an attachment (optional) Call Body.ADDNEWLINE(4) Call Body.APPENDTEXT(Maildb.GetProfileDocument("CalendarProfile").GetItemValue("Signature")(0)) 'Example to save the message (optional) in Sent items MailDoc.SaveMessageOnSend = True 'Send the document 'Gets the mail to appear in the Sent items folder Call MailDoc.ReplaceItemValue("PostedDate", Now()) Call MailDoc.Send(False) Set MailDoc = Nothing j = j + 1 Next i End With 'Clean Up the Object variables - Recover memory Set Maildb = Nothing Set Body = Nothing Set Session = Nothing Application.CutCopyMode = False MsgBox "Success!" & vbNewLine & "Announcements have been sent." End If End Sub 

代码半工作。 电子邮件发送正常。

但是,我希望能够将默认签名添加到我的电子邮件的底部。 我正在尝试使用这一行,但不添加任何签名。

 'create an attachment (optional) Call Body.ADDNEWLINE(4) Call Body.APPENDTEXT(Maildb.GetProfileDocument("CalendarProfile").GetItemValue("Signature")(0)) 

我的签名包含一个图像,我想知道这是不是通过签名,因为我的电子邮件不是HTML?

在这种情况下,我怎么能把这个电子邮件改为html? 请有人可以告诉我我做错了什么?

你的怀疑是正确的。 由于您正在创buildNotes富文本电子邮件,所以这不起作用,但解决scheme不一定要切换到创buildMIME / HTML邮件。 NotesRichTextItem类的AppendText方法只能处理文本,但是如果Notes签名是富文本格式,它实际上是您应该使用的Signature_Rich项目,而不是Signature项目,您应该使用AppendRTItem方法而不是AppendText方法。

事实是,用两种不同的邮件格式和签名在用户档案中被pipe理的方式有几种不同的select,这对于你可能需要处理的所有不同的情况来说是一个不平凡的问题。 您必须查看SignatureOption项目值,如果它是富文本,则为“3”;如果是HTML或图像文件,则为“2”;如果是纯文本,则为“1”。 代码中的解决scheme将取决于正在使用的解决scheme,而在创build富文本消息时处理选项2并不容易。

如果您不想使用Notes富文本格式,则可能需要查看上一个问题的答案,以获取有关构buildMIME消息的示例。 虽然我没有审查这篇博文中的代码,但它显示了附加签名 – 它看起来像是假定签名在文件中,而不是检查SignatureOptions项目。