Propòsit
Aquest mòdul té com a objectiu permetre l’enviament de correus electrònics a una o diverses adreces especificades a qualsevol dels següents recipients:
- Destinataris principals
- Destinataris secundaris
- Destinataris ocults
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 en mode adjunt o inline.
Versions i Dependències
Instal.lació i Configuració
Instal.lació
Per tal d’instal-lar el mòdul d’enviament de correu es pot incloure automàticament a través de l’eina de suport al desenvolupament o bé afegir manualment en el pom.xml de l’aplicació la següent dependència:
<canigo.support.mailing.version>[1.3.0,1.4.0)</canigo.support.mailing.version>
<dependency>
	<groupId>cat.gencat.ctti</groupId>
	<artifactId>canigo.support.mailing</artifactId>
	<version>${canigo.support.mailing.version}</version>
</dependency>
Configuració
La configuració es realitza automàticament a partir de la eina de suport al desenvolupament.
L’eina de desenvolupament genera automàticament el fitxer de propietats necessari per a la configuració del servei.
Ubicació proposada: <PROJECT_ROOT>/src/main/resources/config/props/mail.properties
| Propietat | Requerit | Valor Defecte | Descripció | 
|---|---|---|---|
| *.mail.host | Sí | Nom del servidor de correu sortint (smtp). | |
| *.mail.port | No | 25 | Port del servidor de correu sortint (smtp). | 
| *.mail.protocol | No | smtp | Protocol del servidor de correu sortint (smtp). | 
| *.mail.username | No | Usuari de connexió al servidor de correu sorting (smtp). | |
| *.mail.password | No | Password de l’usuari de connexió. | |
| *.mail.defaultEncoding | No | UTF-8 | Encoding per defecte del correu. | 
| *.mail.maxAttachmentSize | No | 0(sense límits) | Tamany màxim permés dels fitxers adjunts. | 
| *.mail.isSmtpSSLEnabled | No | false | Habilitar o deshabilitar SSL. | 
| *.mail.debug | No | false | Activar les traces de debug. | 
| *.mail.timeout | No | 8500 | Timeout pel servidor de correu(ms). | 
Utilització del Mòdul
Directe
A la versió 1.3.0 del mòdul s’ha creat la interfície cat.gencat.ctti.canigo.arch.support.mailing.FluentMailService seguint l’especificació Fluent Builder, proporcionant més flexibilitat i claredat en la definició dels paràmetres.
Un exemple d’ús directe és el següent:
import cat.gencat.ctti.canigo.arch.support.mailing.FluentMailService;
import org.springframework.stereotype.Service;
@Service
public class MyExampleClass {
	@Autowired
	private FluentMailService fluentMailService;
	public void sendTestEmail(boolean isHtml, boolean isInlineAttachment) {
		fluentMailService.send(fluentMailService //
				.from("from@test.com") //
				.to("to@test.com") //
				.subject("títol") //
				.message("The results are OK.", isHtml) //
				.attachments(new Attachment(logoByteArray, "companyLogo.gif", isInlineAttachment),
						new Attachment(pdfInputStream, "results.pdf", false)) //
		);
	}
}
REST
Per a utilitzar aquest mòdul, cal crear un Controller i un Service:
MailAplicacioService.java
Classe Java on es realitzarà la lògica de la operació a realitzar i es connecta amb el mòdul d’enviament de correus.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import cat.gencat.ctti.canigo.arch.support.mailing.MailService;
@Service("mailAplicacioService")
@Lazy
public class MailAplicacioService {
	private static final Logger log = LoggerFactory.getLogger(MailAplicacioService.class);
	@Autowired
	private MailService service;
    
	public String testEmail(String from, String subject, String body, boolean isHtml, String to){
		
		String message;
        try{
        	this.service.send(from, subject, body, isHtml, to);
        }catch(Exception e){
        	message = "Error al test: " + e.getMessage();
        	log.error(e.getMessage(), e);
        }
        
        message = "Test correcte";
        return message;
    }
	
}
MailServiceController.java
Controller que publica les operacions disponibles per a qui hagi de consumir-les
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import cat.gencat.plantilla32.service.MailAplicacioService;
@RestController
@RequestMapping("/mail")
public class MailServiceController {
	@Autowired
	MailAplicacioService mailAplicacioService;
	@PostMapping(produces = { MediaType.APPLICATION_JSON_VALUE })
	public String testEnotum(@RequestParam String from, 
			@RequestParam String subject,
			@RequestParam String body,
			@RequestParam boolean isHtml,
			@RequestParam String to) throws Exception {
		return mailAplicacioService.testEmail(from, subject, body, isHtml, to);
	}
}