Problema ao inicializar as variaveis

15 respostas
G

Oi pessoal, criei uma classe para envar e-mail no java.

Essa classe possui o seguinte método

public void  enviarEmailNovo(String nomeServidorSmtp, String nomeRemetente, String emailRemetente, String senhaRementente)  throws Exception
	 { 
		
		 System.out.println("inicia html");
		email = new HtmlEmail();

		System.out.println("SSL");
		email.setSSL(true);
		System.out.println("TLS");
        email.setTLS(true);
        System.out.println("porta");
        email.setSmtpPort(465);
        System.out.println("porta smtp");
        email.setHostName(nomeServidorSmtp);
        System.out.println("authentication");
        email.setAuthentication(emailRemetente, senhaRementente);
        System.out.println("set from");
		email.setFrom(emailRemetente, nomeRemetente);

	 }

Mas quando chamo esse método de outra classe.
quando chega nessa linha

email = new HtmlEmail();

O sistema para, não dá erro não acontece nada. simplesmente fica parado.

alguém sabe como posso inicializar essa variável?

15 Respostas

L

Onde foi criada a variável email?

G

dentro da classe onde está o método

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;

public class SendMail
{

public HtmlEmail email;
Janerson

gustavoa:
dentro da classe onde está o método

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;

public class SendMail
{

public HtmlEmail email;
</blockquote>

Olá amigo tenta esse metodo aqui

public void sendEmail() throws EmailException {
    
   SimpleEmail email = new SimpleEmail();
   //Utilize o hostname do seu provedor de email
   System.out.println("alterando hostname...");
   email.setHostName("smtp.gmail.com");
   //Quando a porta utilizada não é a padrão (gmail = 465)
   email.setSmtpPort(465);
   //Adicione os destinatários
   email.addTo("[email removido]", "Jose");
   //Configure o seu email do qual enviará
   email.setFrom("[email removido]", "Seu nome");
   //Adicione um assunto
   email.setSubject("Test message");
   //Adicione a mensagem do email
   email.setMsg("This is a simple test of commons-email");
   //Para autenticar no servidor é necessário chamar os dois métodos abaixo
   System.out.println("autenticando...");
   email.setSSL(true);
   email.setAuthentication("username", "senha");
   System.out.println("enviando...");
   email.send();
   System.out.println("Email enviado!");
}

fonte: http://jamacedo.com/2010/02/envio-de-email-de-forma-facil-com-java/

diogogama

Vc precisa declarar a variável email…

Ex:

HtmlEmail email = new HtmlEmail();

Abraços…

G

baseado nos dois exemplos

O exemplo HtmlEmail email = new HtmlEmail(); não funciona.

public SendMail() throws Exception {
		 System.out.println("foi pelo construtor");
		 //email = new HtmlEmail();
		 HtmlEmail email = new HtmlEmail();
		 enviarEmailNovoAtendimento("smtp.gmail.com","teste", "[email removido]","senha");


	     enviarMensagemHtml("[email removido]", 6024);
	
	}

Usando o segundo exemplo

Essa linha não executa, na verdade não consigo fazer o new SimpleMail ser executado

SimpleEmail email = new SimpleEmail();
G
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.apache.commons.mail.MultiPartEmail;
import org.apache.commons.mail.SimpleEmail;

import com.sun.org.apache.bcel.internal.generic.NEW;

public class SendMail 
{ 

	public static HtmlEmail email;
	
