Using a web service to send an eMail
In an integration project with other platforms the need arose to send messages that are triggered by a web service. In Domino this is just a few lines of code. Added bonus: the message is fully "embedded experiences" enabled. This is the LotusScript class:
Once you add that to a Domino web service you get the following web service definition:
To use that service the web service client needs to Base64 encode the PDF attachment
As usual YMMV
Public Class SendADocumentWithPDFAttachment
Public sendTo As String
Public subject As String
Public textBody As String
Public htmlBody As String
Public callBackURL As String
Public attachmentAsMime As String
Public Function sendMessage(message As SendADocumentWithPDFAttachment) As String
Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim header As NotesMIMEHeader
Dim body As NotesMIMEEntity
On Error Goto Err_sendMessage
'We are dealing with a MINME message here!
s.Convertmime = False
Set db = s.Currentdatabase
Set doc = db.Createdocument()
Call doc.Replaceitemvalue("Form", "Memo")
Call doc.Replaceitemvalue("From", s.Username)
Call doc.Replaceitemvalue("Subject", message.subject)
Call doc.Replaceitemvalue("SendTo", message.sendTo)
'Add other fields as you deem fit
'Prepare the message body
Set body = doc.Createmimeentity("Body")
body.Createheader("Content-Type").Setheaderval("multipart/alternative")
body.Createheader("MIME-Version").Setheaderval("1.0")
body.Createheader("Subject").Setheaderval(message.subject)
'Adding the content
If message.textBody <> "" Then
Call Me.addContent(s, body, message.textBody,"text/plain;charset=UTF-8")
End If
If message.htmlBody <> "" Then
Call Me.addContent(s, body, message.htmlBody,"text/html;charset=UTF-8")
End If
If message.callBackURL <> "" Then
Call Me.addContent(s, body,|{ "url" : "|+message.callBackURL+|" }|,"application/embed+json;charset=UTF-8")
End If
Call doc.Save(True, True)
'Sending has 2 options: use the send() function or copy the document
'into the mail.box. We use send here
Call doc.send(False)
s.Convertmime = True
sendMessage = "Message submitted"
Exit_sendMessage:
Exit Function
Err_sendMessage:
sendMessage = Error$
Resume Exit_sendMessage
End Function
Private Sub addContent(session As NotesSession, body As NotesMIMEEntity, content As String, contentType As String)
Dim mime As NotesMIMEEntity
Dim contentStream As NotesStream
On Error Goto Err_addContent
Set contentStream = session.Createstream()
Set mime = body.Createchildentity()
Call contentStream.Writetext(content)
contentStream.Position = 0
Call mime.setcontentFromText(contentStream,contentType,ENC_BASE64)
Exit_addContent:
Exit Sub
Err_addContent:
Print Error$
Resume Exit_addContent
End Sub
End Class
##
Once you add that to a Domino web service you get the following web service definition:
<?xml version="1.0" encoding="UTF-8"?> <definitions targetNamespace="urn:DefaultNamespace" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="urn:DefaultNamespace" xmlns:intf="urn:DefaultNamespace" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <wsdl:types> <schema targetNamespace="urn:DefaultNamespace" xmlns="http://www.w3.org/2001/XMLSchema"> <complexType name="SendADocumentWithPDFAttachment"> <sequence/> </complexType> <element name="MESSAGE" type="impl:SendADocumentWithPDFAttachment"/> <element name="SENDMESSAGEReturn" type="xsd:string"/> </schema> </wsdl:types> <message name="SENDMESSAGERequest"> <part element="impl:MESSAGE" name="MESSAGE"/> </message> <message name="SENDMESSAGEResponse"> <part element="impl:SENDMESSAGEReturn" name="SENDMESSAGEReturn"/> </message> <portType name="SendADocument"> <operation name="SENDMESSAGE"> <input message="impl:SENDMESSAGERequest" name="SENDMESSAGERequest"/> <output message="impl:SENDMESSAGEResponse" name="SENDMESSAGEResponse"/> </operation> </portType> <binding name="DominoSoapBinding" type="impl:SendADocument"> <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="SENDMESSAGE"> <wsdlsoap:operation soapAction="SENDMESSAGE"/> <input name="SENDMESSAGERequest"> <wsdlsoap:body use="literal"/> </input> <output name="SENDMESSAGEResponse"> <wsdlsoap:body use="literal"/> </output> </operation> </binding> <service name="SendADocumentService"> <port binding="impl:DominoSoapBinding" name="Domino"> <wsdlsoap:address location="http://localhost"/> </port> </service> </definitions>
To use that service the web service client needs to Base64 encode the PDF attachment
As usual YMMV
Posted by Stephan H Wissel on 06 January 2014 | Comments (0) | categories: IBM Notes