Ajuda com API JavaMail

3 respostas
J

Pessoal, bom dia.

Estou fazendo alguns testes (e estudos), pois tenho que implementar uma funcionalidade de envio de email, dentro do sistema da empresa que faço estágio.

Pois bem, fiz todo o código, (com a ajuda de alguns tópicos aqui do fórum e outras pesquisas feitas na net) e está apresentando um erro bem chato que não estou
conseguindo resolver de forma alguma.

Será que poderiam me dar um HELP???

Segue o código(foi apenas retirar meus dados).

package br.mb.tutorialJavaMail;

import java.util.List;
import java.util.Map;

public class MailJava {
	
	//Indica se o formato do E-mail será texto ou html.
	public static final String TIPE_TEXT_PLAIN = "text/plain";
	public static final String TIPE_TEXT_HTML = "text/html";
	
	//Indica qual será o servidor de E-mail.
	private String smtpHostMail;
	
	//Indica a porta de acesso ao servidor.
	private String smtpPortMail;
	
	//Indica a necessidade de autenticação no servidor (true or false).
	private String smtpAuth;
	
	//Indica ao servidor que ele está recebendo uma conexão segura.
	private String smtpStarttls;
	
	//Nome do remetente do E-mail.
	private String fromNameEmail;
	
	//E-mail do remetente.
	private String userMail;
	
	//Senha do E-mail do remetente.
	private String passMail;
	
	//Assunto do E-mail
	private String subjectMail;
	
	//Corpo do E-mail.
	private String bodyMail;
	
	//Lista com E-mail e nome dos Destinatários.
	private Map<String, String> toMailsUsers;
	
	//Lista contendo os arquivos anexos.
	private List<String> fileMails;
	
	//charset, no caso de html é necessário.
	private String charsetMail;
	
	//Tipo do formato da mensagem (texto ou html).
	private String typeTextMail;
	
	//Getters and Setters

	public String getSmtpHostMail() {
		return smtpHostMail;
	}

	public void setSmtpHostMail(String smtpHostMail) {
		this.smtpHostMail = smtpHostMail;
	}

	public String getSmtpPortMail() {
		return smtpPortMail;
	}

	public void setSmtpPortMail(String smtpPortMail) {
		this.smtpPortMail = smtpPortMail;
	}

	public String getSmtpAuth() {
		return smtpAuth;
	}

	public void setSmtpAuth(String smtpAuth) {
		this.smtpAuth = smtpAuth;
	}

	public String getSmtpStarttls() {
		return smtpStarttls;
	}

	public void setSmtpStarttls(String smtpStarttls) {
		this.smtpStarttls = smtpStarttls;
	}

	public String getFromNameEmail() {
		return fromNameEmail;
	}

	public void setFromNameEmail(String fromNameEmail) {
		this.fromNameEmail = fromNameEmail;
	}

	public String getUserMail() {
		return userMail;
	}

	public void setUserMail(String userMail) {
		this.userMail = userMail;
	}

	public String getPassMail() {
		return passMail;
	}

	public void setPassMail(String passMail) {
		this.passMail = passMail;
	}

	public String getSubjectMail() {
		return subjectMail;
	}

	public void setSubjectMail(String subjectMail) {
		this.subjectMail = subjectMail;
	}

	public String getBodyMail() {
		return bodyMail;
	}

	public void setBodyMail(String bodyMail) {
		this.bodyMail = bodyMail;
	}

	public Map<String, String> getToMailsUsers() {
		return toMailsUsers;
	}

	public void setToMailsUsers(Map<String, String> toMailsUsers) {
		this.toMailsUsers = toMailsUsers;
	}

	public List<String> getFileMails() {
		return fileMails;
	}

	public void setFileMails(List<String> fileMails) {
		this.fileMails = fileMails;
	}

	public String getCharsetMail() {
		return charsetMail;
	}

	public void setCharsetMail(String charsetMail) {
		this.charsetMail = charsetMail;
	}

	public String getTypeTextMail() {
		return typeTextMail;
	}

	public void setTypeTextMail(String typeTextMail) {
		this.typeTextMail = typeTextMail;
	}

	public static String getTIPE_TEXT_PLAIN() {
		return TIPE_TEXT_PLAIN;
	}

	public static String getTIPE_TEXT_HTML() {
		return TIPE_TEXT_HTML;
	}

}
package br.mb.tutorialJavaMail;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Multipart;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.io.UnsupportedEncodingException;
import java.util.Map;
import java.util.Properties;

