enviar electronicos desde correos correo con autenticar archivo adjunto java email tomcat servlets

electronicos - ¿Cómo envío un correo electrónico en Java?



javamail enviar correos electronicos desde java (9)

Necesito enviar correos electrónicos de un servlet que se ejecuta dentro de Tomcat. Siempre enviaré al mismo destinatario con el mismo tema, pero con diferentes contenidos.

¿Cuál es una manera simple y fácil de enviar un correo electrónico en Java?

Relacionado:

¿Cómo se envía un correo electrónico desde una aplicación Java utilizando GMail?


Agregue java.mail jar a la ruta de su clase si no es un proyecto convencional Agregue la siguiente dependencia en su pom.xml ejecute el código

<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4</version> </dependency>

A continuación está el código probado

import java.util.Date; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class MailSendingDemo { static Properties properties = new Properties(); static { properties.put("mail.smtp.host", "smtp.gmail.com"); properties.put("mail.smtp.port", "587"); properties.put("mail.smtp.auth", "true"); properties.put("mail.smtp.starttls.enable", "true"); } public static void main(String[] args) { String returnStatement = null; try { Authenticator auth = new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("yourEmailId", "password"); } }; Session session = Session.getInstance(properties, auth); Message message = new MimeMessage(session); message.setFrom(new InternetAddress("yourEmailId")); message.setRecipient(Message.RecipientType.TO, new InternetAddress("recepeientMailId")); message.setSentDate(new Date()); message.setSubject("Test Mail"); message.setText("Hi"); returnStatement = "The e-mail was sent successfully"; System.out.println(returnStatement); Transport.send(message); } catch (Exception e) { returnStatement = "error in sending mail"; e.printStackTrace(); } } }


Aquí está la solución simple

Descargue estos archivos jar: 1. Javamail 2. smtp 3. Java.mail

Copie y pegue el siguiente código de [http://javapapers.com/core-java/java-email/][1]

Edite el correo electrónico, nombre de usuario y contraseña (ID de usuario y contraseña de Gmail)


Aquí está mi código para hacer eso:

import javax.mail.*; import javax.mail.internet.*; // Set up the SMTP server. java.util.Properties props = new java.util.Properties(); props.put("mail.smtp.host", "smtp.myisp.com"); Session session = Session.getDefaultInstance(props, null); // Construct the message String to = "[email protected]"; String from = "[email protected]"; String subject = "Hello"; Message msg = new MimeMessage(session); try { msg.setFrom(new InternetAddress(from)); msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); msg.setSubject(subject); msg.setText("Hi,/n/nHow are you?"); // Send the message. Transport.send(msg); } catch (MessagingException e) { // Error. }

Puede obtener las bibliotecas JavaMail de Sun aquí: http://java.sun.com/products/javamail/


JavaMail es excelente si puede confiar en un servidor SMTP externo. Sin embargo, si tiene que ser su propio servidor SMTP, eche un vistazo a Asprin .


JavaMail puede ser un poco difícil de usar. Si desea una solución más simple y limpia, eche un vistazo a la envoltura Spring para JavaMail. Los documentos de referencia están aquí:

http://static.springframework.org/spring/docs/2.5.x/reference/mail.html

Sin embargo, esto significa que necesita Spring en su aplicación, si eso no es una opción, entonces podría mirar otro contenedor de código abierto como simple-java-mail:

simplejavamail.org

Alternativamente, puede usar JavaMail directamente, pero las dos soluciones anteriores son formas más fáciles y más limpias de enviar correo electrónico en Java.


Normalmente defino mi sesión javamail en la sección GlobalNamingResources del archivo server.xml de tomcat para que mi código no dependa de los parámetros de configuración:

<GlobalNamingResources> <Resource name="mail/Mail" auth="Container" type="javax.mail.Session" mail.smtp.host="localhost"/> ... </GlobalNamingResources>

y obtengo la sesión a través de JNDI:

Context context = new InitialContext(); Session sess = (Session) context.lookup("java:comp/env/mail/Mail"); MimeMessage message = new MimeMessage(sess); message.setFrom(new InternetAddress(from)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject(subject, "UTF-8"); message.setText(content, "UTF-8"); Transport.send(message);


Para seguir con la respuesta de jon, aquí hay un ejemplo de cómo enviar un correo usando simple-java-mail .

La idea es que no necesita conocer todas las partes técnicas (anidadas) que componen un correo electrónico. En ese sentido, se parece mucho al correo electrónico común de Apache, excepto que Simple Java Mail es un poco más sencillo que la API de correo de Apache cuando se trata de archivos adjuntos e imágenes incrustadas. La instalación de correo de Spring funciona igual pero es un poco incómoda (por ejemplo, requiere una clase interna anónima) y por supuesto necesitas una dependencia en Spring que te ofrece mucho más que una simple biblioteca de correo, ya que fue diseñada ser una solución de IOC.

Simple Java Mail btw es un envoltorio alrededor de la API de JavaMail.

final Email email = new Email(); email.setFromAddress("lollypop", "[email protected]"); email.setSubject("hey"); email.addRecipient("C. Cane", "[email protected]", RecipientType.TO); email.addRecipient("C. Bo", "[email protected]", RecipientType.BCC); email.setText("We should meet up! ;)"); email.setTextHTML("<img src=''cid:wink1''><b>We should meet up!</b><img src=''cid:wink2''>"); // embed images and include downloadable attachments email.addEmbeddedImage("wink1", imageByteArray, "image/png"); email.addEmbeddedImage("wink2", imageDatesource); email.addAttachment("invitation", pdfByteArray, "application/pdf"); email.addAttachment("dresscode", odfDatasource); new Mailer("smtp.host.com", 25, "username", "password").sendMail(email); // or alternatively, pass in your own traditional MailSession object. new Mailer(preconfiguredMailSession).sendMail(email);



use la biblioteca de Java Mail

import javax.mail.* ... Session mSession = Session.getDefaultInstance(new Properties()); Transport mTransport = null; mTransport = mSession.getTransport("smtp"); mTransport.connect(cServer, cUser, cPass); MimeMessage mMessage = new MimeMessage(mSession); mTransport.sendMessage(mMessage, mMessage.getAllRecipients()); mTransport.close();

Esta es una versión truncada del código que uso para que una aplicación envíe correos electrónicos. Obviamente, poner un cuerpo y destinatarios en el mensaje antes de enviarlo probablemente te vaya mejor.

La ubicación del repositorio maven es artifactId: javax.mail, groupId: mail.