Enviando email através de uma aplicação java[resolvido]

11 respostas
D

Gente estou tentando fazer um teste em enviar emails através de uma aplicacao java usando emails comuns

o meu codigo de email é esse
por enquanto alguem ai tem uma ideia de como posso fazer pra funcionar isso?
obrigada.

import java.util.Properties;  
		import java.util.logging.Level;  
		import java.util.logging.Logger;  
		import javax.mail.Message;  
		import javax.mail.MessagingException;  
		import javax.mail.Session;  
		import javax.mail.Transport;   
		import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;  
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.swing.JFrame;
public class email{
 
			
			private static EntityManagerFactory fabricaDeEntidades = null;

			private static EntityManager gerenciador = null;
			
		public static void main(String[] args) {  
			fabricaDeEntidades = Persistence
			.createEntityManagerFactory("TurmaN40PostgreSQL");

	gerenciador = fabricaDeEntidades.createEntityManager();

//		configurando nossa mensagem   
		try {  
		ConfiguraEmail();  
		System.out.print("Email-> Enviado com sucesso");  
		} catch (MessagingException ex) {  
		Logger.getLogger(email.class.getName()).log(Level.SEVERE, null, ex);  
		System.out.print("Erro ao enviar, verifique, senha, sua conexão e tente novamente");  
		}  
		}  
		public static void ConfiguraEmail() throws MessagingException {  
//		 seta o servidor de email  
		Properties props = new Properties();  
		props.put ("mail.smtp.host", "mail.hotmail.com");  
		props.put("mail.smtp.auth", "false");  
//		 cria uma sessao com o servidor de email  
		Session mailSession = Session.getDefaultInstance(props, null);  
//		Mostra detalhes do envio da mensagem, quando (true)  
		mailSession.setDebug(false);   
		Message msg = new MimeMessage(mailSession);  
//		Subject = ASSUNTO  
		msg.setSubject("oi");  
//		 FROM = de esta enviando //  
		InternetAddress from = new InternetAddress("[email removido]");  
		msg.setFrom(from);  
//		PARA QUEM recebe //  
		InternetAddress[] address = {new InternetAddress("[email removido]")};  
		msg.setRecipients(Message.RecipientType.TO, address);  
//		 conteudo  
		msg.setContent("oi", "text/plain");  
//		Executa finalmente o envio!   
		Transport.send(msg);  
		}  
 
	}

apresenta este erro

26/06/2012 19:19:35 email main
GRAVE: null
javax.mail.MessagingException: Could not connect to SMTP host: mail.hotmail.com, port: 25;
nested exception is:
java.net.ConnectException: Connection timed out: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)
at javax.mail.Service.connect(Service.java:295)
at javax.mail.Service.connect(Service.java:176)
at javax.mail.Service.connect(Service.java:125)
at javax.mail.Transport.send0(Transport.java:194)
at javax.mail.Transport.send(Transport.java:124)
at email.ConfiguraEmail(email.java:57)
at email.main(email.java:29)
Caused by: java.net.ConnectException: Connection timed out: 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 java.net.Socket.connect(Unknown Source)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:288)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:231)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1900)
... 8 more
Erro ao enviar, verifique, senha, sua conexão e tente novamente

11 Respostas

lele_vader

Parece que deu erro na conexão ao host smtp

O nome é esse mesmo.

D

voce tem ideia de como fazer isso funcionar?

lele_vader

Dá para tentar acessar esse host ?

O erro parece ser de não conseguir acessá-lo.

D

consegui aqui de outro jeito obrigada xD

D
lele_vader

Qual era o erro ?

D

neste artigo eu peguei esse codigo ai e funfo mais tenho outro problema que depois vou postar aqui o certo seria usar um if else como nao sei :X
em outro exemplo que vou pedi ajuda aqui mesmo :X

JuniorMaia

o smtp do hotmail não é pelo live.com?
mail.hotmail.com acho que não existe, por isso do erro.
e verifique a porta tb…

D

surgiu outra duvida esse é o botao que envia o email eu quero que quando ele selecione no jcombobox hotmail mande para o hotmail conforme abaixo senao manda pro gmail acho que o meu if e else ta entrando errado voces poderiam verifica?