	@SuppressWarnings("deprecation")
	public static void enviarEmailNovoAtendimento(String nomeServidorSmtp, String nomeRemetente, String emailRemetente, String senhaRementente)  throws Exception
	 { 
		System.out.println("inicia html");
		email = new HtmlEmail();
		System.out.println("SSL");
		email.setSSL(true);
		System.out.println("TLS");
        email.setTLS(true);
        System.out.println("porta");
        email.setSmtpPort(465);
        System.out.println("porta smtp");
        email.setHostName(nomeServidorSmtp);
        System.out.println("authentication");
        email.setAuthentication(emailRemetente, senhaRementente);
        System.out.println("set from");
		email.setFrom(emailRemetente, nomeRemetente);
	 }
	 
	 
	/*private static void anexarArquivoMensagem(String diretorioAnexo,String nomeArquivo) throws EmailException 
	{
		EmailAttachment anexo = new EmailAttachment();
		anexo.setPath(diretorioAnexo + File.separator + nomeArquivo);
		anexo.setDisposition(EmailAttachment.ATTACHMENT);
		anexo.setName(nomeArquivo);
		email.attach(anexo);
	}*/
	 
	 
	public static void enviarMensagemHtml(String emailDestinatario, Integer codigoAtendimento)   throws EmailException 
	{	
	    email.addTo(emailDestinatario);
	    email.setSubject("teste" );
	    email.setMsg("<p>Segue em anexo o arquivo pdf do post  sobre API <b>Commons-Email</b> da Apache.</p>");
	   // email.setHtmlMsg("<p>Segue em anexo o arquivo pdf do post  sobre API <b>Commons-Email</b> da Apache.</p>");
	    email.send();
	    System.out.println("Email enviado com sucesso!");
	}	 
	
	//SE EU RODAR ESSA CLASSE PELO JAVA APPLICATION
	//RODA BELEZA
	public static void main(String[] args) throws Exception 
	 {
	     try 
	     {
	    	
	    	 System.out.println("foi pelo main");
	    	 enviarEmailNovoAtendimento("smtp.gmail.com","teste", "[email removido]","senha");
	    	
	    	
	        enviarMensagemHtml("[email removido]", 6024);
	 
	       //System.out.println("Email enviado com sucesso!");
	  	 } 
	     catch (Exception e) 
	     {
	        System.err.println(e.getMessage());
	     }
	 }


	//SE EU FOR RECEBER OS PARAMETROS PARA ENVIO DE OUTRA CLASSE
	//ESSA CLASSE NÃO CONSEGUE INICIAR O  //email = new HtmlEmail();
	 public SendMail() throws Exception {
		 System.out.println("foi pelo construtor");
		 //email = new HtmlEmail();
		 HtmlEmail email = new HtmlEmail();
		 enviarEmailNovoAtendimento("smtp.gmail.com","teste", "[email removido]","senha");
	

	     enviarMensagemHtml("[email removido]", 6024);
	
	}
}
diogogama

Amigo, é o seguinte, vc precisa ver o que retorna o new HtmlEmail(), ele cria uma instancia de qual objeto? se for, por exemplo, uma extância de qualquerObjetoDeEmail, então vc deve instanciar um objeto desta instância, por exemplo:

InstânciaRetornadaPeloNewHtmlEmail variável = new HtmlEmail();

Abraços.

G

Ele fica desta maneira

HtmlEmail variável = new HtmlEmail();

Mas não entendo o que acontece quando chamo de outra classe o método construtor.
não roda.

:confused:

diogogama

posta a classe para nós novamente… e posta a classe que esta chamando essa tmb…

G

Classe que chama é basicamente desta maneira

//chama o construtor
SendMail sm = new SendMail();

E a classe que eu chamo está no post ai pra cima

diogogama

qual erro ta dando??? posta ele pra gente…

Janerson

gustavoa:
Classe que chama é basicamente desta maneira

//chama o construtor
SendMail sm = new SendMail();

E a classe que eu chamo está no post ai pra cima

Amigo enviei com esse metodo usando a api JAVAMAIL

se vc quer apenas enviar texto puro acho que isso lhe serve

import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class ForumGuj
{
      public static void main(String[] args) {
            Properties props = new Properties();
            /** Parâmetros de conexão com servidor Gmail */
            props.put("mail.smtp.host", "smtp.gmail.com");
            props.put("mail.smtp.socketFactory.port", "465");
            props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.port", "465");

            Session session = Session.getDefaultInstance(props,
                        new javax.mail.Authenticator() {
                             protected PasswordAuthentication getPasswordAuthentication() 
                             {
                                   return new PasswordAuthentication("[email removido]", "senha");
                             }
                        });

            /** Ativa Debug para sessão */
            session.setDebug(true);

            try {

                  Message message = new MimeMessage(session);
                  message.setFrom(new InternetAddress("[email removido]")); //Remetente

                  Address[] toUser = InternetAddress //Destinatário(s)
                             .parse("[email removido], [email removido]");  

                  message.setRecipients(Message.RecipientType.TO, toUser);
                  message.setSubject("Enviando email com JavaMail");//Assunto
                  message.setText("Enviei este email utilizando JavaMail com minha conta GMail!");
                  /**Método para enviar a mensagem criada*/
                  Transport.send(message);

                  System.out.println("Feito!!!");

             } catch (MessagingException e) {
                  throw new RuntimeException(e);
            }
      }
}
G

Meu caro amigo, a forma que você fez seu código, claro que funciona, mas o meu também funciona desta maneira, pelo main.

Agora eu te peço, tenta fazer uma outra classe disparar esse envio de email usando o construtor.
Provavelmente, irá ocorrer o mesmo erro que o meu.

Vai dar erro aqui

Properties props = new Properties();

Ou aqui

protected PasswordAuthentication getPasswordAuthentication()   
                             {  
                                   return new PasswordAuthentication("[email removido]", "senha");  
                             }

faça o teste e me diga.

Janerson

gustavoa:
Meu caro amigo, a forma que você fez seu código, claro que funciona, mas o meu também funciona desta maneira, pelo main.

Agora eu te peço, tenta fazer uma outra classe disparar esse envio de arquivo usando o construtor.
Provavelmente, irá ocorrer o mesmo erro que o meu.

Vai dar erro aqui

Properties props = new Properties();

Ou aqui

protected PasswordAuthentication getPasswordAuthentication()   
                             {  
                                   return new PasswordAuthentication("[email removido]", "senha");  
                             }

faça o teste e me diga.

Vamos lá

classe Email - responsável por enviar

import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.apache.commons.mail.EmailException;


class Email{

    
    
