Problema ao inicializar as variaveis

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

Essa classe possui o seguinte método

[code]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);

 }[/code]

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

	[code]email = new HtmlEmail();[/code]

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

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

Onde foi criada a variável email?

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;

[quote=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;
[/quote]

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("xxx@xxx.com", "Jose");
   //Configure o seu email do qual enviará
   email.setFrom("seuemail@seuprovedor.com", "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/

Vc precisa declarar a variável email…

Ex:

HtmlEmail email = new HtmlEmail();

Abraços…

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", "teste2@gmail.com","senha");


	     enviarMensagemHtml("XXXXXX@yahoo.com.br", 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(); 

[code]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", "teste@gmail.com","senha");
    	
    	
        enviarMensagemHtml("XXXXX@yahoo.com.br", 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", "teste@gmail.com","senha");


     enviarMensagemHtml("xxxxxxx@yahoo.com.br", 6024);

}

}[/code]

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.

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:

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

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

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

[quote=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[/quote]

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("xxxxxx@gmail.com", "senha");
                             }
                        });

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

            try {

                  Message message = new MimeMessage(session);
                  message.setFrom(new InternetAddress("douglas.janerson@gmail.com")); //Remetente

                  Address[] toUser = InternetAddress //Destinatário(s)
                             .parse("janerson.d.santos@hotmail.com, douglas.janerson@hotmail.com");  

                  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);
            }
      }
}

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("xxxxxx@gmail.com", "senha");  
                             }  

faça o teste e me diga.

[quote=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("xxxxxx@gmail.com", "senha");  
                             }  

faça o teste e me diga.[/quote]

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("douglas.janerson@gmail.com","douglas.janerson@hotmail.com");
       
      }
}

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("douglas.janerson@gmail.com","douglas.janerson@hotmail.com");  
         
      }  
//USAR ESTE
      public void vaiEnviar() throws EmailException {  
            
          Email email = new Email("douglas.janerson@gmail.com","douglas.janerson@hotmail.com");  
         
      }