Problemas com e-mail

20 respostas
S

Opa pessoal, to com o seguinte código:

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
public class Boletim {

	public void sendSimpleMail (String mailServer, String subject,
								String to,String from, String mensagem)
    							throws AddressException, MessagingException {

		Properties mailProps = new Properties();
		//definição do mailserver

		mailProps.put("mail.host", "smtp.poliweb.com.br");
	    Session mailSession = Session.getDefaultInstance(mailProps, null);

	Message message = new MimeMessage (mailSession);

		message.setFrom(new InternetAddress("[email removido]"));

		message.setRecipient(Message.RecipientType.TO, new InternetAddress("[email removido]"));
		message.setSentDate(new Date());

		message.setSubject (subject);


		message.setText("TESTE");

		Transport.send (message);
	}

}

Esse arquivo é chamado por um jsp que simplesmente chama a função passando os parametros. Esta dando o seguinte erro:

javax.mail.SendFailedException: Invalid Addresses; nested exception is: class com.sun.mail.smtp.SMTPAddressFailedException: 553 UTILIZE A AUTENTICACAO PARA ENVIO DE MENSAGENS/THIS SERVER IS TO BE USED WITH AUTHENTICATION (#5.7.1)

Esse erro ta ocorrendo porque eu preciso autenticar alguma coisa? O que seria? Seria o e-mail da pessoa que esta enviando o e-mail? E como eu faria pra autenticar?

Grato pela ajuda!!

20 Respostas

T

Normalmente eu faria assim. Digamos que seu usuário seja “strider” e sua senha “lordoftherings”.

mailProps.put ("mail.smtp.host", "smtp.poliweb.com.br");
mailProps.put ("mail.smtp.auth", "true");
Session mailSession = Session.getDefaultInstance (mailProps, new Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("strider", "lordoftherings");
    }
});
mailSession.setDebug (true); // para ver se você está fazendo tudo direitinho. Desligue isso depois que estiver tudo OK
S

Opa, agora deu o seguinte erro:

HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: Exception in JSP: /paginasW/EMAIL/enviaremail.jsp:13

10:   String para = request.getParameter(para);

11:   String de = request.getParameter(de);

12:   String mensagem =request.getParameter(mensagem);

13:   email.sendSimpleMail(mailServer, assunto, para, de, mensagem);

14:

15: 	out.println(Email enviado com Sucesso !!!);

16:
Stacktrace:

org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

sun.reflect.GeneratedMethodAccessor677.invoke(Unknown Source)

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

java.lang.reflect.Method.invoke(Method.java:585)

org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)

java.security.AccessController.doPrivileged(Native Method)

javax.security.auth.Subject.doAsPrivileged(Subject.java:517)

org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275)

org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)

root cause

java.lang.SecurityException: Access to default session denied

javax.mail.Session.getDefaultInstance(Session.java:292)

t.Boletim8.sendSimpleMail(Boletim8.java:17)

org.apache.jsp.paginasW.EMAIL.enviaremail_jsp._jspService(org.apache.jsp.paginasW.EMAIL.enviaremail_jsp:65)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

sun.reflect.GeneratedMethodAccessor677.invoke(Unknown Source)

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

java.lang.reflect.Method.invoke(Method.java:585)

org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)

java.security.AccessController.doPrivileged(Native Method)

javax.security.auth.Subject.doAsPrivileged(Subject.java:517)

org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275)

org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5 logs.


Apache Tomcat/5.5

Que problema é esse de Access to default session denied? Nunca tive esse erro na vida. E quanto o usuario e senha la, eles são o usuario e senha do email do remetente, ou do servidor?

Valeu pela força!

T

http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=45&t=001613

Leia até o fim.

A

não estou conseguindo enviar email para o gmail…
o erro q da eh o seguinte
com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first h20sm4602348wxd

T

O GMail requer o uso de SSL (é por isso que ele reclamande “starttls”). A partir da versão 1.3.2 do JavaMail é possível usar SSL, mas nunca fiz isso. (Não sei, por exemplo, se há alguma sutileza, como acrescentar o certificado SSL do GMail a um keystore.)

A

tah… estou usando a versão 1.4 do javamail…
agora só preciso saber como mandar o email usando SSL…
alguém sabe?
¬¬

T

Leia este arquivo:

