首页 文章

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

提问于
浏览
0

我有一些 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 回答

  • 3

    要在文档的一个项目中具有多个值,您需要使用一个数组。

    尝试这个:

    dim varCopyTo as Variant
    varCopyTo = Split( strCopyTo, "," )
    
    call notesDoc.Replaceitemvalue( "CopyTo", varCopyTo )
    

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

    另外,您应该在创建文档后添加Call notesDoc.ReplaceItemValue("Form", "Memo" ),以便 server/client 不必“猜测”正在创建的文档类型。

  • 2

    notesdoc.CopyTo想要一个数组,而不是赋值右侧的 comma-delimted 字符串。数组中的每个元素应该是一个单独的地址。通过传递 comma-delimited 字符串,就 Notes 和 Domino 而言,实际上就是传递一个无效地址。我不完全确定为什么会以这种特有的随机方式进行转换,但是我确信绝对不会以这种方式进行转换。

    比起使用简写形式(notesdoc.CopyTo = ...)来编写此代码更好),您可能应该像使用 Subject 一样使用 Call notesdoc.ReplaceItemValue,但是要在其中传递一个数组。

相关问题