SMTP connection example

Overview

The purpose of this example is to give you an overview of the various mechanisms the Connectors Framework brings to you for creating connections.

Developing a connection is quite straightforward. You just need to create the following elements:

  • Runtime and Editor Java classes;
  • and an XML definition and a string resource XML files.

Create an SMTP connection

Define the connection and set up the configuration

This file should be available from the relative path "WEB-INF\storage<custom><connections>\education-mail.xml" within the final connectors package.

<?xml version="1.0" encoding="UTF-8"?>
<connections>   
        <connection-settings name="smtp.connection" category="education">
                <class qualifiedName="com.axemble.education.connectors.smtp.SampleSMTPConnection" />
                <configuration>
                        <class qualifiedName="com.axemble.education.connectors.smtp.SampleSMTPConnectionEditor" />
                        <section name="settings" label="LG_SETTINGS">
                                <fields>                                        
                                        <field name="fldMailBaseUrl" label="LG_MAIL_BASE_URL" ctrl="com.axemble.vdp.ui.core.document.fields.TextBoxField" />
                                        <field name="fldSmtpServer" label="LG_SMTP_SERVER" ctrl="com.axemble.vdp.ui.core.document.fields.TextBoxField" mandatory="true" />
                                        <field name="fldSmtpPort" label="LG_SMTP_PORT" ctrl="com.axemble.vdp.ui.core.document.fields.TextBoxField" mandatory="true" />
                                        <field name="fldMailAdministrator" label="LG_SMTP_MAIL_ADMINISTRATOR" ctrl="com.axemble.vdp.ui.core.document.fields.TextBoxField" />
                                        <field name="fldMailSender" label="LG_SMTP_MAIL_SENDER" ctrl="com.axemble.vdp.ui.core.document.fields.TextBoxField" />
                                </fields>
                        </section>
                </configuration>
        </connection-settings>                          
</connections>

Create the runtime class for the SMTP connection

Declare the package, the imports and the class

package com.axemble.education.connectors.smtp;

import java.io.Serializable;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import com.axemble.vdoc.sdk.connectors.BaseConnection;
import com.axemble.vdoc.sdk.utils.Logger;

public class SampleSMTPConnection extends BaseConnection

Declare an internal structure to represent the connection object

public class InnerConnection implements Serializable
{
        private static final long serialVersionUID = 8564201166004587558L;

        private Session session;
        private Transport transport;

        /**
         * @param session
         * @param transport
         */
        public InnerConnection( Session session, Transport transport )
        {
                super();
                this.session = session;
                this.transport = transport;
        }
        public Session getSession()
        {
                return session;
        }
        public Transport getTransport()
        {
                return transport;
        }
}

Example getConnection method

@Override
public Object getConnection()
{
        try
        {
                String serverName = (String)getConnectionDefinition().getValue( SampleSMTPConnectionEditor.FIELD_SMTP_SERVER );
                String portNumber = (String)getConnectionDefinition().getValue( SampleSMTPConnectionEditor.FIELD_SMTP_PORT );

                String smtpLogin = getPortalModule().getConfiguration().getStringProperty( "mail.smtp.login" );
                String smtpPassword = getPortalModule().getConfiguration().getStringProperty( "mail.smtp.password" );

                Properties prop = System.getProperties();
                prop.put( "mail.smtp.host", serverName );
                prop.put( "mail.smtp.port", portNumber );
                Session session = Session.getDefaultInstance( prop, null );

                Transport transport = session.getTransport( "smtp" );
                transport.connect( serverName, smtpLogin, smtpPassword );

                return new InnerConnection( session, transport );
        }
        catch( Exception e )
        {
                Logger.getLogger( this.getClass() ).error( getPortalModule().getStaticString( "LG_TEST_SEND_MAIL_ERROR" ) + e.toString() );
        }
        return null;
}

Example validate method

@Override
public boolean validate() throws Exception
{
        Transport transport = null;
        try
        {
                // get a connection
                InnerConnection innerConnection = (InnerConnection)getConnection();
                if ( innerConnection == null )
                        return false;

                String senderEmail = (String)getConnectionDefinition().getValue( SampleSMTPConnectionEditor.FIELD_MAIL_SENDER );
                String administratorEmail = (String)getConnectionDefinition().getValue( SampleSMTPConnectionEditor.FIELD_MAIL_ADMINISTRATOR );

                Session session = innerConnection.getSession();
                MimeMessage mimeMessage = new MimeMessage( session );
                mimeMessage.setSubject( "E-mail de test" );
                mimeMessage.setText( "Ceci est un test d'envoi d'e-mail" );

                mimeMessage.setFrom( new InternetAddress( senderEmail ) );
                InternetAddress[] internetAddresses = new InternetAddress[1];
                internetAddresses[0] = new InternetAddress( administratorEmail );
                mimeMessage.setRecipients( Message.RecipientType.TO, internetAddresses );

                transport = innerConnection.getTransport();
                transport.sendMessage( mimeMessage, mimeMessage.getAllRecipients() );

                return true;
        }
        finally
        {
                safeClose( transport );
        }
}