http://www.oreilly.com/catalog/jbossadn/excerpt/ch08_part2.pdf

e veja se dá para entender alguma coisa. (Onde ele usa XML, você tem de usar mailProps.put)

T
prop.put ("mail.smtp.host", "smtp.gmail.com");

    prop.put("mail.smtp.auth", "true");
    prop.put("mail.debug", "true");
    prop.put("mail.smtp.debug", "true");
    prop.put("mail.mime.charset", "ISO-8859-1");
        prop.put("mail.smtp.port", "465");
        prop.put ("mail.smtp.starttls.enable", "true");
        prop.put ("mail.smtp.socketFactory.port", "465");
        prop.put ("mail.smtp.socketFactory.fallback", "false");
        prop.put ("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

Parece que funciona direitinho (com o JDK 5.0; veja se funciona com versões anteriores (pode ser que não funcione porque versões anteriores não suportam direito o SSL.)

A

nossa… funcionou cara… tu é um genio! HAHAHA
o que eu me matei atras disso… mas blz…
agora uma otra perguntinha… talvez um tanto cretina…
pra escrever a mensagem eu usei um porem no email aparese a mensagem tudo em uma linha soh…
mesmu dando enter nu textarea…
sabe como resolver?

T

O protocolo de email exige que as linhas sejam separadas por “\r\n”.

A

como vou fazer então para q no lugar dos enter dentro do text area… trasnforme em /r/n ?

T

Boa pergunta. Tente isto:

String texto = ... não sei como você puxou os dados da textarea ...
texto = texto.replaceAll ("\n", "\r\n");

Mande esse texto pelo email e veja o que ocorreu.

A

valeu cara… funcionando…
ateh q enfim achei um forum decente!
HAHA

;D

M

Ja resolvi.

T

"Unknown host: smtp.gmail.com"

Isso quer dizer que sua conexão não está conseguindo nem resolver o endereço "smtp.gmail.com". Se você conseguir fazer o "ping" (tal como mostrado abaixo, para Windows e para Linux) então você vai resolver esse problema.

C:\>ping smtp.gmail.com

Pinging gmail-smtp.l.google.com [66.249.83.111] with 32 bytes of data:

Reply from 66.249.83.111: bytes=32 time=176ms TTL=240
Reply from 66.249.83.111: bytes=32 time=183ms TTL=240
Reply from 66.249.83.111: bytes=32 time=176ms TTL=240
Reply from 66.249.83.111: bytes=32 time=176ms TTL=240

Ping statistics for 66.249.83.111:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 176ms, Maximum = 183ms, Average = 177ms
[thingol@beleriand:~]$ ping smtp.gmail.com
PING gmail-smtp.l.google.com (66.249.83.111) 56(84) bytes of data.
64 bytes from 66.249.83.111: icmp_seq=1 ttl=240 time=176 ms
64 bytes from 66.249.83.111: icmp_seq=2 ttl=240 time=177 ms
64 bytes from 66.249.83.111: icmp_seq=3 ttl=240 time=176 ms
64 bytes from 66.249.83.111: icmp_seq=4 ttl=240 time=175 ms
64 bytes from 66.249.83.111: icmp_seq=5 ttl=240 time=178 ms
64 bytes from 66.249.83.111: icmp_seq=6 ttl=240 time=188 ms

--- gmail-smtp.l.google.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5003ms
rtt min/avg/max/mdev = 175.699/178.710/188.042/4.268 ms
[thingol@beleriand:~]$
T

comigo não funciona:
estou tentando enviar o email para mim mesmo
vejam o código

package emailagoravai;

//imports
...


blic class Main {
    
    public Main() {
    }
    

    public static void main(String[] args) {
       
        Properties p = new Properties();
        p.put("mail.host", "smtp.gmail.com");
        p.put("mail.smtp.port","465");
        p.put("mail.smtp.auth", "true"); 
        p.put("mail.debug", "true"); 
        p.put("mail.smtp.debug", "true"); 
        p.put("mail.mime.charset", "ISO-8859-1"); 
        p.put("mail.smtp.starttls.enable", "true"); 
        p.put("mail.smtp.socketFactory.port", "465"); 
        p.put("mail.smtp.socketFactory.fallback", "false"); 
        p.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");         
        Session session = Session.getInstance(p,new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("[email removido]", "minhasenha");
            }
        });
        
        MimeMessage msg = new MimeMessage(session);
        try {
            msg.setFrom(new InternetAddress("[email removido]"));
            msg.setRecipient(javax.mail.Message.RecipientType.TO,new InternetAddress("[email removido]"));

            msg.setSentDate(new Date());          
            msg.setSubject("consegui");
            msg.setText("consegui caralho!!!!");
         
            Transport.send(msg);
            System.out.println("Certo!!");
        } catch (AddressException e) {
            System.out.println("errado!!");
            e.printStackTrace();
        } catch (MessagingException e) {
            System.out.println("errado!!");
            e.printStackTrace();
        }
    }   
}

