Aplicação java que envia e-mail [Resolvido]

17 respostas
viniciusgundim

Estou usando o seguinte método para enviar email:

public void sendEmail() {
      String from = "[email removido]";
      String to1 = "[email removido]";
      String to2 = "[email removido]";
      String to3 = "[email removido]";
      try {
         SmtpClient client = new SmtpClient("10.1.1.1");
         client.from(from);
         client.to(to1);
         client.to(to2);
         client.to(to3);
         PrintStream msg = client.startMessage();
         msg.println("to: "+ to1+"; "+to2+"; "+to3+ ";");
         msg.println("Subject:Send Email JAVA");
         msg.print("\r\n");
         msg.println("Esse é um exemplo de um email java para mais de um destinatário\n");
         msg.println("Teste");
         client.closeServer();
      } catch (IOException e) {
         System.out.println("error" + e);
      }

   }

Mais quando compilo não dá erro mais aparece uns Warnig:

nit:
deps-jar:
Created dir: L:\CDV\build\classes
Compiling 2 source files to L:\CDV\build\classes
L:\CDV\src\cdv\Tela_Principal_Cliente.java:18: warning: sun.net.smtp.SmtpClient is Sun proprietary API and may be removed in a future release
import sun.net.smtp.SmtpClient;
L:\CDV\src\cdv\Tela_Principal_Cliente.java:2946: warning: sun.net.smtp.SmtpClient is Sun proprietary API and may be removed in a future release
         SmtpClient client = new SmtpClient("10.1.1.1");
L:\CDV\src\cdv\Tela_Principal_Cliente.java:2946: warning: sun.net.smtp.SmtpClient is Sun proprietary API and may be removed in a future release
         SmtpClient client = new SmtpClient("10.1.1.1");
Note: L:\CDV\src\cdv\Tela_Principal_Cliente.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
3 warnings
compile:
Building jar: L:\CDV\dist\CDV.jar
Copy libraries to L:\CDV\dist\lib.
To run this application from the command line without Ant, try:
java -jar "L:\CDV\dist\CDV.jar"
jar:
CONSTRUÍDO COM SUCESSO (tempo total: 2 segundos)

O que pode ser, e percebi outra coisa as vezes trava, quando vai enviar o email, o que pode ser???

17 Respostas

rodrigo.bossini

Você está usando uma API, que apesar de estar presente no java, não foi desenvolvida com o intuito de ser disponibilizada para usuários comuns.

É isto que o warning está lhe dizendo - A API que você está utilizando é proprietária da SUN e poderá se tornar indisponível nas próximas versões do java sem qualquer aviso, haja vista que ela não tem como propósito ser utilizada por usuários comuns.

Acho que você deveria usar o javamail para enviar email.

viniciusgundim

Tem como vc me dar um idéia de como usar a classe javamail, ou passar um metodo parecido com esse, mais usando javamail?

T+++

rodrigo.bossini

Você poderia começar por este tutorial que está disponível aqui no GUJ mesmo.
Quando precisar de coisas mais avançadas, faça uma rápida pesquisa no google - tem muito material sobre isso disponível.

gabrielmassote

Tudo bem Vinicius?

Segue duas APIs de envio de e-mail que fiz uns exemplos.

API JavaMail: http://www.guj.com.br/posts/list/87637.java
API CommonsMail (Recomendo): http://www.guj.com.br/posts/list/104645.java

Qualquer dúvida posta ai.

[]'s,
Gabriel.

viniciusgundim

gabrielmassote,
É o seguinte cara, segui seu tuto [url]http://www.guj.com.br/posts/list/104645.java[/url], deu certo mais ele está mandando somente a ultima linha da msg, o que pode ser????

public void enviar_email(){
 SimpleEmail email = new SimpleEmail();  
  
         try {  
        email.setDebug(true);  
        email.setHostName("172.19.32.23");  
        //email.setAuthentication("seu_nome_de_usuario","sua_senha");  
        //email.setSSL(true);  
        email.addTo("[email removido]"); //pode ser qualquer um email  
        email.setFrom("[email removido]"); //aqui necessita ser o email que voce fara a autenticacao  
        email.setSubject("Teste");  
        email.setMsg("Mensagem Testando");  
        email.setMsg("Mensagem Testando 2");
      email.send();  
 
         } catch (EmailException e) {  
  
       System.out.println(e.getMessage());  
   
       }   
  
   }

Estou usando servidor exchange, como tinha falado só chega a ultima linha

Mensagem Testando 2

a Mensagem Testando 1 não chega, o que pode ser?

gabrielmassote

Tudo bem Vinicius?

É que nesse caso você está sobrescrevendo a mensagem através do método setMsg() que toda hora que for chamado substitui o valor da mensagem.

Uma alternativa seria a seguinte:

String msg = new String();
msg.append("Mensagem 1");
msg.append("\nMensagem 2");

email.setMsg(msg);

Não fiz na prática aqui, mas é ± isso. Só faz o teste por ai para ver se não tem erro de compilação e etc.

[]'s.

