Gostaria de saber onde estou errando neste codigo para enviar um email…Ele sempre está entrando no catch(MessagingException):
package com.teste;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class Email {
public static void main(String[] args){
try {
String mailServer = "smtp.gmail.com";
String assunto = "Teste de e-mail";
String para = "meuemail@provedor.com.br";
String de = "seuemail@provedor.com.br";
String mensagem = "Oi! Testando envio de e-mail!!!";
new Email().sendSimpleMail(mailServer, assunto, para, de, mensagem);
System.out.println("Email enviado com sucesso!!!");
}
catch(AddressException e) {
System.out.println("Email inválido");
}
catch (MessagingException e) {
System.out.println("Não foi possível enviar o e-mail");
}
}
public void sendSimpleMail(String mailServer, String subject, String to,
String from, String mensagem) throws AddressException,
MessagingException {
Properties mailProps = new Properties();
// definição do mailserver
mailProps.put("smtp.gmail.com", mailServer);
Session mailSession = Session.getDefaultInstance(mailProps, null);
// As duas linhas seguintes de código, colocam no formato de endereços,
// supostamente válidos, de email os dados passados pelos parâmetros to
// e from.
InternetAddress destinatario = new InternetAddress(to);
InternetAddress remetente = new InternetAddress(from);
// As duas linhas de código a seguir, são responsáveis por setar os
// atributos e
// propriedas necessárias do objeto message para que o email seja
// enviado.
// inicialização do objeto Message
Message message = new MimeMessage(mailSession);
// Definição de quem está enviando o email
message.setFrom(remetente);
// define o(s) destinatário(s) e qual o tipo do destinatário.
// os possíveis tipos de destinatário: TO, CC, BCC
message.setRecipient(Message.RecipientType.TO, destinatario);
// definição do assunto do email
message.setSubject(subject);
// definição do conteúdo da mesnagem e do tipo da mensagem
message.setContent(mensagem.toString(), "text/plain");
// a linha de código seguinte é a responsável pelo envio do email
Transport.send(message);
}
}
laurinha?
qual a exception?
t+
está entrando no catch:
catch (MessagingException e) {
System.out.println(“Não foi possível enviar o e-mail”);
}
Completando a pergunta da colega Diana, deixe imprimir a exceção que está dando… Isso dará pistas melhores. Agora de antemão, sugiro verificar um detalhe: seu provedor exige autenticação?
Acredito que o seu properties esta incompleto…
tenta assim…
[code]Properties props = new Properties();
props.put( "mail.transport.protocol", "smtp" );
props.put( "mail.smtp.host", txtHost.getVlrString() );
props.put( "mail.smtp.port", txtPort.getVlrString() );
props.put( "mail.smtp.auth", "true" );
props.put( "mail.smtp.starttls.enable", "true" );
props.put( "mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory" );[/code]
e se o servidor requer autenticação da uma olhada na classe Authenticator, pra vc passar na hora que cria a Session
obs. o gmail tem que autenticar…
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 Email
{
private static final String SMTP_HOSTNAME = "smtp.gmail.com";
private static final String SMTP_PORT = "465";
// private static final String emailMsgTxt = "Teste de envio JavaMail/Gmail";
// private static final String emailSubjectTxt = "JavaMail GmailTest";
// private static final String emailFromAddress = "rangelbug@gmail.com";
private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
private static final String LOGIN = "LOGIN";
private static final String SENHA = "SENHA";
private static final String[] sendTo = { "SEU_EMAIL@gmail.com" }; // Implementar
/**
*
* Construtor padrão
*/
public Email()
{
}
/**
* Construtor com argumentos
*
* @param emailSubjectTxt
* @param emailMsgTxt
* @param emailFromAddress
* @throws MessagingException
*/
public Email(String emailSubjectTxt, String emailMsgTxt,
String emailFromAddress) throws MessagingException
{
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
sendSSLMessage(sendTo, emailSubjectTxt, emailMsgTxt, emailFromAddress);
}
/**
* Método
*
* @param recipients
* @param subject
* @param message
* @param from
* @throws MessagingException
*/
private void sendSSLMessage(String recipients[], String subject,
String message, String from) throws MessagingException
{
final boolean debug = true;
final Properties props = new Properties();
props.put("mail.smtp.host", SMTP_HOSTNAME);
props.put("mail.smtp.auth", "true");
props.put("mail.debug", "true");
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");
final Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator()
{
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(LOGIN, SENHA);
}
});
session.setDebug(debug);
Message msg = new MimeMessage(session);
InternetAddress addressFrom = new InternetAddress(from);
msg.setFrom(addressFrom);
// Enviando para um ou mais destinatários
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);
// Setting the Subject and Content Type
msg.setSubject(subject);
msg.setContent(message, "text/plain");
Transport.send(msg);
}
}