public class MailJavaSender {
	
	//Cria as propriedades necessárias para o envio de E-mail.
	public void senderMail(final MailJava mail)throws 
	UnsupportedEncodingException, MessagingException {
		
		Properties props = new Properties();
		
		//Configurações do proxy.
		/*props.setProperty("proxySet", "true");
		props.setProperty("socksProxyHost", "MeuProxy");
		props.setProperty("socksProxyHost", "8080");*/
		
		props.setProperty("mail.transport.protocol", "smtp");
		props.setProperty("mail.host", mail.getSmtpHostMail());
		props.setProperty("mail.smtp.auth", mail.getSmtpAuth());
		props.setProperty("mail.smtp.starttls.enable", mail.getSmtpStarttls());
		props.setProperty("mail.smtp.port", mail.getSmtpPortMail());
		props.setProperty("mail.mine.charset", mail.getCharsetMail());
		
		/*Classe anônima que realiza a autenticação
		 * do usuário no servidor de E-mail.
		 */
		Authenticator auth = new Authenticator(){
			public PasswordAuthentication getPasswordAuthentication(){
				return new PasswordAuthentication(mail.getUserMail(), mail.getPassMail());
			}
		};//Fim
		
		//Cria a sessão passando as propriedades e a auntenticação.
		Session session = Session.getDefaultInstance(props, auth);
		//Gera um log no console referente ao processo de envio.
		session.setDebug(true);
		
		//Cria a mensgem setando o remetente e seus destinatários.
		Message msg = new MimeMessage(session);
		//aqui seta o remetente.
		msg.setFrom(new InternetAddress(mail.getUserMail(), mail.getFromNameEmail()));
		
		boolean first = true;
		for(Map.Entry<String, String> map: mail.getToMailsUsers().entrySet()){
			if(first){
				//Seta 1º destinatário.
				msg.addRecipient(Message.RecipientType.TO, new InternetAddress(map.getKey(), map.getValue()));
				first = false;
			} else{
				//Seta os demais destinatários.
				msg.addRecipient(Message.RecipientType.CC, new InternetAddress(map.getKey(), map.getValue()));
			}
		}//Fim do For.
		
		//Adiciona um Assunto à mensagem.
		msg.setSubject(mail.getSubjectMail());
		
		//Cria o Objeto que recebe o texto no corpo do E-mail.
		MimeBodyPart textPart = new MimeBodyPart();
		textPart.setContent(mail.getBodyMail(), mail.getTypeTextMail());
		
		//Monta a mensagem SMTP, inserindo o conteúdo, texto(s) e anexo(s).
		Multipart mps = new MimeMultipart();
		for(int index = 0; index < mail.getFileMails().size(); index++){
			
			//Cria um novo Objeto para cada arquivo, e anexa o arquivo.
			MimeBodyPart attachFilePart = new MimeBodyPart();
			FileDataSource fds = new FileDataSource(mail.getFileMails().get(index));
			
			attachFilePart.setDataHandler(new DataHandler(fds));
			attachFilePart.setFileName(fds.getName());
			
			//Adiciona os anexos da mensagem.
			mps.addBodyPart(attachFilePart, index);			
		}//Fim For.
		
		//Adiciona o corpo texto da mensagem.
		mps.addBodyPart(textPart);
		
		//Adiciona à mensgem o conteúdo do texto e anexo.
		msg.setContent(mps);
		
		//Envia a mensagem.
		Transport.send(msg);		
	}

}
package br.mb.tutorialJavaMail;

