Ajuda JavaMail

7 respostas
Deluxe

Pessoal
coloquei todos os jar que usa pra mandar email..

minha classe é essa

alguem poderia me falar se é realmente isso que precisa pra mandar um email ?
eu executo a classe
não da erro nenhum.. mas o email nao chega, creio que tem alguma coisa na empresa bloqueando
essa parte do smtp

public static void main(String args[]){  
		           
		           
		         Properties p = new Properties();  
		         p.put("mail.host", "smtp2.uol.com.br");  
		           
		         Session session = Session.getInstance(p, null);  
		         MimeMessage msg = new MimeMessage(session);  
		           
		         try {  
		             // "de" e "para"!!  
		             msg.setFrom(new InternetAddress("[email removido]"));  
		             msg.setRecipient(Message.RecipientType.TO, new InternetAddress("[email removido]"));  
		   
		             // nao esqueca da data!  
		             // ou ira 31/12/1969 !!!  
		             msg.setSentDate(new Date());  
		   
		             msg.setSubject("assunto da mensagem");  
		   
		            msg.setText("corpo da mensagem");  
		   
		             // evniando mensagem (tentando)  
		             Transport.send(msg);  
		         }  
		         catch (AddressException e) {  
		             // nunca deixe catches vazios!  
		         }  
		         catch (MessagingException e) {  
		             // nunca deixe catches vazios!  
		         }  
		       
		     }

7 Respostas

ajfilho

Você precisa do protocolo SMTP para envio.

Na minha classe eu uso assim:

Properties props = new Properties(); props.put("mail.transport.protocol", protocolo); props.put("mail.smtp.host", servidor); sessao = Session.getDefaultInstance(props);

onde:

[list]sessao = Instancia da classe Session[/list]
[list]protocolo = “smtp”[/list]
[list]servidor = servidor aqui da empresa.[/list]

Abraços!!

carlos.uneb

ajfilho:
Você precisa do protocolo SMTP para envio.

Na minha classe eu uso assim:

Properties props = new Properties(); props.put("mail.transport.protocol", protocolo); props.put("mail.smtp.host", servidor); sessao = Session.getDefaultInstance(props);

onde:

[list]sessao = Instancia da classe Session[/list]
[list]protocolo = “smtp”[/list]
[list]servidor = servidor aqui da empresa.[/list]

Abraços!!

Realmente você precisa disto agora checa também o seu anti-vírus, aqui na empresa tive um problema parecido onde o antivírus barrava as mensagens.

att. Carlos

T

Você normalmente não pode usar um servidor SMTP (por exemplo, o da UOL) para enviar emails com um remetente de outro domínio (no seu caso o do HotMail). Se isso fosse possível, a Internet estaria mais afogada em spam que já está.

Deluxe

Pessoal
achei outro exemplo
mais da um erro..

package br.com.microlog.openbravo.lancaData;

import java.security.Security;
import java.util.Properties;

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 teste {

	private static final String SMTP_HOST_NAME = "smtp.gmail.com";

	private static final String SMTP_PORT = "465";

	private static final String emailMsgTxt = "Teste";

	private static final String emailSubjectTxt = "Testando o email!";

	private static final String emailFromAddress = "[email removido]";

	private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

	private static final String[] sendTo = { "[email removido]"};

	private static final String LOGIN = "xxxxxxx";
	private static final String PASSWORD = "xxxxx";
	
	private String host;
	private String port;
	private String login;
	private String senha;
	
	public teste(){
		
		
	}
	
	public teste(String host, String port, String login, String senha){
		this.host = host;
		this.port = port;
		this.login = login;
		this.senha = senha;
		
	}
	
	public static void main(String args[]) throws Exception {

		Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

		new teste().sendSSLMessage(sendTo, emailSubjectTxt, emailMsgTxt,
				emailFromAddress);
		System.out.println("Sucessfully Sent mail to All Users");
	}

	public void sendSSLMessage(String recipients[], String subject,
			String message, String from) throws MessagingException {
		boolean debug = true;

		Properties props = new Properties();
		
		props.put("mail.smtp.auth", "true");
		props.put("mail.debug", "true");
		if(host == null)
		props.put("mail.smtp.host", SMTP_HOST_NAME);
		if(port == null)
		props.put("mail.smtp.port", SMTP_PORT);
		
		props.put("mail.smtp.socketFactory.port", SMTP_PORT);
		props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
		props.put("mail.smtp.socketFactory.fallback", "false");


		Session session = Session.getDefaultInstance(props,
				new javax.mail.Authenticator() {
	

			private boolean validaLoginSenha() {

				
				return ((login == null) && (senha == null));
			}
		});

		session.setDebug(debug);

		Message msg = new MimeMessage(session);
		InternetAddress addressFrom = new InternetAddress(from);
		msg.setFrom(addressFrom);

		InternetAddress[] addressTo = new InternetAddress[recipients.length];
		for (int i = 0; i < recipients.length; i++) {
			addressTo[i] = new InternetAddress(recipients[i]);
		}
		msg.setRecipients(Message.RecipientType.TO, addressTo);

		msg.setSubject(subject);
		msg.setContent(message, "text/plain");
		Transport.send(msg);
	}
}

