Excel VBA使用IBM Notes从电子邮件地址更改?

问题描述:

我有以下vba代码,它使用IBM Notes从excel发送一封电子邮件。Excel VBA使用IBM Notes从电子邮件地址更改?

但是,我想能够改变从地址。 请问有人可以告诉我我要去哪里?

私人小组Worksheet_Change(BYVAL目标作为范围)

If Not Intersect(Target, Range("M:M")) Is Nothing Then 
    If Target.Cells.Count < 3 Then 


    'Set up the objects required for Automation into lotus notes 

    Dim Ref As String 
    Dim TrueRef As String 



    Ref = Range("H" & (ActiveCell.Row)).Value 

    If Ref = "WSM" Then 
    TrueRef = "WES" 
    Else 
    If Ref = "NAY" Then 
    TrueRef = "NAY" 
    Else 
    If Ref = "ENF" Then 
    TrueRef = "ENF" 
    Else 
    If Ref = "LUT" Then 
    TrueRef = "MAG" 
    Else 
    If Ref = "NFL" Then 
    TrueRef = "NOR" 
    Else 
    If Ref = "RUN" Then 
    TrueRef = "RUN" 
    Else 
    If Ref = "SOU" Then 
    TrueRef = "SOU" 
    Else 
    If Ref = "SOU" Then 
    TrueRef = "SOU" 
    Else 
    If Ref = "BRI" Then 
    TrueRef = "BRI" 
    Else 
    If Ref = "LIV" Then 
    TrueRef = "LIV" 
    Else 
    If Ref = "BEL" Then 
    TrueRef = "BEL" 
    End If 
    End If 
    End If 
    End If 
    End If 
    End If 
    End If 
    End If 
    End If 
    End If 
    End If 




    '''''''''''''''''''''''''''''''''' 

    Dim nMailBody As String 
    Dim nMailSubject As String 
    Dim nMailRecipient As Variant 
    Dim nMail As Object 
    Dim nSession As Object 
    Dim nDatabase As Object 
    Dim nMime As Object 
    Dim nMailStream As Object 
    Dim nChild As Object 
    Dim nSomeMailBodyText As String 
    Dim amountOfRecipients As Integer 

    nSomeMailBodyText = "<p>Hello,</p><br><p>How are you?</p>" 


    nMailSubject = "A great email" 

    Set nSession = CreateObject("Notes.NotesSession") 
    Set nDatabase = nSession.GETDATABASE("", "") 
    Call nDatabase.OPENMAIL 
    Set nMail = nDatabase.CREATEDOCUMENT 




    nMail.Principal = "[email protected]" 

    nMail.SendTo = "[email protected]" 
    nMail.subject = "This is test" 

    nSession.CONVERTMIME = False 
    Set nMime = nMail.CREATEMIMEENTITY 
    Set nMailStream = nSession.CREATESTREAM 


    'vBody contient le texte au format Html 
    Call nMailStream.WRITETEXT(nSomeMailBodyText) 
    Call nMailStream.WRITETEXT(" - and again - ") 
    Call nMailStream.WRITETEXT(nSomeMailBodyText) 
    Call nMailStream.WRITETEXT("<br>") 
    Call nMailStream.WRITETEXT("<br>") 



    '----- READ AND PASTE SIGNATURE ------------------------------------- 

    'Get the standard signature location 
    nSignatureLocation = nDatabase.GETPROFILEDOCUMENT("CalendarProfile").GETITEMVALUE("Signature")(0) 



    Set nChild = nMime.CREATECHILDENTITY 
    Call nChild.SETCONTENTFROMTEXT(nMailStream, "text/html;charset=iso-8859-1", ENC_NONE) 
    Call nMailStream.Close 
    nSession.CONVERTMIME = True 



    'Send the document 
    nMail.PostedDate = Now() 'Gets the mail to appear in the sent items folder 
    nMail.SEND 0, Recipient 




    End If 
End If 

End Sub 

正如理查德已经说过的那样,除非您使用这种未记录的方法,否则不能从客户端那里欺骗发件人。我有一个用于邮件通知的Notes类(可以在我的博客上找到),但是理查德是正确的,因为你作为初学者(根据你发布的代码很清楚)可能不应该尝试使用该方法。

在附注中,为什么使用这种复杂的方式来设置TrueRef的值? 你不能使用Select Case语句吗?甚至只是简化代码:

TrueRef = Ref 
If Ref = "WSM" Then 
    TrueRef = "WES" 
ElseIf Ref = "LUT" Then 
    TrueRef = "MAG" 
ElseIf Ref = "NFL" Then 
    TrueRef = "NOR" 
End If 

If Ref = "WSM" Then 
    TrueRef = "WES" 
ElseIf Ref = "LUT" Then 
    TrueRef = "MAG" 
ElseIf Ref = "NFL" Then 
    TrueRef = "NOR" 
Else 
    TrueRef = Ref 
End If 

的NotesDocument.Send方法不允许已验证的欺骗发送者的发送地址。在Domino服务器上运行的代码可以做到这一点,但是你的代码是作为客户端连接的。

这是两种解决方法。我会提到第一个,但是必须告诉你它不被IBM支持,不推荐 - 尤其是对于新手Notes开发人员。它涉及将文档直接写入Domino路由器邮箱(mail.box),而不是使用NotesDocument.Send方法。

第二种方法是使用在Domino服务器上运行的代码发送电子邮件。做到这一点的一种方法是让代码将NotesDocument保存在Domino服务器上的数据库中,并在该数据库中设置一个后台代理,该代理设置为在创建新文档时运行。代理中的代码会设置Principal字段,我发现您已经尝试过 - 但正如我上面所说的,在使用NotesDocument.send在客户端代码中运行时,它不起作用。还有很多其他的方法。