botao1.addActionListener(new ActionListener() {  
                public void actionPerformed(ActionEvent e) {  
                    // Persistir dados  
                    // inclusão de um novo registro  
                	JComboBox Hotmail = null;
                	if(j==Hotmail){  
                	 Properties props = new Properties();
                     /** Parâmetros de conexão com servidor Hotmail */
                     props.put("mail.transport.protocol", "smtp");
                     props.put("mail.smtp.host", "smtp.live.com");
                     props.put("mail.smtp.socketFactory.port", "587");
                     props.put("mail.smtp.socketFactory.fallback", "false");
                     props.put("mail.smtp.starttls.enable", "true");
                     props.put("mail.smtp.auth", "true");
                     props.put("mail.smtp.port", "587");

                     Session session = Session.getDefaultInstance(props,
                                 new javax.mail.Authenticator() {
                                      protected PasswordAuthentication getPasswordAuthentication() 
                                      {
                                            return new PasswordAuthentication(caixa1.getText(),caixa6.getText());
                                      }
                                 });

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

                     try {

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

                           message.setRecipients(Message.RecipientType.TO, 
                                             InternetAddress.parse(caixa2.getText())); //Destinatário(s)
                           message.setSubject(caixa3.getText());//Assunto
                           message.setText(caixa4.getText());
                           /**Método para enviar a mensagem criada*/
                           Transport.send(message);

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

                      } catch (MessagingException e1) {
                           throw new RuntimeException(e1);
                     }
                	}else{
                		final String username = caixa1.getText();
                		final String password = caixa6.getText();
                 
                		Properties props = new Properties();
                		props.put("mail.smtp.auth", "true");
                		props.put("mail.smtp.starttls.enable", "true");
                		props.put("mail.smtp.host", "smtp.gmail.com");
                		props.put("mail.smtp.port", "587");
                 
                		Session session = Session.getInstance(props,
                		  new javax.mail.Authenticator() {
                			protected PasswordAuthentication getPasswordAuthentication() {
                				return new PasswordAuthentication(username, password);
                			}
                		  });
                 
                		try {
                 
                			Message message = new MimeMessage(session);
                			message.setFrom(new InternetAddress(caixa1.getText()));
                			message.setRecipients(Message.RecipientType.TO,
                				InternetAddress.parse(caixa2.getText()));
                			message.setSubject(caixa3.getText());
                			message.setText(caixa4.getText());
                 
                			Transport.send(message);
                 
                			System.out.println("Done");
                 
                		} catch (MessagingException e1) {
                			throw new RuntimeException(e1);
                		}
                	}
                   
                }  
            });
lele_vader

Esse j é o que ?

if(j==Hotmail){

O j não está sendo declarado.

Se você quer pegar o que vem do jcombobox o método é getSelectedIndex(). Esse método retorna um object, do qual você irá que transformar para o tipo que o combobox foi adicionado.

Uma dica - Coloque nomes de variáveis significativos.
Caixa 1 e caixa 6 não indicam muita coisa. Se uma pessoa ver isso não irá entender o que são.

Outra dica - Você repete a seguinte parte para cada tipo de e-mail, sendo que o código é o mesmo.
Imagina se tivesse que criar outro e-mail, por exemplo, yahoo.

Por isso poderia colocar o if para pegar o e-mail em cima, e depois de você pegar os dados você chama essa parte de enviar o e-mail e só atribui os atributos atribuídos antes.

Session session = Session.getDefaultInstance(props,  
                                 new javax.mail.Authenticator() {  
                                      protected PasswordAuthentication getPasswordAuthentication()   
                                      {  
                                            return new PasswordAuthentication(caixa1.getText(),caixa6.getText());  
                                      }  
                                 });  
  
                     /** Ativa Debug para sessão */  
                     session.setDebug(true);  
  
                     try {  
  
                           Message message = new MimeMessage(session);  
                           message.setFrom(new InternetAddress(caixa1.getText())); //Remetente  
  
                           message.setRecipients(Message.RecipientType.TO,   
                                             InternetAddress.parse(caixa2.getText())); //Destinatário(s)  
                           message.setSubject(caixa3.getText());//Assunto  
                           message.setText(caixa4.getText());  
                           /**Método para enviar a mensagem criada*/  
                           Transport.send(message);  
  
                           System.out.println("Feito!!!");  
  
                      } catch (MessagingException e1) {  
                           throw new RuntimeException(e1);  
                     }
D

entao brigadao ta tudo certo :wink:

Criado 26 de junho de 2012
Ultima resposta 27 de jun. de 2012
Respostas 11
Participantes 3