我有一些 VBA 代码,它将各种电子邮件部分作为输入,并在 Lotus Notes 中创建电子邮件,然后从组邮箱发送它。它将电子邮件发送给收件人和抄送收件人,然后将邮件副本保留在组电子邮件帐户的“已发送”框中。我认为该框中的已发送消息有点是假的,因为它可能与发送的消息不完全相同。
这可以正常工作,并将消息发送到 SendTo 和第一个抄送地址。但是,如果我有第二个抄送地址,它将把第二个地址的结尾变成乱码。例如,如果“发送到”为“ mike@someemail.com”,并且抄送为“ john@someemail.com,jim@someemail.com” ...,则在“已发送”框中,它似乎已发送给 mike@someemail.com,而抄送给了 john@someemail.com 和 jim@someemail.com。但是,实际的邮件仅由 john 接收,并且抄送看起来像这样:“ john@someemail.com,jim@pps.rte_to_v”,而吉姆则从未收到该邮件。
在另一条消息上,第二个 CC 最终为 jim@vwall11.com。我没有找到放置在 CC 行末尾而不是正确地址的乱码的模式。由于该问题在“已发送”邮箱中看起来是正确的,因此花了我们一段时间来了解该问题。
这是我正在使用的代码。我正在更改服务器名称等,但是所有相关代码均完整无缺。
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 回答
要在文档的一个项目中具有多个值,您需要使用一个数组。
尝试这个:
您也可以编写
notesDoc.CopyTo=varCopyTo
,但是使用 ReplaceItemValue 更好(更安全,性能稍好)。另外,您应该在创建文档后添加
Call notesDoc.ReplaceItemValue("Form", "Memo" )
,以便 server/client 不必“猜测”正在创建的文档类型。notesdoc.CopyTo
想要一个数组,而不是赋值右侧的 comma-delimted 字符串。数组中的每个元素应该是一个单独的地址。通过传递 comma-delimited 字符串,就 Notes 和 Domino 而言,实际上就是传递一个无效地址。我不完全确定为什么会以这种特有的随机方式进行转换,但是我确信绝对不会以这种方式进行转换。比起使用简写形式(notesdoc.CopyTo = ...)来编写此代码更好),您可能应该像使用 Subject 一样使用 Call
notesdoc.ReplaceItemValue
,但是要在其中传递一个数组。