Problema - Commons Mail (SEM GMAIL). RESOLVIDO

9 respostas
R

Olá pessoal estou utilizando o COmmons Mail para enviar uma mala direta. Já testei com o SMTP do gmail e funcionou corretamente.

Mas quando vou tentar utilizar o SMTP do hotmail por exemplo aparece o seguinte erro:

Exception in thread “main” org.apache.commons.mail.EmailException: Sending the email to the following server failed : <a href="http://smtp.live.com:25">smtp.live.com:25</a>

at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1242)

at org.apache.commons.mail.Email.send(Email.java:1267)

at br.com.novaideia.sisdecon.mail.CommonsMail.enviaEmailFormatoHtml(CommonsMail.java:138)

at br.com.novaideia.sisdecon.mail.CommonsMail.(CommonsMail.java:19)

at br.com.novaideia.sisdecon.mail.CommonsMail.main(CommonsMail.java:148)

Caused by: javax.mail.MessagingException: Could not connect to SMTP host: <a href="http://smtp.live.com">smtp.live.com</a>, port: 465;

nested exception is:

java.net.SocketException: Network is unreachable: connect

at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1706)

at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:525)

at javax.mail.Service.connect(Service.java:313)

at javax.mail.Service.connect(Service.java:172)

at javax.mail.Service.connect(Service.java:121)

at javax.mail.Transport.send0(Transport.java:190)

at javax.mail.Transport.send(Transport.java:120)

at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1232)

… 4 more

Caused by: java.net.SocketException: Network is unreachable: 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:366)

at java.net.Socket.connect(Socket.java:529)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:550)

at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:141)

at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:284)

at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:201)

at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1672)

… 11 more

O código da minha classe que envia o e-mail é o seguinte:

public class CommonsMail {

	public CommonsMail() throws EmailException, MalformedURLException {

		enviaEmailFormatoHtml();
	}



	/**
	 * Envia email no formato HTML
	 * 
	 * @throws EmailException
	 * @throws MalformedURLException
	 */
	public void enviaEmailFormatoHtml() throws EmailException,
			MalformedURLException {

		HtmlEmail email = new HtmlEmail();
		//String[] recipients = {"[email removido]", "[email removido]"};

		// adiciona uma imagem ao corpo da mensagem e retorna seu id
		URL url = new URL("http://www.apache.org/images/asf_logo_wide.gif");
		String cid = email.embed(url, "Apache logo");


		// configura a mensagem para o formato HTML
		// set the html message
		  email.setHtmlMsg("<html><body>The apache logo - <img src=\"cid:"+cid+"\"></body></html>");
		  


		// configure uma mensagem alternativa caso o servidor não suporte HTML
		//email.setTextMsg("Seu servidor de e-mail não suporta mensagem HTML");

		email.setHostName("smtp.live.com"); // o servidor SMTP para envio do
												// e-mail
		
//		for(String string : recipients){
//			email.addTo(string);
//		}
		
		email.addTo("[email removido]", "Rafael"); // destinatário
		email.setFrom("[email removido]", "Rafael"); // remetente
		email.setSubject("Teste -> Html Email"); // assunto do e-mail
		email.setMsg("<html><body><img src=\"cid:"+cid+"\"></body></html>"); // conteudo
																		// do
																		// e-mail
		email.setAuthentication("[email removido]", "minhasenha");
		email.setSmtpPort(25);
		email.setSSL(true);
		email.setTLS(true);
		// envia email
		email.send();
	}

	/**
	 * @param args
	 * @throws EmailException
	 * @throws MalformedURLException
	 */
	public static void main(String[] args) throws EmailException,
			MalformedURLException {
		new CommonsMail();
	}

}

Notem que a porta declarada é a 25, mas no erro afirma que tentou conectar na porta 465.

Agradeço a ajuda.

9 Respostas

E

Se você estiver atrás de um proxy, esse endereço será realmente “unreachable” (tanto faz se é a porta 465 ou a outra padrão.)

R

Mas porque com o smtp do gmail funciona normalmente? Se com o smtp do gmail funcionou normalmente, então deveria funcionar também com o smtp do hotmail. É isso que não estou entendendo.

A

tbm tive problemas com Hotmail.

mas vc pode usar o smtp do Gmail para enviar para qualquer email. basta se autenticar, foi assim que consigo enviar pra qualquer email sem a necessidade de estar usando o smtp de cada um.

R

aeciovc:
tbm tive problemas com Hotmail.

mas vc pode usar o smtp do Gmail para enviar para qualquer email. basta se autenticar, foi assim que consigo enviar pra qualquer email sem a necessidade de estar usando o smtp de cada um.

O ideal seria utilizar o SMTP do domínio da minha empresa pra enviar os emails, mas não funciona. Por isso queria tentar resolver este problema.

F

Eu uso o smtp do meu domínio sem problemas.
Faça um teste passando apenas esses parâmetros, sem informar SmtpPort, SSL, TLS.

email.setHostName("mail.seudominio.com.br"); email.addTo(destinatario); email.setFrom("[email removido]"); email.setSubject(titulo); email.setMsg(mensagem); email.setAuthentication("[email removido]", "***senha***");

R

finotti:
Eu uso o smtp do meu domínio sem problemas.
Faça um teste passando apenas esses parâmetros, sem informar SmtpPort, SSL, TLS.

email.setHostName("mail.seudominio.com.br"); email.addTo(destinatario); email.setFrom("[email removido]"); email.setSubject(titulo); email.setMsg(mensagem); email.setAuthentication("[email removido]", "***senha***");

Aparentemente deu certo, porém não enviou para todos os endereços que coloquei.

F

Qual a quantidade de destinatários que você enviou?
Se essa quantidade for grande, pode ser um bloqueio de segurança do próprio servidor pra evitar spam.
Talvez seja interessante dividir o número de destinatários em “lotes” e usar Thread para forçar um intervalo entre as operações de envio.
Se achar uma solução, posta aí pra gente.

R

Qual a quantidade de destinatários que você enviou?
Se essa quantidade for grande, pode ser um bloqueio de segurança do próprio servidor pra evitar spam.
Talvez seja interessante dividir o número de destinatários em “lotes” e usar Thread para forçar um intervalo entre as operações de envio.
Se achar uma solução, posta aí pra gente.

Amigo obrigado pela ajuda, eu dividi o envio em lotes menores.

R

finotti poderia me dar um exemplo dessas threads para envio de uma quantidade muito grande de e-mails?

Criado 29 de julho de 2010
Ultima resposta 9 de ago. de 2010
Respostas 9
Participantes 4