viniciusgundim

Deu erro ai no append, o que poderia vir no lugar???

Valeuuu pela força!

gabrielmassote

Mals vinicius.

Segue o código certo agora : ).
Era StringBuffer no lugar de String.

StringBuffer msg = new StringBuffer();
msg.append("Mensagem 1");
msg.append("\nMensagem 2");

email.setMsg(msg);

[]'s.

rodrigo.bossini

Lembrem-se de utilizar StringBuilder no lugar de StringBuffer sempre que possível, haja vista que os métodos de StringBuffer são todos “synchronized”, o que, em geral, é dispensável.

gabrielmassote

No caso dele acho que não faz tanta diferença. Mas quando tiver muitas manipulações na String é valido.

Mas, bem lembrado rod. Valeu.

[]'s.

viniciusgundim

gabrielmassote,

Saiu em branco o corpo da msg, olhe o código, o que tá errado?

public void enviar_email(){
 SimpleEmail email = new SimpleEmail();  
  
         try {  
        StringBuffer msg = new StringBuffer();
        email.setDebug(true);  
        email.setHostName("172.19.32.23");  
        //email.setAuthentication("seu_nome_de_usuario","sua_senha");  
        //email.setSSL(true);  
        email.addTo("[email removido]"); //pode ser qualquer um email  
        email.setFrom("[email removido]"); //aqui necessita ser o email que voce fara a autenticacao  
        email.setSubject("Teste"); 
        msg.append("Mensagem Testando 1");  
        msg.append("Mensagem Testando 2");
      email.send();  
 
         } catch (EmailException e) {  
  
       System.out.println(e.getMessage());  
   
       }   
  
   }

Valeu pela força...

gabrielmassote

Tudo bem vinicius?

Então, preste atenção aonde você está dando append, você está apenas adicionando conteúdo a variável “msg” e não ao e-mail. O que falta é você colocar email.setMsg(msg); e depois enviar com email.send();

tente aii!!

[]'s.

viniciusgundim

Olha verifiquei lá vi onde estava errado, mais é os seguinte quando chamo msg fica com um só sobre ele, tipo que não tem a variável criada, segue o código:

public void enviar_email(){
SimpleEmail email = new SimpleEmail();  
 
         try {  
        StringBuilder msg = new StringBuilder();
        email.setDebug(true);  
        email.setHostName("172.19.32.23");  
        //email.setAuthentication("seu_nome_de_usuario","sua_senha");  
        //email.setSSL(true);  
        email.addTo("[email removido]"); //pode ser qualquer um email  
        email.setFrom("[email removido]"); //aqui necessita ser o email que voce fara a autenticacao  
        email.setSubject("Teste"); 
       msg.append("Mensagem Testando 1");  
       msg.append("Mensagem Testando 2"); 
       email.setMsg(msg); //erro aqui no msg
       email.send();
       JOptionPane.showMessageDialog(null, "Email enviado com sucesso");
 
         } catch (EmailException e) {  
  
       System.out.println(e.getMessage());  
   
       }   
  
   }

o que pode ser???

viniciusgundim

A única coisa que preciso agora é colocar mais de uma linha no corpo do email só isso, acho que não está muito difícil, estou tentando aqui se alguem tiver alguma dica, ficarei agradecido.

Obrigado pela atenção.

gabrielmassote

E ae vinicius,

O erro está ocorrendo pois o método .setMsg() só suporta String e StringBuilder possui uma “conversão” para String.

...
email.setMsg(msg.toString()); 
email.send(); 
...

Abraços!

viniciusgundim

Gabriel,

Valeu pelos posts cara ajudou pra caramba, fiz uma outra coisa que fuincionou sei que não é a melhor forma mais eu fiz e deu certo, segue o código abaixo:

public void enviar_email(){
 SimpleEmail email = new SimpleEmail();

 try {  
        StringBuffer msg = new StringBuffer();
        email.setDebug(true);  
        email.setHostName("172.19.32.23");  
        //email.setAuthentication("seu_nome_de_usuario","sua_senha");  
        //email.setSSL(true);  
        email.addTo("[email removido]"); //pode ser qualquer um email  
        email.setFrom("[email removido]"); //aqui necessita ser o email que voce fara a autenticacao  
        email.setSubject("Teste"); 
       msg.append("Mensagem Testando 1\n");  
       msg.append("Mensagem Testando 2"); 
       email.setMsg(""+msg); //aqui que estava dando o erro coloquei (""+msg), e deu certo kkk
       email.send();
       JOptionPane.showMessageDialog(null, "Email enviado com sucesso");
 
         } catch (EmailException e) {  
  
       System.out.println(e.getMessage());  
   
       }   
  
   }

Mais vou seguir o que vc me disse já testei e deu certo!!!!
Valeuuu, obrigado pela atenção

gabrielmassote

Pode ser também hahah

Faz do outro jeito que fica mais elegante rs

Bom trabalho ai.

[]'s

Criado 13 de abril de 2010
Ultima resposta 14 de abr. de 2010
Respostas 17
Participantes 3