2017-01-09 124 views
0

我有以下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 

回答

0

正如理查德已經說過的那樣,除非您使用這種未記錄的方法,否則不能從客戶端那裏欺騙發件人。我有一個用於郵件通知的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 
0

的NotesDocument.Send方法不允許已驗證的欺騙發送者的發送地址。在Domino服務器上運行的代碼可以做到這一點,但是你的代碼是作爲客戶端連接的。

這是兩種解決方法。我會提到第一個,但是必須告訴你它不被IBM支持,不推薦 - 尤其是對於新手Notes開發人員。它涉及將文檔直接寫入Domino路由器郵箱(mail.box),而不是使用NotesDocument.Send方法。

第二種方法是使用在Domino服務器上運行的代碼發送電子郵件。做到這一點的一種方法是讓代碼將NotesDocument保存在Domino服務器上的數據庫中,並在該數據庫中設置一個後臺代理,該代理設置爲在創建新文檔時運行。代理中的代碼會設置Principal字段,我發現您已經嘗試過 - 但正如我上面所說的,在使用NotesDocument.send在客戶端代碼中運行時,它不起作用。還有很多其他的方法。

相關問題