用于创建Lotus Notes电子邮件的VBA代码 - CC电子邮件不起作用

时间:2014-06-24 20:03:53

标签: vba ms-access ms-access-2013 lotus-notes

我有一些VBA代码,它将各种电子邮件部分作为输入,并在Lotus Notes中创建电子邮件,并从组邮箱发送。它将电子邮件发送给收件人和CC收件人,然后在"已发送的邮件中留下邮件的​​副本。组电子邮件帐户的框。我认为该框中发送的消息有点像虚拟,因为它可能不是发送时的确切消息。

这有效,并将消息发送到SendTo和第一个CC地址。但是,如果我有第二个CC地址,它会将第二个地址的结尾变为乱码。例如,如果SendTo是" mike@someemail.com" ;,并且CC是" john@someemail.com,jim@someemail.com" ...在已发送的框中它似乎已将其发送至mike@someemail.com,并将CC发送至john@someemail.com和jim@someemail.com。但是,实际的邮件只能由john收到,CC看起来像这样:" john@someemail.com,jim@pps.rte_to_v"并且吉姆永远不会收到消息。

在另一条消息上,第二个CC最终成为jim@vwall11.com。我还没有找到它在CC线末端而不是正确地址的乱码模式。我们花了一些时间来了解这个问题,因为它在Sent邮箱中看起来是正确的。

这是我正在使用的代码。我正在更改服务器名称等,但所有相关代码都完好无损。

Private Sub TestEmail()
Call EmailFromADT("mike@somemail.com", "john@somemail.com, jim@somemail.com", "test subject", "test message", _
                "", "", "", "")
End Sub

Function EmailFromADT(strSendTo As String, strCopy As String, strSubject As String, _
strText1 As String, strText2 As String, strText3 As String, _
strText4 As String, strText5 As String)

Dim notesdb As Object
Dim notesdoc As Object
Dim notesrtf As Object
Dim notessession As Object
Dim i As Integer


    Set notessession = CreateObject("Notes.Notessession")

''''''''Group Mailbox'''''''''''''''''''''''''''''''''''''''''''''''''
    Set notesdb = notessession.GetDatabase("servername", "mailin\notesaddr.nsf")
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    'Open the mail database in notes
    If notesdb.IsOpen = True Then
    'Already open for mail
    Else
    notesdb.OPENMAIL
    End If

    Set notesdoc = notesdb.CreateDocument
    Call notesdoc.ReplaceItemValue("Subject", strSubject)
    Set notesrtf = notesdoc.CreateRichTextItem("body")
    Call notesrtf.AppendText(strText1 & vbCrLf & strText2 & vbCrLf & strText3 & vbCrLf & strText4 & vbCrLf & strText5)
    notesdoc.SendTo = strSendTo
    notesdoc.CopyTo = strCopy
    notesdoc.from = UserName()

''''''''Group Mailbox'''''''''''''''''''''''''''''''''''''''''''''''''
    notesdoc.principal = "Group Team"
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    notesdoc.BlindCopyTo = strBCC

    Call notesdoc.Save(True, False)
    notesdoc.SaveMessageOnSend = True
    Call notesdoc.Send(False, strSendTo)
    Set notessession = Nothing

End Function

2 个答案:

答案 0 :(得分:3)

要在Document中的项目中拥有多个值,您需要使用数组。

试试这个:

dim varCopyTo as Variant
varCopyTo = Split( strCopyTo, "," )

call notesDoc.Replaceitemvalue( "CopyTo", varCopyTo )

您也可以编写notesDoc.CopyTo=varCopyTo,但使用ReplaceItemValue会更好(更安全,性能更好)。

此外,您应在创建文档后添加Call notesDoc.ReplaceItemValue("Form", "Memo" ),以便服务器/客户端不必“猜测”您正在创建的文档类型。

答案 1 :(得分:2)

notesdoc.CopyTo想要一个数组,而不是分配右侧的逗号分隔字符串。数组中的每个元素都应该是一个单独的地址。通过传入逗号分隔的字符串,就Notes和Domino而言,您基本上只传入一个无效的地址。我不完全确定为什么会以特殊的随机方式改变它,但我相信它肯定不会那样正确。

并且比使用简写形式(notesdoc.CopyTo = ...)更适合此代码,您可能应该使用Call notesdoc.ReplaceItemValue,就像使用Subject一样,但是在那里传入一个数组。