2009-03-26 72 views
9

Tengo poco conocimiento de Lotus Script o Notes/Domino pero tengo un procedimiento, copiado desde algún lugar hace mucho tiempo, que me permite enviar correos electrónicos a través de Notes desde VBA. Normalmente solo uso esto para notificaciones internas donde el formato no ha importado realmente.Envío de correos electrónicos formateados de Lotus Notes desde Excel VBA

Ahora quiero usar esto para enviar correos electrónicos externos a un cliente, y los tipos corporativos prefieren que el correo electrónico cumpla con nuestra guía de estilo (una tipografía sans-serif básicamente).

Estaba a punto de decirles que el código solo funciona con texto sin formato, pero luego noté que la rutina hace referencia a algún tipo de objeto CREATERICHTEXTITEM. ¿Significa esto que podría aplicar algún tipo de formato a la cadena de texto del cuerpo después de que se ha pasado a la rutina de correo? Además de mantener nuestros preciosos valores de marca, sería muy útil para mí resaltar ciertos pasajes en el correo electrónico.

He tenido una excavación sobre la red para ver si este código podría adaptarse, pero no estoy familiarizado con el modelo de objetos de Notes y el hecho de que los recursos en línea de Notes parezcan reflejar la obtusidad de la aplicación significaba que no lo hacía no llegues muy lejos

El código:

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

Respuesta

10

La respuesta corta es sí. La respuesta larga es dolorosa. No hay grandes clases expuestas para manipular elementos de texto enriquecido en Notes. Sin embargo, algunos de los que puede investigar son NotesRichTextStyle, NotesRichTextParagraphStyle y NotesRichTextTable por nombrar algunos. Estas clases lo ayudan a definir algunos elementos de texto enriquecido y a agregarlos mediante programación a su campo de texto enriquecido.

Otro enfoque, ya que está enviando correo electrónico, es utilizar las clases de NotesMIMEEntity y compilar el correo electrónico utilizando HTML (mucho más fácil). He aquí algunos ejemplos de código:

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 

Esencialmente, usted tendrá que girar el ConvertMIME de salir en la NotesSession. Luego crea un nuevo documento, establece las propiedades del correo, etc. Esa parte ya está en tu código VBA. A continuación, cree MIMEEntity y una secuencia para contener su texto HTML. Finalmente, llame al método SetContentFromText en su objeto MIMEEntity. Luego envía tu correo electrónico. Tenga en cuenta que la última llamada es volver a activar la función ConvertMIME para NotesSession.

No estoy seguro de si todo esto funcionará a través de COM, pero funciona bien en agentes de LotusScript en Notes.

Espero que esto ayude!

+0

¡Gracias, parece tan fácil como lo había imaginado! Traté de integrar tu código en mi proyecto, pero incluso después de agregar referencias a cada biblioteca de Lotus Notes, sigo teniendo problemas.Principalmente, no creo que NotesStream esté disponible a través de COM, lo que pone un poco de todo de cabeza. – Lunatik

+0

Revisé el archivo de ayuda: no se menciona que la transmisión no sea compatible con COM, por lo que debería funcionar. Es posible que desee hacer trampa: almacene el HTML simple en el campo y luego llame a un agente de LotusScript que realice la conversión por usted. – stwissel

0

Me gusta tal y como es. Sin embargo, he tenido que cambiar dbString = "mail\" & Application.UserName & ".nsf" a dbString = "mail\" & Application.CurrentUser & ".nsf"

primer comentario: Me gustaría no tener Lotus Notes abierta en el momento del envío.

Segundo comentario: Desearía poder cambiar de quién es el correo electrónico (es decir, si estoy enviando un informe a 50 personas, quiero que sea de una dirección genérica, en lugar de la dirección de mi trabajo)

0

Para cambiar de quién es, cree una ID genérica de Notes (p. Ej., Auto Send/YourCompany) y guarde el agente con esa ID.

Cuestiones relacionadas