Dúvida - Enviando email com API Commons Email

8 respostas
A

Estou com uma pequena dúvida, até me assustei com a facilidade pra enviar email.

So que fiquei com algumas duvidas, estudando sobre o assunto, vi que temos que setar alguns argumentos Properties, e ao usar essa biblioteca, vi que isso nao foi necessario.

Outra coisa, quando eu mandei e-mail interno aqui, o email foi normalmente, mas quando eu mando para um gmail, por exemplo, da um erro.

Vou postar o codigo que gera o erro e o erro, se alguem puder me ajudar...

Lembrando que essa JSP eh apenas pra teste...

Obrigado!!!

...

<%
                
                	EmailAttachment att = new EmailAttachment();
                	att.setPath("c:/temp/edital.pdf");
                	att.setDisposition(EmailAttachment.ATTACHMENT);
                	att.setDescription("Edital.");
                	att.setName("edital.pdf");
                	
                	MultiPartEmail email = new MultiPartEmail();
                	email.setHostName("athena");
                	email.setFrom("[email removido]", "EU");
                	email.addTo("[email removido]", "Teste");
                	email.setSubject("Teste de email");
                	email.setMsg("Corpo da mensagem");
                	email.attach(att);
                	email.send();
                	
                %>

...
*Esse codigo fica no meio da JSP

Erro:

SEVERE: Servlet.service() for servlet jsp threw exception
com.sun.mail.smtp.SMTPAddressFailedException: 550 5.7.1 Unable to relay for [email removido]

at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1458)

8 Respostas

Java_Boy

É por que o email.addTo precisa ser um email válido.

Também é bom adicionar :

email.setAuthentication("usuario", "senha"); email.setSmtpPort(465); email.setSSL(true); email.setTLS(true);

A

Alex,

no email.addTo, eu coloquei um email valido, so nao publiquei aqui... hehe

Coloquei mais essas informacoes aqui e continua dando erro.

Codigo no JSP:
<%
File f = new  File("C:\\Temp\\edital.pdf");   
                	
EmailAttachment att = new EmailAttachment();  
att.setPath(f.getPath());
att.setDisposition(EmailAttachment.ATTACHMENT);  
att.setDescription("File");  
att.setName(f.getName());
                	
try {  
MultiPartEmail email = new MultiPartEmail();  
email.setDebug(true);  
email.setHostName("athena");
email.setSmtpPort(465);
email.setSSL(true);
email.setTLS(true);
email.setAuthentication("login","senha");  
email.addTo("[email removido]");  
email.setFrom("[email removido]");  
email.setSubject("Assunto");  
email.setMsg("Corpo da mensagem");  
                	
email.attach(att);  
                	
email.send();  
} catch (EmailException e) {  
e.printStackTrace();  
}
                	
%>

E olha o erro que esta dando:

DEBUG: JavaMail version 1.4.3
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
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 "athena", port 465, isSSL false
org.apache.commons.mail.EmailException: Sending the email to the following server failed : athena:465
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1242)
at org.apache.commons.mail.Email.send(Email.java:1267)
at org.apache.jsp.pages.teste_005femail_jsp._jspService(teste_005femail_jsp.java:223)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.mail.MessagingException: Could not connect to SMTP host: athena, port: 465;
nested exception is:
java.net.ConnectException: Connection refused: 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)
... 20 more
Caused by: java.net.ConnectException: Connection refused: 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 com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source)
at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(Unknown Source)
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)
... 27 more

Java_Boy

Atá! hahaaha desculpa

Esse hostname ‘athena’ seria o servidor de email dai?

tenta por o do gmail pra testar:

[url]email.setHostName("smtp.gmail.com");[/url]
A

Problema resolvido.

O que eu fiz, tirei o:

email.setSmtpPort(25); email.setSSL(true); email.setTLS(true);

Agora, gostaria de saber pra que serve o SSL e o TLS.

Muito Obrigado Alex!

Java_Boy

aspneto:
Problema resolvido.

O que eu fiz, tirei o:

email.setSmtpPort(25); email.setSSL(true); email.setTLS(true);

Agora, gostaria de saber pra que serve o SSL e o TLS.

Muito Obrigado Alex!

Álvaro,

SSL E TLS são protocolos de segurança nas camadas de envio de dados na rede. Te mandei essas configurações porquei geralmente, quando se usa o SMTP do Gmail, ele aconselha essas configurações.

Mas então voce está usando o serviço do Gmail ou do seu servidor de email?!

A

Estou usando o do servico aqui.

E

Fui tentar implementar aqui, mais ele pede pra criar a classe MultiPartEmail, tem que instalar algum jar?

Obrigado

jehffersson

Eu tambem estou intereçado em saber como enviar email!
Mais eu quero que não seja dentro de um JSP!

Atualmente eu estou tentando com o (javamail.jar) ,mais não tive sucesso!
Gostaria de ajuda! Desde já obrigado pela atenção!

Criado 16 de março de 2010
Ultima resposta 21 de mar. de 2011
Respostas 8
Participantes 4