Dae pessoal,
estou tentando rodar um exemplo simples de envio de e-mail, usando a biblioteca javax.mail, mas ocorre o seguinte erro :
Exception in thread “main” javax.mail.MessagingException: Could not connect to SMTP host: smtp.bol.com.br, port: 25;
nested exception is:
java.net.ConnectException: Connection timed out: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
at javax.mail.Service.connect(Service.java:275)
at javax.mail.Service.connect(Service.java:156)
at javax.mail.Service.connect(Service.java:105)
at javax.mail.Transport.send0(Transport.java:168)
at javax.mail.Transport.send(Transport.java:98)
at test.MailExample.main(MailExample.java:42)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:364)
at java.net.Socket.connect(Socket.java:507)
at java.net.Socket.connect(Socket.java:457)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)
… 7 more
Segue abaixo o código fonte :
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
public class MailExample {
public static void main (String args[]) throws Exception {
String host = "smtp.bol.com.br";
String from = "mleiras@bol.com.br";
String to = "mleiras@gmail.com";
// Get system properties
Properties props = System.getProperties();
// Setup mail server
props.put("mail.smtp.host", host);
//props.put("mail.smtp.port", port);
// Get session
Session session = Session.getDefaultInstance(props, null);
// Define message
MimeMessage message = new MimeMessage(session);
// Set the from address
message.setFrom(new InternetAddress(from));
// Set the to address
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
// Set the subject
message.setSubject("Hello JavaMail");
// Set the content
message.setText("Welcome to JavaMail");
// Send message
Transport.send(message);
System.out.println("E-mail sent!");
}
}
Alguém saberia me dizer o q estou fazendo de errado?
Valeu,
Leiras
Está conectado a internet ? o bol não requer autenticação ?
Opa,
estou conectado na internet sim.
E o BOL não requer autenticação.
Será q pode ser algum Firewall no meio do caminho?
Hummm, acho que não. O que pode estar acontecendo é que o bol é uma *&%%&¨¨ para conectar via smtp/pop. Aconselho usar outro.
:okok:
Hehe, concordo com sua opinião sobre o BOL Marcos.
É q só conheço ele com servidor smtp sem autenticação.
Vc conhce algum outro?
Se puder me passar algum outro servidor smtp+porta pra que eu possa testar eu agradeço.
Valeu,
Leiras
Opa,
aconselho você já usar autenticação direto é melhor, aqui tem um exemplinho http://www.experts-exchange.com/Programming/Programming_Languages/Java/Q_21133318.html
:okok:
Cara, o pior é q eu já fiz exemplos usando autenticação, e tb não funcionou.
Deve ser alguma urucubaca dessa rede aqui da minha empresa.
Vou testar em casa, os mesmos exemplos, pra ver o q acontece.
Opa,
Posta a exceções aí que nós podemos lhe ajudar a resolver este problema.
:okok:
Bom Marcos, aproveitando a sua boa vontade… 
Segue o código q eu fiz pra envio de e-mails com autenticação :
Primeiro minha classe autenticadora
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
public class SMTPAuthenticator extends Authenticator {
private String user;
private String password;
public SMTPAuthenticator( String user, String password ) {
this.user = user;
this.password = password;
}
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(this.user, this.password);
}
}
Agora a classe principal.
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendMail {
public static void main(String[] args) {
String user = "mano_x_br";
String password = "123456";
String host = "smtp.mail.yahoo.com.br";
String port = "587";
String from = "mano_x_br@yahoo.com.br";
String to = "leiras@inf.ufsc.br";
try {
SMTPAuthenticator auth = new SMTPAuthenticator( user, password );
// Get system properties
Properties props = System.getProperties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", port);
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props, auth);
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
msg.setSentDate(new Date());
msg.setSubject("Testando envio de e-mails com JAVA");
msg.setText("Se este texto estiver aparecendo é porque fungou! Uhu!");
System.out.println("Enviando a Mensagem...");
// evniando mensagem (tentando)
Transport.send(msg);
System.out.println("E-mail enviado com sucesso!!!");
}
catch (AddressException e) {
e.printStackTrace();
}
catch (MessagingException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
Criei uma conta no yahoo
user : mano_x_br
password : 123456
só pra efeito de teste.
Neste caso, dá uma exceção de falha na autenticação.
Dá uma olhada no console :
Enviando a Mensagem…
javax.mail.AuthenticationFailedException
at javax.mail.Service.connect(Service.java:306)
at javax.mail.Service.connect(Service.java:156)
at javax.mail.Service.connect(Service.java:105)
at javax.mail.Transport.send0(Transport.java:168)
at javax.mail.Transport.send(Transport.java:98)
at test.mail3.SendMail.main(SendMail.java:65)
Opa,
Bem teu código está quase certo…
Primeiro tire o objeto auth, bem ele não é necessário.
Session session = Session.getDefaultInstance(props, auth);
e troque
Transport.send(msg);
por
msg.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(host, user, pass);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
:okok:
Cara, tá difícl…
Eis o novo código fonte
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendMail {
public static void main(String[] args) {
String user = "mano_x_br";
String password = "123456";
String host = "smtp.mail.yahoo.com.br";
int port = 587;
String from = "mano_x_br@yahoo.com.br";
String to = "leiras@inf.ufsc.br";
try {
Properties props = System.getProperties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", port);
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props, null);
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
msg.setSentDate(new Date());
msg.setSubject("Testando envio de e-mails com JAVA");
msg.setText("Se este texto estiver aparecendo é porque fungou! Uhu!");
msg.saveChanges();
Transport transport = session.getTransport("smtp");
System.out.println("Tentando conectar ao servidor ...");
transport.connect(host, port, user, password);
System.out.println("Enviando Mensagem ...");
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
System.out.println("E-mail enviado com sucesso!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
E o console
Tentando conectar ao servidor …
javax.mail.AuthenticationFailedException
at javax.mail.Service.connect(Service.java:306)
at com.leiras.SendMail.main(SendMail.java:42)
Opa,
tire mais estas duas linhas:
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", port);
você já está passando o host no método connect.
:okok:
Cara, tirei estas 2 linhas de código, mas continua dando o mesmo erro.
E eu já entrei no site do yahoo várias vezes pra testar este login e senha… Estão corretos.
Não faço idéia por que está dando este tipo de erro.
E eu achei q mandar e-mails com JAVA seria tranquilinho… Hehe…
Opa,
várias coisas que você deixou de fazer, primeiro não habilitou a opção de receber e enviar tuas mensagens via pop no teu e-mail.
Segundo não precisa de colocar esta porta.
Rodei esta classe tua, enviou o e-mail depois de autorizar tua conta a receber e enviar e-mail via pop.
:okok:
É Marcos,
agora finalmente funcionou! 
Fiz um teste com e sem a porta, e funcionou das 2 maneiras realmente.
O problema estava mesmo nas configurações da conta lá no yahoo.
Brigadão pela ajuda velho.