import javax.mail.MessagingException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MailTester {
	public static void main(String args[]){
		
		MailJava mj = new MailJava();
		
		//Configurações de envio.
		mj.setSmtpHostMail("smtp.gmail.com");
		mj.setSmtpPortMail("587");//Aqui testei até mesmo a porta 465 e o mesmo erro.
		mj.setSmtpAuth("true");
		mj.setSmtpStarttls("true");
		mj.setUserMail("[email removido]");
		mj.setFromNameEmail("Jean Carlos");
		mj.setPassMail("minha senha");
		mj.setCharsetMail("ISO-8859-1");
		mj.setSubjectMail("JavaMail");
		mj.setBodyMail(htmlMessage());
		mj.setTypeTextMail(MailJava.TIPE_TEXT_HTML);
		
		//Setando Destinatários.
		Map<String, String> map = new HashMap<String, String>();
		map.put("[email removido]", "email yahoo");
		map.put("destinatario", "email gmail");
		map.put("destinatario2", "email vale");
		map.put("destinatario3", "email vale2");
		map.put("destinatario4", "email vale3");
		map.put("destinatario5", "email vale4");
		
		mj.setToMailsUsers(map);
		
		//Setando Anexos.
		List<String> files = new ArrayList<String>();
		files.add("C:\\Dados\\Images\\ppcsystem.png");
		files.add("C:\\Dados\\Images\\OSKLEN_PRETO_CC.jpg");
		
		mj.setFileMails(files);
		
		try{
			new MailJavaSender().senderMail(mj);
		} catch(UnsupportedEncodingException e){
			e.printStackTrace();
		} catch(MessagingException m){
			m.printStackTrace();
		}
	}//Fim main.
	
	private static String textMessage(){
		return "Este é um teste para envio de E-mail, através da API do JavaMail.\n" +
				"Neste exemplo está implemmentado como enviar emails com anexo, em formato texto e html.\n" +
				"Este Teste envia emails para mais de um destinatario.";
	}//Fim Função corpo email = texto.
	
	private static String htmlMessage(){
		return "<html>\n" +
				"\t<head>\n" +
				"\t\t<title>Email no formato HTML com Javamail!</title> \n" +
				"\t</head>\n" +
				"\t<body>\n" +
				"\t\t<div style='background-color:orange; width:28%; height:100px;'>\n" +
				"\t\t\t<ul>\n" +
				"\t\t\t\t<li>Este é um teste para envio de E-mail, através da API do JavaMail.</li>\n" +
				"\t\t\t\t<li>Neste exemplo está implemmentado como enviar emails com anexo,</li>\n" +
				" \t\t\t\t<li>e também em formato texto e html..</li> \n" +
				"\t\t\t\t<li>Este Teste envia emails para mais de um destinatario.</li>\n" +
				"\t\t\t</ul>\n" +
				"\t\t\t<p> Jean Carlos \n" +
				//"\t\t\t\t<a href='http://mballem.wordpress.com/'>Programando com Java</a>\n" +
				"\t\t\t</p>\n" +
				"\t\t</div>\t\n" +
				"\t\t<div style='width:28%; height:50px;' align='center'>\n" +
				"\t\t\tDownload do JavaMail<br/>\n" +
				"\t\t\t<a href='http://www.oracle.com/technetwork/java/javaee/index-138643.html'>\n" +
				"\t\t\t\t<img src='http://www.oracleimg.com/admin/images/ocom/hp/oralogo_small.gif'/>\n" +
				"\t\t\t</a> \n" +
				"\t\t</div>\t\t\n" +
				"\t</body> \n" +
				"</html>";		
	}//Fim Função corpo email = html.

}

Erro:

DEBUG: setDebug: JavaMail version 1.4.5
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false
javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587;
  nested exception is:
	java.net.ConnectException: Connection timed out: connect
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1972)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642)
	at javax.mail.Service.connect(Service.java:317)
	at javax.mail.Service.connect(Service.java:176)
	at javax.mail.Service.connect(Service.java:125)
	at javax.mail.Transport.send0(Transport.java:194)
	at javax.mail.Transport.send(Transport.java:124)
	at br.mb.tutorialJavaMail.MailJavaSender.senderMail(MailJavaSender.java:100)
	at br.mb.tutorialJavaMail.MailTester.main(MailTester.java:47)
Caused by: java.net.ConnectException: Connection timed out: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(Unknown Source)
	at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
	at java.net.PlainSocketImpl.connect(Unknown Source)
	at java.net.SocksSocketImpl.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:319)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:233)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1938)
	... 8 more

3 Respostas

samirrolemberg

Cara! use a Commons Mail.

Ela têm dependência da JavaMail e abstrai a maioria das configurações mais complexas.

é muito fácil de configurar e de anexar arquivos com ela.

J

samirrolemberg:
Cara! use a Commons Mail.

Ela têm dependência da JavaMail e abstrai a maioria das configurações mais complexas.

é muito fácil de configurar e de anexar arquivos com ela.

Você tem algum exemplo pra eu testar?

samirrolemberg

ná propria pagina do projeto tem os exemplos.

http://commons.apache.org/email/userguide.html

Criado 25 de janeiro de 2013
Ultima resposta 25 de jan. de 2013
Respostas 3
Participantes 2