e está dando a seguinte mensagem de erro:

vendo pelo debug do javamail o SSL está falso.

T

Leia o post anterior. Se o seu DNS não estiver corretamente configurado, você não vai conseguir encontrar “smtp.google.com” (ou seja lá qual for a máquina do Google que fala SMTP).

D

galera, estou com um problema +/- relacionado com esse erro…

eu criei uma apliacação que envia emails, testando no tomcat local rolou… porém no servidor linux ele retorna o seguinte erro:

Unknown SMTP host: smtp.uol.com.br; nested exception is: java.net.UnknownHostException: smtp.uol.com.br

alguém saberia me dizer o q pode ser?

S

eu tenho uma áplicação que envia email!!!

Estava funcionando, mas agora está dando :

java.lang.SecurityException: Access to default session denied

javax.mail.Session.getDefaultInstance(Session.java:288)

br.model.Sender.openConnection(Sender.java:51)

br.model.Sender.enviaMensagem(Sender.java:79)

br.web.SenderServlet.processRequest(SenderServlet.java:36)

br.web.SenderServlet.doPost(SenderServlet.java:72)

javax.servlet.http.HttpServlet.service(HttpServlet.java:767)

javax.servlet.http.HttpServlet.service(HttpServlet.java:860)

sun.reflect.GeneratedMethodAccessor100.invoke(Unknown Source)

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

java.lang.reflect.Method.invoke(Method.java:324)

org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:249)

java.security.AccessController.doPrivileged(Native Method)

javax.security.auth.Subject.doAsPrivileged(Subject.java:500)

org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:282)

org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:165)

alguém pode me ajudar???

L

Ola eu tô com um problema na no envio de email. Assim, eu uso uma máquina virtual pra desenvolver e testar.
Eu devo estar fazendo alguma burrada. Segue o erro e as classe utilizadas:

<<<<<>>>>>

org.apache.commons.mail.EmailException: Sending the email to the following server failed : mail.terra.com.br:25

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

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

at com.rebaixarts.contato.services.EmailTeste.sendEmail(EmailTeste.java:32)

at com.rebaixarts.contato.struts.action.FaleConoscoAction.perform(FaleConoscoAction.java:50)

at org.apache.struts.action.Action.execute(Action.java:401)

at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:446)

at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:266)

at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1292)

at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:510)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)

at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)

at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)

at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)

at java.lang.Thread.run(Thread.java:619)

<<<<<>>>>>
package com.rebaixarts.contato.services;

import java.util.Date;
import java.util.Properties;

import javax.mail.Address;

import javax.mail.Message;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.Authenticator;

import javax.mail.MessagingException;

import javax.mail.internet.MimeMessage;

import javax.mail.PasswordAuthentication;

import javax.mail.internet.InternetAddress;

import com.rebaixarts.contato.vo.*;

