2017-01-09 13 views
0

Ich habe den folgenden VBA-Code, der eine E-Mail von Excel mit IBM Notes sendet.Excel VBA Änderung von E-Mail-Adresse mit IBM Notes?

Allerdings möchte ich die Absenderadresse ändern können. Bitte kann jemand mir zeigen, wo ich falsch liege?

Private Sub Worksheet_Change (ByVal Ziel als Strecke)

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 

Antwort

0

Wie Richard bereits gesagt hat, können Sie den Absender nicht vom Client abspotten, es sei denn, Sie verwenden diese undokumentierte Methode. Ich habe eine Notes-Klasse für Mail-Benachrichtigungen (kann auf meinem Blog gefunden werden), aber Richard hat Recht, dass Sie als Anfänger (was ziemlich klar ist, basierend auf dem Code, den Sie gepostet haben) sollte wahrscheinlich nicht versuchen, diese Methode zu verwenden.

Nebenbei bemerkt, warum verwenden Sie einen solchen verschachtelten Weg, um den Wert von TrueRef zu setzen? Können Sie eine Select Case-Anweisung nicht verwenden? Oder sogar vereinfachen nur Ihr Code:

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

oder

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

Die NotesDocument.Send Methode erlaubt es nicht, ein authentifizierter des Absenders Absender-Adresse zu fälschen. Code, der auf dem Domino-Server ausgeführt wird, kann dies tun, aber Ihr Code verbindet sich als Client.

Es gibt zwei Möglichkeiten. Ich werde die erste erwähnen, aber ich muss Ihnen sagen, dass sie nicht von IBM unterstützt wird und nicht empfohlen wird - vor allem für Anfänger Notes-Entwickler. Sie müssen das Dokument direkt in das Domino-Router-Postfach (mail.box) schreiben, anstatt die NotesDocument.Send-Methode zu verwenden.

Die zweite Möglichkeit besteht darin, Code zu verwenden, der auf Ihrem Domino-Server ausgeführt wird, um die E-Mail zu senden. Eine Möglichkeit hierzu besteht darin, dass der Code das NotesDocument in einer Datenbank auf dem Domino Server speichert und über einen Hintergrundagenten in dieser Datenbank verfügt, der eingerichtet wird, wenn neue Dokumente erstellt werden. Der Code im Agenten würde das Principal-Feld festlegen, was ich gesehen habe, dass Sie versucht haben - aber wie ich oben sagte, funktioniert es nicht, wenn es im clientseitigen Code mit NotesDocument.send läuft. Es gibt viele andere Möglichkeiten.