o Erro

DEBUG: JavaMail version 1.4.1
DEBUG: not loading file: C:\Arquivos de programas\Java\jdk1.6.0_04\jre\lib\javamail.providers
DEBUG: java.io.FileNotFoundException: C:\Arquivos de programas\Java\jdk1.6.0_04\jre\lib\javamail.providers (O sistema não pode encontrar o arquivo especificado)
DEBUG: URL jar:file:/F:/Nova%20pasta/jar/imap.jar!/META-INF/javamail.providers
DEBUG: successfully loaded resource: jar:file:/F:/Nova%20pasta/jar/imap.jar!/META-INF/javamail.providers
DEBUG: URL jar:file:/F:/Nova%20pasta/jar/pop3.jar!/META-INF/javamail.providers
DEBUG: successfully loaded resource: jar:file:/F:/Nova%20pasta/jar/pop3.jar!/META-INF/javamail.providers
DEBUG: URL jar:file:/F:/Nova%20pasta/jar/smtp.jar!/META-INF/javamail.providers
DEBUG: successfully loaded resource: jar:file:/F:/Nova%20pasta/jar/smtp.jar!/META-INF/javamail.providers
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsy stems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: URL jar:file:/F:/Nova%20pasta/jar/smtp.jar!/META-INF/javamail.address.map
DEBUG: successfully loaded resource: jar:file:/F:/Nova%20pasta/jar/smtp.jar!/META-INF/javamail.address.map
DEBUG: not loading file: C:\Arquivos de programas\Java\jdk1.6.0_04\jre\lib\javamail.address.map
DEBUG: java.io.FileNotFoundException: C:\Arquivos de programas\Java\jdk1.6.0_04\jre\lib\javamail.address.map (O sistema não pode encontrar o arquivo especificado)
DEBUG: setDebug: JavaMail version 1.4.1
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
Exception in thread "main" javax.mail.AuthenticationFailedException
	at javax.mail.Service.connect(Service.java:319)
	at javax.mail.Service.connect(Service.java:169)
	at javax.mail.Service.connect(Service.java:118)
	at javax.mail.Transport.send0(Transport.java:188)
	at javax.mail.Transport.send(Transport.java:118)
	at br.com.microlog.openbravo.lancaData.teste.sendSSLMessage(teste.java:103)
	at br.com.microlog.openbravo.lancaData.teste.main(teste.java:55)

Ele nao acha um tal de javamail.providers

carlos.uneb

Cara o erro é de autenticação.

Cara vou postar um código que estou usando aqui sem erro e autenticado.

try {
            String de = "[email removido]";
            String para = "[email removido]";
            
            Properties p = new Properties();
            p.put("mail.host", "10.1.3.23");

            Session session = Session.getInstance(p, new Autenticacao());
            MimeMessage msg = new MimeMessage(session);

            msg.setFrom(new InternetAddress(de));
            msg.setRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress(para));

            // nao esqueca da data!
            // ou ira 31/12/1969 !!!
            msg.setSentDate(new Date());

            msg.setSubject("Assunto", "ISO-8859-1");
            StringBuffer sb = new StringBuffer();
            StringBuffer url = new StringBuffer();
            sb.append("mensagem linha 1 <br>");
            sb.append("mensagem linha 2 <br>");
            sb.append("mensagem linha 3 <br>");
            sb.append("mensagem linha 4 <br>");
            sb.append("mensagem linha 4 <br>");
            
            msg.setContent(sb.toString(), "text/html; charset=ISO-8859-1");

            // evniando mensagem (tentando)
            Transport.send(msg);

        } catch (Exception e) {
            e.printStackTrace();
        }
class Autenticacao extends Authenticator {

    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("usuario", "senha");
    }
}

Para usar isto você deve ter o pacote JavaMail no classpath da aplicação.

o código que te apresentei está rodando aqui normalmente.

Se funfar posta ae!

Att. Carlos

Deluxe
javax.mail.MessagingException: Exception reading response;
  nested exception is:
	java.net.SocketException: Connection reset
	at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1611)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1369)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)
	at javax.mail.Service.connect(Service.java:288)
	at javax.mail.Service.connect(Service.java:169)
	at javax.mail.Service.connect(Service.java:118)
	at javax.mail.Transport.send0(Transport.java:188)
	at javax.mail.Transport.send(Transport.java:118)
	at br.com.microlog.openbravo.lancaData.teste.main(teste.java:42)
Caused by: java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(SocketInputStream.java:168)
	at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:110)
	at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
	at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
	at com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:88)
	at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1589)
	... 8 more

oq pode ser?

carlos.uneb

Você alterou a linha abaixo para o seu servidor de email?

Properties p = new Properties();   
p.put("mail.host", "10.1.3.23");

para

Properties p = new Properties();   
p.put("mail.host", "seu servidor de email aqui");

Testa a sua conexão com o servidor, faz assim entra no executar do windows e digita:

telnet seu.servidor.de.email 25

se não conectar tem alguma coisa de bloqueando.

Ai já não é mais erro de soft.

Criado 10 de dezembro de 2008
Ultima resposta 10 de dez. de 2008
Respostas 7
Participantes 4