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