    Email(String envia, String recebe) throws EmailException{
        Properties props = new Properties();
            /** Parâmetros de conexão com servidor Gmail */
            props.put("mail.smtp.host", "smtp.gmail.com");
            props.put("mail.smtp.socketFactory.port", "465");
            props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.port", "465");

            Session session = Session.getDefaultInstance(props,
                        new javax.mail.Authenticator() {
                             protected PasswordAuthentication getPasswordAuthentication() 
                             {
                                   return new PasswordAuthentication("seu email", "sua_senha");
                             }
                        });

            /** Ativa Debug para sessão */
            session.setDebug(true);

            try {

                  Message message = new MimeMessage(session);
                  message.setFrom(new InternetAddress(envia)); //Remetente

                  Address[] toUser = InternetAddress.parse(recebe);
                          
                  message.setRecipients(Message.RecipientType.TO, toUser);
                  message.setSubject("Enviando email com JavaMail");//Assunto
                  message.setText("Enviei este email utilizando JavaMail com minha conta GMail!");
                  /**Método para enviar a mensagem criada*/
                  Transport.send(message);

                  System.out.println("Feito!!!");

             } catch (MessagingException e) {
                  throw new RuntimeException(e);
            }
    }
    
}

classe com o main

import org.apache.commons.mail.EmailException;


public class ForumGuj
{
      public static void main(String[] args) throws EmailException {
          
          Email email = new Email("[email removido]","[email removido]");
       
      }
}
G

Testei aqui e funcionou.

Gostaria de saber como fazer essa chamada, fora do main, dentro de outro método

//NAO USAR ESTE
      public static void main(String[] args) throws EmailException {  
            
          Email email = new Email("[email removido]","[email removido]");  
         
      }  
//USAR ESTE
      public void vaiEnviar() throws EmailException {  
            
          Email email = new Email("[email removido]","[email removido]");  
         
      }
Criado 23 de julho de 2013
Ultima resposta 24 de jul. de 2013
Respostas 15
Participantes 4