Já testei de várias formas o envio de email utilizando o gmail, mas sempre dá esse erro, segue abaixo, código e erro.
[code]public class Email {
//hostmail do servidor de email que será usado para envio
static String hostName = “smtp.gmail.com”;
static String nomeRemetente = “Eu”;
static String remetente = "remetente@gmail.com";
static String destinatarios = “destinatario@xxxzz.com.br”;
static String assuntoEmail = “teste email”;
static String mensagemRmail = “testando envio de email utilizando o JAVA”;
static String usuarioEmail = “usuario_gmail”;
static String senhaEmail = “senha_gmail”;
static int portaEnvio = 465;
public static void enviarEmail() throws EmailException{
SimpleEmail email = new SimpleEmail();
//configura o hostname
email.setHostName(hostName);
//configura porta de envio
email.setSmtpPort(portaEnvio);
//adiciona os emails de destino
email.addTo(destinatarios);
//configura o email do remetente
email.setFrom(remetente, nomeRemetente);
//adiciona o assunto
email.setSubject(assuntoEmail);
//mensagem do email
email.setMsg(mensagemRmail);
//autenticacao no servidor
email.setSSL(true);
email.setTLS(true);
//usuario e senha do remetente
email.setAuthentication(usuarioEmail, senhaEmail);
email.send();
}
}[/code]
Classe para executar:
[code]public class Testes {
public static void main(String args[]) throws InterruptedException, FileNotFoundException, IOException, EmailException {
Email.enviarEmail();
}
}[/code]
Sempre retorna esse erro, já tentei sem autenticação, somente com um tipo de autenticação, com os 2 tipos de autenticação ssl tls, porta 465 e 587, hostname “smtp.gmail.com” e “smtp.googlemail.com”, sempre me retorna o erro abaixo? Existe a possibilidade de estar com erro nos imports? baixei alguma biblioteca errada? segue abaixo o erro quando o programa é executado:
Exception in thread "main" org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.gmail.com:465
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1242)
at org.apache.commons.mail.Email.send(Email.java:1267)
at diariooficial.Email.enviarEmail(Email.java:48)
at diariooficial.Testes.main(Testes.java:18)
Caused by: javax.mail.NoSuchProviderException: smtp
at javax.mail.Session.getService(Session.java:784)
at javax.mail.Session.getTransport(Session.java:720)
at javax.mail.Session.getTransport(Session.java:660)
at javax.mail.Session.getTransport(Session.java:640)
at javax.mail.Session.getTransport(Session.java:697)
at javax.mail.Transport.send0(Transport.java:192)
at javax.mail.Transport.send(Transport.java:124)
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1232)
... 3 more
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)
Verifica se você colocou o smtp.jar no classpath do seu aplicativo.
Utilizo os seguintes arquivos para enviar um Java Mail: dsn.jar, imap.jar, mailapi.jar, pop3.jar, smtp.jar.
wiliamps
A porta de smtp do google não é a 465, mas sim a 587. Abaixo solução completa para validar o endereço e enviar um e-mail html utilizando o Commons E-mail.
public static boolean validaEmail(String email) {
Pattern p = Pattern.compile(".+@.+\\.[a-z]+");
Matcher m = p.matcher(email);
if (m.matches()) {
return false;
} else {
return true;
}
}
public static HtmlEmail conectaEmail() throws EmailException, NoSuchProviderException, MessagingException {
String hostname = "smtp.gmail.com";
String username = "seu@gmail.com";
String password = "****";
String emailOrigem = "seu@gmail.com";
HtmlEmail email = new HtmlEmail();
email.setHostName(hostname);
email.setSmtpPort(587);
email.setAuthenticator(new DefaultAuthenticator(username, password));
email.setTLS(true);
email.setFrom(emailOrigem, "Destinatário");
email.setDebug(true);
email.setCharset(HtmlEmail.ISO_8859_1);
Properties props = new Properties();
props.setProperty(hostname, "smtp");
props.setProperty("mail.smtp.host", "smtp.gmail.com");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.port", "" + 587);
props.setProperty("mail.smtp.starttls.enable", "true");
Session mailSession = Session.getInstance(props, new DefaultAuthenticator(username, password));
email.setMailSession(mailSession);
return email;
}
public static void enviaEmailHtml(String email, String titulo, String texto) {
try {
HtmlEmail mensagem = conectaEmail();
mensagem.addTo(email);
mensagem.setSubject(titulo);
ServletContext sc = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
File img = new File(sc.getRealPath("") + "/resources/imagens/logoMarca.png");
mensagem.setHtmlMsg("<html><center><p>"
+ "<img src=cid:" + mensagem.embed(img) + ">"
+ texto + "</p></center></html>");
mensagem.buildMimeMessage();
Message m = mensagem.getMimeMessage();
Transport transport = mensagem.getMailSession().getTransport("smtp");
transport.connect(mensagem.getHostName(), 587, null, null);
transport.sendMessage(m, m.getAllRecipients());
System.out.println("E-mail enviado para: " + email);
} catch (MessagingException ex) {
Logger.getLogger(FacesUtils.class.getName()).log(Level.SEVERE, null, ex);
} catch (EmailException ex) {
Logger.getLogger(FacesUtils.class.getName()).log(Level.SEVERE, null, ex);
}
}
Utilizo a porta 465 sem nenhum problema para usar o GMail no Java Mail.
Acredito que é problema mesmo de JAR não colocado no classpath ou você está numa rede que precisa de proxy para acessar a Internet. Mas o Java Mail não trabalha com proxy.
wiliamps
Oi, tudo bem? Veja que ele utiliza TLS e a porta para esta conexão segura é a 587 e não a 465.
Dados do Gmail para conexão POP3/SMTP:
Servidor de recebimento de e-mails (POP3) - requer SSL: pop.gmail.com
Usar SSL: sim
Porta: 995
Servidor de e-mails enviados (SMTP) - requer TLS ou SSL: smtp.gmail.com
Usar autenticação: sim
Porta para TLS/STARTTLS: 587
Porta para SSL: 465
Se ele desabilitar o TLS e deixar somente SSL deve funcionar. O e-mail requer ou um ou outro e não os dois como ele está utilizando.
[quote=wiliamps]Utilizo a porta 465 sem nenhum problema para usar o GMail no Java Mail.
Acredito que é problema mesmo de JAR não colocado no classpath ou você está numa rede que precisa de proxy para acessar a Internet. Mas o Java Mail não trabalha com proxy.
wiliamps
http://oracle2java.blogspot.com/[/quote]
Agora funcionou hehehe, na verdade faltou importar o smpt.jar, esqueci :-), não preciso importar pop3 nem imap, já que só vou enviar email e não receber.
Valeu pela ajuda galera. 
Abraço a todos.