2009-03-26 139 views
9

私はロータススクリプトやノーツ/ドミノの知識はほとんど持っていませんが、VBAのNotesから電子メールで送信できる手続きがあります。私は通常、書式設定が本当に重要ではない内部通知にのみこれを使用します。Excel VBAからフォーマットされたLotus Notesリッチテキスト電子メールを送信する

これは、外部のメールをクライアントに送信するために使用したいと思います。企業のタイプは、私たちのスタイルガイド(基本的にはサンセリフの書体)に準拠しています。

私は、コードがプレーンテキストでしか動作しないことを伝えようとしていましたが、ルーチンが何らかのCREATERICHTEXTITEMオブジェクトを参照していることに気付きました。これは、メールルーチンに渡されたの後に、本文テキスト文字列に何らかの書式設定を適用できることを意味しますか?私たちの貴重なブランド価値を支えるだけでなく、これは電子メールの特定の箇所を強調するのに非常に便利です。

私は、このコードを適用できるかどうかを知るためにネットを掘り下げましたが、ノーツのオブジェクトモデルに慣れていないことと、オンラインのNotesリソースがアプリケーションのobtusenessを反映しているように見えることは、非常に遠くになりません。

コード:

Sub sendEmail(EmailSubject As String, EMailSendTo As String, EMailBody As String, MailServer as String) 

    Dim objNotesSession As Object 
    Dim objNotesMailFile As Object 
    Dim objNotesDocument As Object 
    Dim objNotesField As Object 
    Dim sendmail As Boolean 

    'added for integration into reporting tool 
    Dim dbString As String 

    dbString = "mail\" & Application.UserName & ".nsf" 

On Error GoTo SendMailError 
    'Establish Connection to Notes 
    Set objNotesSession = CreateObject("Notes.NotesSession") 
On Error Resume Next 
    'Establish Connection to Mail File 
    Set objNotesMailFile = objNotesSession.GETDATABASE(MailServer, dbString) 
    'Open Mail 
    objNotesMailFile.OPENMAIL 
On Error GoTo 0 

    'Create New Memo 
    Set objNotesDocument = objNotesMailFile.createdocument 

    Dim oWorkSpace As Object, oUIdoc As Object 
    Set oWorkSpace = CreateObject("Notes.NotesUIWorkspace") 
    Set oUIdoc = oWorkSpace.CurrentDocument 

    'Create 'Subject Field' 
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("Subject", EmailSubject) 

    'Create 'Send To' Field 
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("SendTo", EMailSendTo) 

    'Create 'Copy To' Field 
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("CopyTo", EMailCCTo) 

    'Create 'Blind Copy To' Field 
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("BlindCopyTo", EMailBCCTo) 

    'Create 'Body' of memo 
    Set objNotesField = objNotesDocument.CREATERICHTEXTITEM("Body") 

    With objNotesField 
     .APPENDTEXT emailBody 
     .ADDNEWLINE 1 
    End With 

    'Send the e-mail 

    Call objNotesDocument.Save(True, False, False) 
    objNotesDocument.SaveMessageOnSend = True 
    'objNotesDocument.Save 
    objNotesDocument.Send (0) 

    'Release storage 
    Set objNotesSession = Nothing 
    Set objNotesMailFile = Nothing 
    Set objNotesDocument = Nothing 
    Set objNotesField = Nothing 

    'Set return code 
    sendmail = True 

    Exit Sub 

SendMailError: 
    Dim Msg 
    Msg = "Error # " & Str(Err.Number) & " was generated by " _ 
       & Err.Source & Chr(13) & Err.Description 
    MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext 
    sendmail = False 
End Sub

答えて

10

短い答えはYesです。長い答えは痛いです。 Notesのリッチテキスト項目を操作するための偉大なクラスは公開されていません。しかし、いくつか例を挙げると、NotesRichTextStyle、NotesRichTextParagraphStyle、およびNotesRichTextTableというものがあります。これらのクラスは、リッチテキスト要素を定義し、リッチテキストフィールドにプログラムで追加するのに役立ちます。

電子メールを送信しているので、NotesMIMEEntityクラスを使用してHTMLを使用して電子メールを作成する方法もあります。

Set s = New NotesSession 
Dim docMail As NotesDocument 
Dim body As NotesMIMEEntity 
Dim stream As NotesStream 

Set db = s.CurrentDatabase 
s.ConvertMIME = False ' Do not convert MIME to rich text 

'Create email to be sent 
Set docMail = db.CreateDocument 

With docMail 
     .SendTo = SEND TO ADDRESS 
     .From = FROM ADDRESS 
     .Principal = FROM ADDRESS 
     .ReplyTo = REPLY TO ADDRESS 
     .Subject = SUBJECT 
     .Form = "Memo" 
End With 

    Set stream = s.CreateStream 
Set body = docMail.CreateMIMEEntity 
Call stream.WriteText ("YOUR HTML CODE GOES HERE") 

'ENC_IDENTITY_8BIT used because of technote found on notes.net 
'http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/aeedaf28e47546ad85256f6a000a4b48?OpenDocument 
Call body.SetContentFromText (stream, "text/html;charset=iso-8859-1",ENC_IDENTITY_8BIT) 

Call docMail.Send(False) 
Set docMail = Nothing 
Set body = Nothing 
Set stream = Nothing 

s.ConvertMIME = True ' Restore conversion 

NotesSessionでConvertMIME設定をオフにする必要があります。次に、新しい文書を作成し、メールのプロパティなどを設定します。その部分はすでにVBAコードにあります。次に、HTMLテキストを保持するためのMIMEEntityとストリームを作成します。最後に、あなたのMIMEEntityオブジェクトのSetContentFromTextメソッドを呼び出します。それからあなたの電子メールを送ってください。最後の呼び出しは、NotesSessionのConvertMIME機能をオンに戻すことです。

これはすべてCOM経由で動作するのかどうかはわかりませんが、NotesのLotusScriptエージェントでうまくいきます。

こちらがお役に立てば幸いです。

+0

ありがとうございます、これは私が想像したほど簡単です!私は私のプロジェクトにあなたのコードを統合しようとしましたが、すべてのLotus Notesライブラリへの参照を追加した後でも、私はまだ問題に陥っています。主に、NotesStreamがCOM経由で利用できるとは思っていません。これはちょっとキボッを全部に載せています。 – Lunatik

+0

ヘルプファイルを確認しました。ストリームでCOMがサポートされていないという記述はないので、動作するはずです。通常のHTMLをフィールドに格納してから、変換を行うLotusScriptエージェントを呼び出すことができます。 – stwissel

0

私はちょうどそれが好きです。しかし、私は dbString = "mail\" & Application.UserName & ".nsf"

dbString = "mail\" & Application.CurrentUser & ".nsf" への最初のコメントを変更しなければならなかった:私はLotus Notesは、送信時に開く必要はありませんでした望みます。

2番目のコメント:電子メールの送信者を変更することができます(つまり、50人のユーザーにレポートを送信する場合は、自分の勤務先ではなく一般的なアドレスから送信したい)

0

発信元を変更するには、一般的なNotes ID(自動送信/ YourCompanyなど)を作成し、そのIDでエージェントを保存します。

関連する問題