Hace un tiempo me me comentaste como mandar un mail html desde lotusscript. Me dijiste que creara una librería, para poder ejecutar el código (si no tenía la versión 6). El caso es que si que la tengo, como se llama la librería propia de notes que tengo que poner en el "use" para que me funciones la función. "Call addMimeItem( doc, "Body", html )".
La librería: Copia y pega en declarations: 'SimpleMIME: Const TYPE_MIME_PART = 25 Const ITEM_SIGN_SEAL = &H0003 Declare Function NSFItemAppend Lib "nnotes" (Byval noteHandle As Long, Byval iFlags As Integer, Byval iName As Lmbcs String,_ Byval iNameLength As Integer, Byval iType As Integer, Byval iValuePointer As Long, Byval iValueLength As Long) As Integer Declare Function OSMemAlloc Lib "nnotes" (Byval T As Integer, Byval S As Long, hM As Long) As Integer Declare Function OSMemFree Lib "nnotes" (Byval hM As Long) As Integer Declare Function OSLockObject Lib "nnotes" (Byval H As Long) As Long Declare Sub OSUnlockObject Lib "nnotes" (Byval H As Long) Declare Sub Poke Lib "kernel32" Alias "RtlMoveMemory" (Byval P As Long, D As Any, Byval N As Long) Declare Sub PokeString Lib "kernel32" Alias "RtlMoveMemory" (Byval P As Long, Byval D As String, Byval N As Long) Type someType Unknown1 As Integer Unknown2 As Integer Unknown3 As Integer Unknown4 As Integer length As Integer Unknown5 As Integer Unknown6 As Integer Unknown7 As Integer Unknown8 As Integer Unknown9 As Integer End Type Public Function addMIMEitem( note As notesdocument, Byval itemname As String, Byval itemvalue As String ) Dim memptr As Long Dim memlen As Long Dim memhandle As Long Dim contenttype As String Dim fldheader As sometype Dim hlength As Long Dim clength As Long contenttype = |Content-Type: text/html; charset="us-ascii"| + Chr$(13) + Chr$(10) + Chr$(13) + Chr$(10) + Chr$(13) + Chr$(10) itemvalue = contenttype + itemvalue hlength = Len(fldheader) clength = Len(itemvalue) memlen = hlength + clength 'set the mystery members fldheader.unknown1 = 2 fldheader.unknown2 = 2 fldheader.unknown4 = 2 fldheader.length = Len(itemvalue) fldheader.unknown6 = 47 'remove existing item Call note.removeitem(itemname) note.MIME_Version = "1.0" rc = OSMemAlloc( 0, memLen, memHandle ) memPtr = OSLockObject(memHandle) Poke memPtr, fldheader.unknown1, hlength PokeString memPtr + hlength, itemvalue, clength rc = NSFItemAppend( note.handle, ITEM_SIGN_SEAL , itemname, Len(itemname), TYPE_MIME_PART, memPtr, memLen) OSUnlockObject memHandle OSMemFree memHandle End Function Código de ejemplo: Option Public Use "SimpleMIME" '--> La libreria que has creado con el codigo que te he pasado Sub Initialize Dim s As New notessession Dim db As notesdatabase Dim doc As notesdocument Dim html As String Set db = s.currentdatabase Set doc = db.createdocument doc.form = "Memo" doc.sendto = "Davy Vanherbergen" html = |This <i>is</i> an <b>example</b><p>| html = html + |<font color=purple>Hello</font><p>| Call addMimeItem( doc, "Body", html ) Call doc.send(False)
Hola, parece que ahora ya no me da error, lo que pasa es que he creado un formulario con un botón que llama al agente que me describes, desde el cliente no tengo ningún problema pero desde web no consigo que me envíe ningún mail. ¿Sabes a qué puede ser debido? Muchas gracias por tu ayuda.
Para saber el error debes mirar la base de datos log.nsf de tu servidor. Normalmente para la ejecución de agentes en web, debes dar permiso a los usuarios que los ejecutarán desde el documento del servidor (Con el Lotus Administrator). Norma 1: No puedes llamar ni tan siquiera escribir ningún objeto de tipo UI desde web, sino ni se ejecutará. Por ejemplo notesUIdocument, ... Comprueba que todas las librerías por donde pasa tu código están limpias de elementos UI. Username no se puede usar por agentes web. Lo que solemos hacer es crear un campo calculado en el formulario con la fórmula @UserName que después desde el agente recogerás a partir de dicho campo. Mira con que id has firmado el agente que se ejecuta. Acuérdate que el que envía el correo desde web, no es la persona en si, sino que es la persona que firmó el agente con su id. (Hay trucos para falsear el remitente y poner el usuario para envíos de correo web) Con todo lo que te he explicado, te debería funcionar. Suerte!
Supongo que trabajas con versión 6. Ese error tiene que ver con la restricción del agente. Debes modificarla. Explicación: In this version of the agent, we're looking specifically for the value of the $Restricted field of the agents. This is because in ND6, that field determines what the runtime security level of the agent is (the property is actually set in the Security tab of the Agent Properties dialog). If an agent has a runtime security level of "1" (the default setting), if won't be able to run "restricted" operations, which can cause your agent to fail with errors like: Error 201: Operation is disallowed in this session