Mandar mail HTML

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 )".

1 respuesta

Respuesta
1
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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas