2017-01-09 28 views
0

IBMノートを使用してexcelから電子メールを送信する次のvbaコードがあります。Excel VBA変更点IBM Notesを使用した電子メールアドレスからの変更?

しかし、私は元のアドレスを変更できるようにしたいと思います。 誰かが私がどこに間違っているかを私に見せることができますか?

ます。Private Sub 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

リチャードがすでに言ったように、あなたがその文書化されていない方法を使用しない限り、クライアントから送信者を偽装することはできません。私はメール通知のためのノーツクラス(私のブログにあります)を持っていますが、リチャードは初心者(あなたが投稿したコードに基づいてかなり明確です)では、おそらくそのメソッドを使って試してはいけないと思います。

なぜ、このような複雑な方法で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サーバー上で実行されているコードで実行できますが、コードはクライアントとして接続しています。

これを回避する方法は2通りあります。最初のものについて言及しますが、これはIBMがサポートしていないため、特に初心者のNotes開発者にとってはお勧めできません。 NotesDocument.Sendメソッドを使用する代わりに、Dominoルータのメールボックス(mail.box)にドキュメントを直接書き込む必要があります。

2番目の方法は、Dominoサーバー上で実行されるコードを使用して電子メールを送信することです。これを行う1つの方法は、NotesDocumentをDominoサーバー上のデータベースに保存し、新しい文書が作成されるたびに実行されるように設定されているデータベースにバックグラウンドエージェントを持つコードを作成することです。エージェントのコードはPrincipalフィールドを設定しますが、これは試してみましたが、上記のようにNotesDocument.sendを使用してクライアント側のコードで実行しても機能しません。他にも多くの方法があります。

関連する問題