2009-03-26 11 views
9

Ho poca conoscenza di Lotus Script o Notes/Domino ma ho una procedura, copiata da qualche parte molto tempo fa, che mi consente di inviare e-mail tramite Notes da VBA. Normalmente lo uso solo per le notifiche interne in cui la formattazione non ha realmente avuto importanza.Invio di testo RTF in formato Lotus Notes da Excel VBA

Ora desidero utilizzarlo per inviare e-mail esterne a un client, mentre i tipi aziendali preferiscono che l'e-mail sia conforme alla nostra guida di stile (in pratica un carattere tipografico sans-serif).

Stavo per dire loro che il codice funziona solo con testo normale, ma poi ho notato che la routine fa riferimento a qualche tipo di oggetto CREATERICHTEXTITEM. Questo significa che potrei applicare una sorta di formattazione alla stringa di testo del corpo dopo il che è stata passata alla routine di posta? Oltre a sostenere i nostri preziosi valori di marca, questo mi sarebbe abbastanza utile per evidenziare alcuni passaggi nell'e-mail.

Ho fatto uno scavo sulla rete per vedere se questo codice può essere adattato, ma non conosco il modello a oggetti di Notes e il fatto che le risorse di Notes online sembrano rispecchiare l'ottusità dell'applicazione, significa che non ho andare molto lontano

Il codice:

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

risposta

10

La risposta breve è sì. La lunga risposta è dolorosa. Non ci sono grandi classi esposte a manipolare gli elementi rich text in Notes. Tuttavia alcuni che è possibile ricercare sono NotesRichTextStyle, NotesRichTextParagraphStyle e NotesRichTextTable per citarne alcuni. Queste classi ti aiutano a definire alcuni elementi rich text e ad aggiungerli a livello di codice al tuo campo rich text.

Un altro approccio, dal momento che si sta inviando e-mail, è quello di utilizzare le classi NotesMIMEEntity e creare l'e-mail utilizzando HTML (modo più semplice). Ecco alcuni esempi di codice:

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 

In sostanza, è necessario disattivare l'impostazione ConvertMIME in NotesSession. Quindi crea un nuovo documento, imposta le proprietà della posta, ecc. Quella parte è già nel tuo codice VBA. Successivamente, crea MIMEEntity e uno stream per contenere il testo HTML. Infine chiama il metodo SetContentFromText sul tuo oggetto MIMEEntity. Quindi invia la tua email. Si noti che l'ultima chiamata consiste nel riattivare la funzione ConvertMIME per NotesSession.

Non sono sicuro che tutto funzioni tramite COM, ma funziona bene con gli agenti LotusScript in Notes.

Spero che questo aiuti!

+0

Grazie, sembra facile come avrei immaginato! Ho provato a integrare il tuo codice nel mio progetto, ma anche dopo aver aggiunto riferimenti a tutte le librerie di Lotus Notes sto ancora incontrando dei problemi.Principalmente, non penso che NotesStream sia disponibile tramite COM, il che mette il kibosh su tutta la faccenda. – Lunatik

+0

Ho controllato il file della guida: non è stato detto che lo streaming non è supportato in COM, quindi dovrebbe funzionare. Potresti voler imbrogliare: Archivia il codice HTML semplice nel campo e quindi chiama un agente LotusScript su di esso che esegue la conversione per te. – stwissel

0

Mi piace così com'è. Tuttavia, ho dovuto cambiare dbString = "mail\" & Application.UserName & ".nsf" a dbString = "mail\" & Application.CurrentUser & ".nsf"

primo commento: io vorrei non avere Lotus Notes aperto al momento dell'invio.

Secondo commento: Vorrei poter cambiare da chi proviene l'e-mail (ad esempio, se sto inviando un rapporto a 50 persone, voglio che provenga da un indirizzo generico, piuttosto che dal mio indirizzo di lavoro)

0

Per cambiare il nome dell'utente, creare un ID nota generico (ad es. Invio automatico/Azienda) e salvare l'agente con tale ID.