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