MailService.java
- /*
- * Copyright (c) 2002-2022, City of Paris
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice
- * and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice
- * and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * License 1.0
- */
- package fr.paris.lutece.portal.service.mail;
- import fr.paris.lutece.portal.service.daemon.AppDaemonService;
- import fr.paris.lutece.portal.service.daemon.Daemon;
- import fr.paris.lutece.portal.service.datastore.DatastoreService;
- import fr.paris.lutece.portal.service.portal.PortalService;
- import fr.paris.lutece.portal.service.spring.SpringContextService;
- import fr.paris.lutece.portal.service.util.AppPathService;
- import fr.paris.lutece.portal.service.util.AppPropertiesService;
- import fr.paris.lutece.util.mail.FileAttachment;
- import fr.paris.lutece.util.mail.UrlAttachment;
- import java.util.List;
- /**
- * Application Mail Service
- */
- public final class MailService
- {
- private static final String KEY_NO_REPLY_EMAIL = "portal.site.site_property.noreply_email";
- private static final String PROPERTY_MAIL_NOREPLY_EMAIL = "mail.noreply.email";
- private static final String BEAN_MAIL_QUEUE = "mailQueue";
- /** Creates a new instance of AppMailService */
- private MailService( )
- {
- }
- /**
- * Enqueues a mail item to be sent
- *
- * @param item
- * the mail item to enqueue
- */
- private static void enqueue( MailItem item )
- {
- getQueue( ).send( item );
- AppDaemonService.signalDaemon( MailSenderDaemon.DAEMON_ID );
- }
- /**
- * Send a HTML message asynchronously. The message is queued until a daemon thread send all awaiting messages
- *
- * @param strRecipientsTo
- * The list of the main recipients email.Every recipient must be separated by the mail separator define in config.properties
- * @param strSenderName
- * The sender name.
- * @param strSenderEmail
- * The sender email address.
- * @param strSubject
- * The message subject.
- * @param strMessage
- * The message.
- */
- public static void sendMailHtml( String strRecipientsTo, String strSenderName, String strSenderEmail, String strSubject, String strMessage )
- {
- sendMailHtml( strRecipientsTo, null, null, strSenderName, strSenderEmail, strSubject, strMessage );
- }
- /**
- * Send a HTML message asynchronously. The message is queued until a daemon thread send all awaiting messages
- *
- * @param strRecipientsTo
- * The list of the main recipients email.Every recipient must be separated by the mail separator defined in config.properties
- * @param strRecipientsCc
- * The recipients list of the carbon copies .
- * @param strRecipientsBcc
- * The recipients list of the blind carbon copies .
- * @param strSenderName
- * The sender name.
- * @param strSenderEmail
- * The sender email address.
- * @param strSubject
- * The message subject.
- * @param strMessage
- * The message.
- */
- public static void sendMailHtml( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc, String strSenderName, String strSenderEmail,
- String strSubject, String strMessage )
- {
- sendMailHtml( strRecipientsTo, strRecipientsCc, strRecipientsBcc, strSenderName, strSenderEmail, strSubject, strMessage, false );
- }
- /**
- * Send a HTML message asynchronously. The message is queued until a daemon thread send all awaiting messages
- *
- * @param strRecipientsTo
- * The list of the main recipients email.Every recipient must be separated by the mail separator defined in config.properties
- * @param strRecipientsCc
- * The recipients list of the carbon copies .
- * @param strRecipientsBcc
- * The recipients list of the blind carbon copies .
- * @param strSenderName
- * The sender name.
- * @param strSenderEmail
- * The sender email address.
- * @param strSubject
- * The message subject.
- * @param strMessage
- * The message.
- * @param bUniqueRecipientTo
- * true if the mail must be send unitarily for each recipient
- */
- public static void sendMailHtml( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc, String strSenderName, String strSenderEmail,
- String strSubject, String strMessage, boolean bUniqueRecipientTo )
- {
- MailItem item = new MailItem( );
- item.setRecipientsTo( strRecipientsTo );
- item.setRecipientsCc( strRecipientsCc );
- item.setRecipientsBcc( strRecipientsBcc );
- item.setSenderName( strSenderName );
- item.setSenderEmail( strSenderEmail );
- item.setSubject( strSubject );
- item.setMessage( strMessage );
- item.setFormat( MailItem.FORMAT_HTML );
- item.setUniqueRecipientTo( bUniqueRecipientTo );
- enqueue( item );
- }
- /**
- * Send a HTML message asynchronously with the attachments associated to the message . The message is queued until a daemon thread send all awaiting
- * messages
- *
- * @param strRecipientsTo
- * The list of the main recipients email.Every recipient must be separated by the mail separator defined in config.properties
- * @param strSenderName
- * The sender name.
- * @param strSenderEmail
- * The sender email address.
- * @param strSubject
- * The message subject.
- * @param strMessage
- * The message.
- * @param urlsAttachement
- * The List of UrlAttachement Object, containing the URL of attachments associated with their content-location.
- */
- public static void sendMailMultipartHtml( String strRecipientsTo, String strSenderName, String strSenderEmail, String strSubject, String strMessage,
- List<UrlAttachment> urlsAttachement )
- {
- sendMailMultipartHtml( strRecipientsTo, null, null, strSenderName, strSenderEmail, strSubject, strMessage, urlsAttachement, null );
- }
- /**
- * Send a HTML message asynchronously with the attachments associated to the message and attached files . The message is queued until a daemon thread send
- * all awaiting messages
- *
- * @param strRecipientsTo
- * The list of the main recipients email.Every recipient must be separated by the mail separator defined in config.properties
- * @param strRecipientsCc
- * The recipients list of the carbon copies .
- * @param strRecipientsBcc
- * The recipients list of the blind carbon copies .
- * @param strSenderName
- * The sender name.
- * @param strSenderEmail
- * The sender email address.
- * @param strSubject
- * The message subject.
- * @param strMessage
- * The message.
- * @param urlsAttachement
- * The List of UrlAttachement Object, containing the URL of attachments associated with their content-location
- * @param filesAttachement
- * The list of attached files.
- */
- public static void sendMailMultipartHtml( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc, String strSenderName,
- String strSenderEmail, String strSubject, String strMessage, List<UrlAttachment> urlsAttachement, List<FileAttachment> filesAttachement )
- {
- sendMailMultipartHtml( strRecipientsTo, strRecipientsCc, strRecipientsBcc, strSenderName, strSenderEmail, strSubject, strMessage, urlsAttachement,
- filesAttachement, false );
- }
- /**
- * Send a HTML message asynchronously with the attachments associated to the message and attached files . The message is queued until a daemon thread send
- * all awaiting messages
- *
- * @param strRecipientsTo
- * The list of the main recipients email.Every recipient must be separated by the mail separator defined in config.properties
- * @param strRecipientsCc
- * The recipients list of the carbon copies .
- * @param strRecipientsBcc
- * The recipients list of the blind carbon copies .
- * @param strSenderName
- * The sender name.
- * @param strSenderEmail
- * The sender email address.
- * @param strSubject
- * The message subject.
- * @param strMessage
- * The message.
- * @param urlsAttachement
- * The List of UrlAttachement Object, containing the URL of attachments associated with their content-location
- * @param filesAttachement
- * The list of attached files.
- * @param bUniqueRecipientTo
- * true if the mail must be send unitarily for each recipient
- */
- public static void sendMailMultipartHtml( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc, String strSenderName,
- String strSenderEmail, String strSubject, String strMessage, List<UrlAttachment> urlsAttachement, List<FileAttachment> filesAttachement,
- boolean bUniqueRecipientTo )
- {
- MailItem item = new MailItem( );
- item.setRecipientsTo( strRecipientsTo );
- item.setRecipientsCc( strRecipientsCc );
- item.setRecipientsBcc( strRecipientsBcc );
- item.setSenderName( strSenderName );
- item.setSenderEmail( strSenderEmail );
- item.setSubject( strSubject );
- item.setMessage( strMessage );
- item.setFormat( MailItem.FORMAT_MULTIPART_HTML );
- item.setUrlsAttachement( urlsAttachement );
- item.setFilesAttachement( filesAttachement );
- item.setUniqueRecipientTo( bUniqueRecipientTo );
- enqueue( item );
- }
- /**
- * Send a calendar message asynchronously. The message is queued until a daemon thread send all awaiting messages
- *
- * @param strRecipientsTo
- * The list of the main recipients email. Every recipient must be separated by the mail separator defined in config.properties
- * @param strSenderName
- * The sender name.
- * @param strSenderEmail
- * The sender email address.
- * @param strSubject
- * The message subject.
- * @param strMessage
- * The message.
- * @param strCalendarMessage
- * The calendar message
- * @param bCreateEvent
- * True to create the calendar event, false to remove it
- */
- public static void sendMailCalendar( String strRecipientsTo, String strSenderName, String strSenderEmail, String strSubject, String strMessage,
- String strCalendarMessage, boolean bCreateEvent )
- {
- sendMailCalendar( strRecipientsTo, null, null, strSenderName, strSenderEmail, strSubject, strMessage, strCalendarMessage, bCreateEvent );
- }
- /**
- * Send a calendar message asynchronously. The message is queued until a daemon thread send all awaiting messages
- *
- * @param strRecipientsTo
- * The list of the main recipients email. Every recipient must be separated by the mail separator defined in config.properties
- * @param strRecipientsCc
- * The recipients list of the carbon copies .
- * @param strRecipientsBcc
- * The recipients list of the blind carbon copies .
- * @param strSenderName
- * The sender name.
- * @param strSenderEmail
- * The sender email address.
- * @param strSubject
- * The message subject.
- * @param strMessage
- * The message.
- * @param strCalendarMessage
- * The calendar message
- * @param bCreateEvent
- * True to create the calendar event, false to remove it
- */
- public static void sendMailCalendar( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc, String strSenderName, String strSenderEmail,
- String strSubject, String strMessage, String strCalendarMessage, boolean bCreateEvent )
- {
- sendMailCalendar( strRecipientsTo, strRecipientsCc, strRecipientsBcc, strSenderName, strSenderEmail, strSubject, strMessage, strCalendarMessage,
- bCreateEvent, false );
- }
- /**
- * Send a calendar message asynchronously. The message is queued until a daemon thread send all awaiting messages
- *
- * @param strRecipientsTo
- * The list of the main recipients email. Every recipient must be separated by the mail separator defined in config.properties
- * @param strRecipientsCc
- * The recipients list of the carbon copies .
- * @param strRecipientsBcc
- * The recipients list of the blind carbon copies .
- * @param strSenderName
- * The sender name.
- * @param strSenderEmail
- * The sender email address.
- * @param strSubject
- * The message subject.
- * @param strMessage
- * The message.
- * @param strCalendarMessage
- * The calendar message
- * @param bCreateEvent
- * True to create the calendar event, false to remove it
- * @param bUniqueRecipientTo
- * true if the mail must be send unitarily for each recipient
- */
- public static void sendMailCalendar( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc, String strSenderName, String strSenderEmail,
- String strSubject, String strMessage, String strCalendarMessage, boolean bCreateEvent, boolean bUniqueRecipientTo )
- {
- MailItem item = new MailItem( );
- item.setRecipientsTo( strRecipientsTo );
- item.setRecipientsCc( strRecipientsCc );
- item.setRecipientsBcc( strRecipientsBcc );
- item.setSenderName( strSenderName );
- item.setSenderEmail( strSenderEmail );
- item.setSubject( strSubject );
- item.setMessage( strMessage );
- item.setCalendarMessage( strCalendarMessage );
- item.setCreateEvent( bCreateEvent );
- item.setFormat( MailItem.FORMAT_CALENDAR );
- item.setUniqueRecipientTo( bUniqueRecipientTo );
- enqueue( item );
- }
- /**
- * Send a text message asynchronously. The message is queued until a daemon thread send all awaiting messages
- *
- * @param strRecipientsTo
- * The list of the main recipients email. Every recipient must be separated by the mail separator defined in config.properties
- * @param strSenderName
- * The sender name.
- * @param strSenderEmail
- * The sender email address.
- * @param strSubject
- * The message subject.
- * @param strMessage
- * The message.
- */
- public static void sendMailText( String strRecipientsTo, String strSenderName, String strSenderEmail, String strSubject, String strMessage )
- {
- sendMailText( strRecipientsTo, null, null, strSenderName, strSenderEmail, strSubject, strMessage );
- }
- /**
- * Send a text message asynchronously. The message is queued until a daemon thread send all awaiting messages
- *
- * @param strRecipientsTo
- * The list of the main recipients email. Every recipient must be separated by the mail separator defined in config.properties
- * @param strRecipientsCc
- * The recipients list of the carbon copies .
- * @param strRecipientsBcc
- * The recipients list of the blind carbon copies .
- * @param strSenderName
- * The sender name.
- * @param strSenderEmail
- * The sender email address.
- * @param strSubject
- * The message subject.
- * @param strMessage
- * The message.
- */
- public static void sendMailText( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc, String strSenderName, String strSenderEmail,
- String strSubject, String strMessage )
- {
- sendMailText( strRecipientsTo, strRecipientsCc, strRecipientsBcc, strSenderName, strSenderEmail, strSubject, strMessage, false );
- }
- /**
- * Send a text message asynchronously. The message is queued until a daemon thread send all awaiting messages
- *
- * @param strRecipientsTo
- * The list of the main recipients email. Every recipient must be separated by the mail separator defined in config.properties
- * @param strRecipientsCc
- * The recipients list of the carbon copies .
- * @param strRecipientsBcc
- * The recipients list of the blind carbon copies .
- * @param strSenderName
- * The sender name.
- * @param strSenderEmail
- * The sender email address.
- * @param strSubject
- * The message subject.
- * @param strMessage
- * The message.
- * @param bUniqueRecipientTo
- * true if the mail must be send unitarily for each recipient
- */
- public static void sendMailText( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc, String strSenderName, String strSenderEmail,
- String strSubject, String strMessage, boolean bUniqueRecipientTo )
- {
- MailItem item = new MailItem( );
- item.setRecipientsTo( strRecipientsTo );
- item.setRecipientsCc( strRecipientsCc );
- item.setRecipientsBcc( strRecipientsBcc );
- item.setSenderName( strSenderName );
- item.setSenderEmail( strSenderEmail );
- item.setSubject( strSubject );
- item.setMessage( strMessage );
- item.setFormat( MailItem.FORMAT_TEXT );
- item.setUniqueRecipientTo( bUniqueRecipientTo );
- enqueue( item );
- }
- /**
- * Send a text message asynchronously with attached files. The message is queued until a daemon thread send all awaiting messages
- *
- * @param strRecipientsTo
- * The list of the main recipients email.Every recipient must be separated by the mail separator defined in config.properties
- * @param strSenderName
- * The sender name.
- * @param strSenderEmail
- * The sender email address.
- * @param strSubject
- * The message subject.
- * @param strMessage
- * The message.
- * @param filesAttachement
- * The list of attached files.
- */
- public static void sendMailMultipartText( String strRecipientsTo, String strSenderName, String strSenderEmail, String strSubject, String strMessage,
- List<FileAttachment> filesAttachement )
- {
- sendMailMultipartText( strRecipientsTo, null, null, strSenderName, strSenderEmail, strSubject, strMessage, filesAttachement );
- }
- /**
- * Send a text message asynchronously with attached files. The message is queued until a daemon thread send all awaiting messages
- *
- * @param strRecipientsTo
- * The list of the main recipients email.Every recipient must be separated by the mail separator defined in config.properties
- * @param strRecipientsCc
- * The recipients list of the carbon copies .
- * @param strRecipientsBcc
- * The recipients list of the blind carbon copies .
- * @param strSenderName
- * The sender name.
- * @param strSenderEmail
- * The sender email address.
- * @param strSubject
- * The message subject.
- * @param strMessage
- * The message.
- * @param filesAttachement
- * The list of attached files.
- */
- public static void sendMailMultipartText( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc, String strSenderName,
- String strSenderEmail, String strSubject, String strMessage, List<FileAttachment> filesAttachement )
- {
- sendMailMultipartText( strRecipientsTo, strRecipientsCc, strRecipientsBcc, strSenderName, strSenderEmail, strSubject, strMessage, filesAttachement,
- false );
- }
- /**
- * Send a text message asynchronously with attached files. The message is queued until a daemon thread send all awaiting messages
- *
- * @param strRecipientsTo
- * The list of the main recipients email.Every recipient must be separated by the mail separator defined in config.properties
- * @param strRecipientsCc
- * The recipients list of the carbon copies .
- * @param strRecipientsBcc
- * The recipients list of the blind carbon copies .
- * @param strSenderName
- * The sender name.
- * @param strSenderEmail
- * The sender email address.
- * @param strSubject
- * The message subject.
- * @param strMessage
- * The message.
- * @param filesAttachement
- * The list of attached files.
- * @param bUniqueRecipientTo
- * true if the mail must be send unitarily for each recipient
- */
- public static void sendMailMultipartText( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc, String strSenderName,
- String strSenderEmail, String strSubject, String strMessage, List<FileAttachment> filesAttachement, boolean bUniqueRecipientTo )
- {
- MailItem item = new MailItem( );
- item.setRecipientsTo( strRecipientsTo );
- item.setRecipientsCc( strRecipientsCc );
- item.setRecipientsBcc( strRecipientsBcc );
- item.setSenderName( strSenderName );
- item.setSenderEmail( strSenderEmail );
- item.setSubject( strSubject );
- item.setMessage( strMessage );
- item.setFormat( MailItem.FORMAT_MULTIPART_TEXT );
- item.setFilesAttachement( filesAttachement );
- item.setUniqueRecipientTo( bUniqueRecipientTo );
- enqueue( item );
- }
- /**
- * Shutdown the service
- */
- public static void shutdown( )
- {
- // if there is mails that have not been sent call the daemon to flush the list
- Daemon daemon = AppDaemonService.getDaemon( MailSenderDaemon.DAEMON_ID );
- if ( daemon != null )
- {
- daemon.run( );
- }
- }
- /**
- * Returns a no reply email address defined in config.properties
- *
- * @return A no reply email
- */
- public static String getNoReplyEmail( )
- {
- String strDefault = AppPropertiesService.getProperty( PROPERTY_MAIL_NOREPLY_EMAIL );
- return DatastoreService.getDataValue( KEY_NO_REPLY_EMAIL, strDefault );
- }
- /**
- * Returns the mail queue
- *
- * @return the mail queue
- */
- public static IMailQueue getQueue( )
- {
- return SpringContextService.getBean( BEAN_MAIL_QUEUE );
- }
- /**
- * Extract a collection of elements to be attached to a mail from an HTML string.
- *
- * The collection contains the Url used for created DataHandler for each url associated with an HTML tag img, script or link. Those urls must start with the
- * url strBaseUrl.
- *
- * @param strHtml
- * The HTML code.
- * @param strBaseUrl
- * The base url, can be null in order to extract all urls.
- * @param useAbsoluteUrl
- * Determine if we use absolute or relative url for attachement content-location
- * @return a collection of UrlAttachment Object for created DataHandler associated with attachment urls.
- */
- public static List<UrlAttachment> getUrlAttachmentList( String strHtml, String strBaseUrl, boolean useAbsoluteUrl )
- {
- return MailUtil.getUrlAttachmentList( strHtml, strBaseUrl, useAbsoluteUrl );
- }
- /**
- * Return a String that contains a list of recipients separated with mail separator
- *
- * @param listRecipients
- * a list of string recipients
- * @return a String that contains a list of recipients separated with mail separator
- */
- public static String getStrRecipients( List<String> listRecipients )
- {
- return MailUtil.getStrRecipients( listRecipients );
- }
- /**
- * Get a string that contains an html link to the site back office or front office.
- *
- * @param strBaseUrl
- * The base url of the site
- * @param linkToFrontOffice
- * True if the link should be directed to the front office, false if it should be directed to the back office.
- * @return A string containing an html link.
- */
- public static String getSiteLink( String strBaseUrl, boolean linkToFrontOffice )
- {
- StringBuilder sb = new StringBuilder( );
- String strSiteName = PortalService.getSiteName( );
- if ( strSiteName != null )
- {
- sb.append( "<a title=\"" );
- sb.append( strSiteName );
- sb.append( "\" href=\"" );
- sb.append( strBaseUrl );
- String strUrl;
- if ( linkToFrontOffice )
- {
- strUrl = AppPathService.getPortalUrl( );
- }
- else
- {
- strUrl = AppPathService.getAdminMenuUrl( );
- }
- if ( strUrl != null )
- {
- sb.append( strUrl );
- }
- sb.append( "\" >" );
- sb.append( strSiteName );
- sb.append( "</a>" );
- }
- return sb.toString( );
- }
- }