public class Email extends Authenticator implements ConfigPadraoEmail {

/* Classe de Autenticação */
public class SmtpAuthenticator extends Authenticator {  
    public PasswordAuthentication getPasswordAuthentication()  {  
      
        return new PasswordAuthentication(ConfigPadraoEmail.USERNAME,
        		                          ConfigPadraoEmail.PASSWORD);  
    }  
}

/* Classe de Envio */
public String sendMail (String from, String mensagem) throws MessagingException {
			
	Address destTo = new InternetAddress(ConfigPadraoEmail.USERNAME); 
	Address destCc = new InternetAddress(ConfigPadraoEmail.USERNAME);
    Address destBcc = new InternetAddress(ConfigPadraoEmail.USERNAME);
	
	try{ 
		
	    Properties mailProps = new Properties();
	
        //Define o SMTP de envio
        mailProps.put("mail.smtp.host", ConfigPadraoEmail.MAILSERVER);
               
        //Realiza a autenticação
        Authenticator auth = new SmtpAuthenticator(); 
        
        Session mailsession = Session.getInstance(mailProps, auth);                           
         
        //Inicializa o objeto Message
        Message message = new MimeMessage(mailsession);

        message.setFrom(new InternetAddress(from));
                 
        //Define o(s) destinatário(s): TO, CC, BCC
        if (destTo != null) { 
           message.setRecipient(Message.RecipientType.TO, destTo); 
        }  
                          
        if (destCc != null) { 
           message.setRecipient(Message.RecipientType.CC, destCc); 
        }  
                          
        if (destBcc != null) { 
           message.setRecipient(Message.RecipientType.BCC, destBcc); 
        }  
        
        //Define o assunto do E-Mail
        message.setSubject(ConfigPadraoEmail.ASSUNTO);

        //Define o conteúdo da Mensagem
        message.setContent(mensagem.toString().replace("\n", "<br>"), "text/html");

        //Define a data atual a mensagem
        message.setSentDate(new Date());

        //Enviado o E-Mail
        Transport transport = mailsession.getTransport("smtp");
        
        System.out.println("Conectando no servidor de smtp: "+ ConfigPadraoEmail.MAILSERVER +"...");
        
        //Aqui ocorre o erro!!!!!
        transport.connect(ConfigPadraoEmail.MAILSERVER, ConfigPadraoEmail.USERNAME, ConfigPadraoEmail.PASSWORD);

        if (transport.isConnected()) {
        	
            System.out.println("Conectado ["+ ConfigPadraoEmail.MAILSERVER +"]");
            System.out.println("Enviando Mensagem...");
            
            transport.send(message);
        
            System.out.println("Mensagem Enviada!!!");
        }
        
    } catch (MessagingException e) {
        e.printStackTrace();
        return e.getMessage();
    } 
    
    return null;        
}

}

<<<<<<Interface com variáveis>>>>>>
package com.rebaixarts.contato.vo;

public interface ConfigPadraoEmail {

public static final String USERNAME = "[email removido]";	
public static final String MAILSERVER = "mail.terra.com.br";
public static final String ASSUNTO = "Dúvida Internauta";
public static final String PASSWORD = "senha";

}

<<<<<>>>>>
package com.rebaixarts.contato.struts.action;

import java.io.IOException;

import org.apache.commons.mail.*;

import javax.mail.MessagingException;

import javax.servlet.ServletException;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import com.rebaixarts.contato.services.Email;
import com.rebaixarts.contato.services.EmailTeste;

import com.rebaixarts.contato.struts.form.FaleConoscoForm;

public final class FaleConoscoAction extends Action {

public ActionForward perform(ActionMapping mapping,
                             ActionForm form,
                             HttpServletRequest request,
                             HttpServletResponse response)
                             throws IOException, ServletException {
        	
	 FaleConoscoForm enviarForm = (FaleConoscoForm) form;
	 Email servicesEmail = new Email();  
	    	
	 String result = null;
       	    	    	
	 String nome  = enviarForm.getNome(); //Nome qualquer   	
 String texto = enviarForm.getTexto();   //Um texto em uma textArea
 String remetente = enviarForm.getEmail(); //Um email válido qualquer
      
     //Tratamento para página inicial 
 if (nome == null || remetente == null) {
   	return (mapping.findForward("first"));
 } else if (nome.equals("") || remetente.equals("")) {
     	return (mapping.findForward("empty"));    
 }
   	    	    
 //Enviando Email 
 try {			

	result = servicesEmail.sendMail(remetente, texto);

    } catch (MessagingException e) {
	e.printStackTrace();
    } 
 	
  		 
    if (result == null) {
    
       return mapping.findForward("failure");  
    
    } else { 
    
       enviarForm.setNome(null);
 	   enviarForm.setEmail(null);
       enviarForm.setTexto(null);
    }
    
    return mapping.findForward("success");                
}

}

Criado 22 de junho de 2006
Ultima resposta 10 de fev. de 2009
Respostas 20
Participantes 8