Canigó - Servei de Correu
SERVEI DE CORREU
IntroduccióPropósitAquest servei té com a objectiu permetre l'enviament de correus electrònics a una o diverses adreces especificades a qualsevol dels següents recipients:
Permet diferents modes d'enviament, tant en text pla, com en mode HTML, i en tots 2 casos oferint la possibilitat d'adjuntar un o més fitxers. Context i Escenaris d'ÚsEl Servei de Correu es troba dins dels serveis de Propósit General de canigo.
Versions i DependènciesLes dependències descrites a la següent url son requerides per tal de compilar i fer funcionar el projecte: A qui va dirigitAquest document va dirigit als següents perfils:
Documents i Fonts de Referència
Descripció DetalladaArquitectura i Componentscanigo ofereix la possibilitat d'utilitzar diferents implementacions del Servei de Correu. Dins la filosofia general d'oferir interfícies, els clients no es veurien afectats per un canvi d'implementació. Els components podem classificar-los en:
Es pot trobar tota la documentació JavaDoc y el codi font referent aquests components a les següents urls: JavaDoc: http://canigo.ctti.gencat.net/confluence/canigodocs/site/canigo2_0/canigo-services-mailing/apidocs/index.html Instal- lació i ConfiguracióInstal- lacióLa instal- lació del servei requereix de la utilització de la llibreria 'canigo-services-mailing' i les dependències indicades a l'apartat 'Introducció-Versions i Dependències'. ConfiguracióLa configuració del Servei de Correu implica els següents pasos:
Definició del Delegador d'Enviaments Fitxer de configuració: canigo-services-mailing.xml Ubicació proposada: <PROJECT_ROOT>/src/main/resources/spring Es permet l'ús de la classe 'org.springframework.mail.javamail.JavaMailSenderImpl'. Aquesta defineix les següents propietats: Propietats:
Exemple:
<bean id="mailSender" class="net.gencat.ctti.canigo.services.mail.impl.SpringJavaMailSenderImpl"> <property name="host" value="$\{mailSender.host\}"/> <property name="port" value="$\{mailSender.port\}"/> <property name="username" value="$\{mailSender.username\}"/> <property name="password" value="$\{mailSender.password\}"/> </bean> Definició del Servei Fitxer de configuració: canigo-services-mailing.xml Ubicació proposada: <PROJECT_ROOT>/src/main/resources/spring En l'actualitat s'ofereix la implementació 'net.gencat.ctti.canigo.services.mail.impl.SpringMailServiceImpl', en la que definirem les següents propietats:
Exemple:
<bean id="mailService" class="net.gencat.ctti.canigo.services.mail.impl.SpringMailServiceImpl"> <property name="maxAttachmentSize" value="$\{mailService.maxAttachmentSize\}"/> <property name="mailSender"><ref bean="mailSender"/></property> <property name="logService"><ref bean="loggingService"/></property> </bean> Definició de les Propietats del Servei Fitxer de configuració: mail.properties Ubicació proposada: <PROJECT_ROOT>/src/main/resources/mail En aquest fitxer definirem les propietats del servei. Aquestes propietats corresponen amb les que hem definit a les configuracions de l'enviador i del servei. Com a recordatori, tal i com s'ha vist al 'Servei de Configuració' podem fer ús de la classe 'HostPropertyPlaceHolderConfigurer' per definir tots els nostres fitxers de propietats. En el cas del Servei de Correu podem seguir la mateix filosofia, tal i com es mostra en el següent exemple:
<bean id="configurationService" class="net.gencat.ctti.canigo.services.configuration. springframework.beans.factory.config.HostPropertyPlaceholderConfigurer"> <property name="basePropertyFiles"> <list> <value>classpath:jdbc/jdbc.properties</value> <value>classpath:mail/mail.propertiesc</value> <value>classpath:file/fileUploadService.properties</value> <value>classpath:file/fileService.properties</value> </list> </property> </bean> >> Referència al fitxer de propietats 'mail.properties', que estarà ubicat al directori '/mail' dins el classpath En l'exemple el configurador fa ús d'un localitzador de fitxers depenent del host (HostPropertyResourceConfigurer). Això vol dir que si en aquest configurador incloem una referència a un fitxer de propietats anomenat " mail.properties", realment es buscarà un fitxer anomenat "mail.properties.nom_del_host". No obstant, aquesta no és l'única possibilitat, ja que es pot fer servir un altre configurador que no depengui del host (com per exemple PropertyOverrideConfigurer). Per a més informació sobre els configuradors veure el document del Servei de Configuració. Exemple de fitxer de propietats:
mailSender.host=smtp.es.int.atosorigin.com
mailSender.port=25
mailSender.username=user name
mailSender.password=
mailService.maxAttachmentSize=1024
Definició dels Missatges d'Error del Servei Fitxer de configuració: canigo-errorCodes.properties Ubicació proposada: <PROJECT_ROOT>/src/main/resources/i18n/errorCodes.properties Configurar els següents codis d'error:
canigo.services.mail.attachment_size_exceeded=Attachment size exceeded: \{0\} bytes (max: \{1\}) canigo.services.mail.error_preparing_addresses=Error preparing addresses (to,bcc,cc) canigo.services.mail.error_sending_mail=Error sending mail Utilització del ServeiEnviament de CorreusPer enviar correus, les classes client definiran un atribut 'mailService' de tipus 'MailService'. Mitjançant el Servei de Configuració s'especificarà quina és la implementació escollida (transparent al client). Es permeten diferents combinacions d'enviament de correus (per a més referència consultar el javadoc de la interfície 'MailService). A mode de resum, podem enumerar:
# public void send(String from, String subject, String aMessage, boolean isHtml, String to) Envia un missatge ("aMessage") des d'una direcció a una altra ("from","to") amb un tópic ("subject") en format de text pla o HTML ("isHtml").
# public void send(String from, String subject, String aMessage, boolean isHtml, String to, File attachment) Envia un missatge ("aMessage") des d'una direcció a una altra ("from","to") amb un tópic ("subject") en format text pla o HTML ("isHtml") amb un fitxer annex ("attachment")
# public void send(String from, String subject, String aMessage, boolean isHtml, String to, Map recipients, List attachment) Envia un missatge ("aMessage") des d'una direcció a unes altres ("from","recipients") amb un tópic ("subject") en format text pla o HTML ("isHtml") amb una llista (o sense llista) de fitxers annexes ("attachments"). La llista de direccions annexes té forma de taula ("java.util.Map") on els continguts d'aquesta taula són:
La llista d'anexes és una llista de fitxers ("java.io.File"). Si és nul- la no s'enviarà cap fitxer anexe. ExemplesExemple de Prova UnitàriaUn exemple d'utilització del servei de correu són els tests unitaris, a on s'obté el bean del servei a partir del fitxer de definició (applicationContext.xml) i s'envia un correu electrònic a les adreces de test especificades.
package net.gencat.ctti.canigo.services.mail.test; ... public class MailServiceTest extends TestCase \{ ... public void testMailingWithoutAttachment()\{ /** * Obtenim les definicions dels beans utilitzats */ BeanFactory beanFactory = new ClassPathXmlApplicationContext("applicationContext.xml"); /** * Obtenim el servei de correu */ MailService mailService = (MailService) beanFactory.getBean("mailService"); /** * Obtenim les adreces de test */ TestClient clientTest = (TestClient) beanFactory.getBean("clientTest"); /** * Obtenim el servei de logs per deixar traces */ LoggingService logService = (LoggingService) beanFactory.getBean("logService"); try \{ logService.getLog(this.getClass()).debug("From test="clientTest.getFromTest()",To test="+clientTest. getToTest()); /** * Enviem el correu de forma fàcil i senzilla */ mailService.send(clientTest.getFromTest(),"MailServiceTest "+new Date(),"MailServiceTest without attachment",false,clientTest.getToTest()); \} catch (Exception e) \{...\} \} ... \} |