我有一些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
答案 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一样,但是在那里传入一个数组。