Make javax.mail and impl as maven scope provided, as TomEE comes with geronimo mail implementation.
Also use resource injection of mail session:
https://dwuysan.wordpress.com/2016/02/17/sending-email-on-apache-tomee/
(If mail account is Gmail, turn ON ‘Allow less secure apps’)
In Tomee.xml:
<?xml version="1.0" encoding="UTF-8"?> <tomee> <!-- see http://tomee.apache.org/containers-and-resources.html --> <!-- activate next line to be able to deploy applications in apps --> <!-- <Deployments dir="apps" /> --> <Resource id="tomee/mail/GMailSMTP" type="javax.mail.Session"> mail.smtp.host=smtp.gmail.com mail.smtp.starttls.enable=true mail.smtp.port=587 mail.transport.protocol=smtp mail.smtp.auth=true mail.smtp.user=<!-- your email address --> password=<!-- your password, and not 'mail.smtp.password' --> </Resource> </tomee>
Injection of resource:
@Stateless @LocalBean @Path(value = "workline") public class MailService { @Resource(mappedName = "java:comp/env/tomee/mail/GMailSMTP") private Session smtpSession; public boolean sendMail() throws NamingException { final Message message = new MimeMessage(this.smtpSession); try { message.setRecipients(Message.RecipientType.TO, new Address[]{ new InternetAddress("someone@gmail.com") }); message.setSubject("Email from TomEE"); message.setSentDate(new Date()); message.setText("Email from TomEE"); Transport.send(message); } catch (Exception e) { Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, null, e); return false; } return true; } }
A raw implementation:
package com.origami.rpp.util; import com.origami.config.SisVars; import java.io.File; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; /** * * @author Origami */ public class Email { protected List<File> adjuntos = new ArrayList<>(); protected String usuarioCorreo = SisVars.correo; protected String password = SisVars.pass; protected String rutaArchivo1; protected String nombreArchivo1; protected String rutaArchivo2; protected String nombreArchivo2; protected String destinatario; protected String copiaOcultaBCC; protected String copiaCC; protected String asunto; protected String mensaje; public Email(String destinatario, String copiaOcultaBCC, String copiaCC, String asunto, String mensaje, List<File> files) { this.destinatario = destinatario; this.copiaOcultaBCC = copiaOcultaBCC; this.copiaCC = copiaCC; this.asunto = asunto; this.mensaje = mensaje; if(files != null) this.adjuntos = files; } public Email(String destinatario, String asunto, String mensaje, List<File> files) { this(destinatario, null, null, asunto, mensaje, files); } public boolean sendMail() { try { //INGRESO DE LAS POROPIEDADES DE LA CONEXION Properties props = new Properties(); props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.smtp.host", SisVars.smtp_Host); props.setProperty("mail.smtp.starttls.enable", "true"); props.setProperty("mail.smtp.port", SisVars.smtp_Port); props.setProperty("mail.smtp.user", usuarioCorreo); props.setProperty("mail.smtp.auth", "true"); //INSTANCIA DE LA SESSION Session session = Session.getInstance(props, null); //CUERPO DEL MENSAJE MimeMessage mimeMessage = new MimeMessage(session); mimeMessage.setFrom(new InternetAddress(usuarioCorreo, "EMPRESA PUBLICA MUNICIPAL DEL REGISTRO DE LA PROPIEDAD DEL CANTON PORTOVIEJO EP")); mimeMessage.setSubject(asunto); mimeMessage.setSentDate(new Date()); mimeMessage.addRecipients(Message.RecipientType.TO, InternetAddress.parse(destinatario)); if (copiaOcultaBCC != null) { mimeMessage.addRecipients(Message.RecipientType.BCC, InternetAddress.parse(copiaOcultaBCC)); } if (copiaCC != null) { mimeMessage.addRecipients(Message.RecipientType.CC, InternetAddress.parse(copiaCC)); } //TEXTO DEL MENSAJE MimeBodyPart texto = new MimeBodyPart(); texto.setText(mensaje); //CONTENEDOR DE LAS PARTES Multipart multipart = new MimeMultipart(); multipart.addBodyPart(texto); //ADJUNTAR LOS ARCHIVO EN PARTES MimeBodyPart file; for (File f : adjuntos ) { file = new MimeBodyPart(); file.attachFile(f.getAbsolutePath()); multipart.addBodyPart(file); } //AGREGAR MULTIPART EN CUERPO DEL MENSAJE mimeMessage.setContent(multipart); // ENVIAR MENSAJE Transport transport = session.getTransport("smtp"); transport.connect(usuarioCorreo, password); transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients()); transport.close(); } catch (MessagingException ex) { Logger.getLogger(Email.class.getName()).log(Level.SEVERE, null, ex); } catch (Exception e) { Logger.getLogger(Email.class.getName()).log(Level.SEVERE, null, e); } return true; } }