Qual biblioteca ou api usar para envio de e-mail no Java usando uma conta do Gmail?
Obs:Já usei o JavaMail e não funcionou
Qual biblioteca ou api usar para envio de e-mail no Java usando uma conta do Gmail?
Obs:Já usei o JavaMail e não funcionou
Pq não funcionou? O que aconteceu pra não funcionar? específica mais. Eu particularmente não gosto da api do GMAIL
está dando erro de conexão vou postar me código aqui pra voce ver.:
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 EnviarEmail {
private String emailDestinatario;
private String assunto;
private String msg;
public String getEmailDestinatario() {
    return emailDestinatario;
}
public void setEmailDestinatario(String emailDestinatario) {
    this.emailDestinatario = emailDestinatario;
}
public String getAssunto() {
    return assunto;
}
public void setAssunto(String assunto) {
    this.assunto = assunto;
}
public String getMsg() {
    return msg;
}
public void setMsg(String msg) {
    this.msg = msg;
}
public boolean enviarGmail() {
    boolean retorno = false;
    //Get the session object  
    Properties props = new Properties();
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.socketFactory.port", "465");
    props.put("mail.smtp.socketFactory.class",
            "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", "465");
    Session s = Session.getDefaultInstance(props,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("teste@gmail.com", "teste");//email e senha usuário 
                }
            });
    //compose message  
    s.setProtocolForAddress("rfc821", "smtps");
    s.setDebug(true);
    try {
    	
        MimeMessage message = new MimeMessage(s);
        message.setFrom(new InternetAddress("teste@gmail.com"));
        message.addRecipient(Message.RecipientType.TO, new InternetAddress("teste@gmail.com"/*this.emailDestinatario*/));
        message.setSubject("Email de Teste"/*this.assunto*/);
        message.setContent("Email enviado pelo Java"/*this.msg*/, "text/html; charset=utf-8");
        //send message  
        Transport tr;
        tr = s.getTransport("smtp"); //define smtp para transporte
        tr.connect("smtp.gmail.com", "teste@gmail.com", "teste");
        retorno = true;
    } catch (MessagingException e) {
        retorno = false;
        e.printStackTrace();
    }
    return retorno;
} 
}
Mas está dando um erro de conexão recusada sendo que meu firewal eu desativei para ver e está com os parametros do e-mail certo e o acesso a apps menos seguro está ativado
Manda o erro aqui
@Jhonatas_Tomaz você desativou o antivirus? Eu ja tive esse problema algumas vezes, só tive que desativar para funcionar
estou usando o antivírus do windows mesmo só para teste
Esse é o erro:
DEBUG: setDebug: JavaMail version 1.4.4
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL false
220 smtp.gmail.com ESMTP h67sm5805393vka.25 - gsmtp
DEBUG SMTP: connected to host "smtp.gmail.com", port: 465
EHLO Teste
501-5.5.4 HELO/EHLO argument "Teste" invalid, closing connection.
501 5.5.4  https://support.google.com/mail/?p=helo h67sm5805393vka.25 - gsmtp
 HELO Teste
DEBUG SMTP: EOF: [EOF]
javax.mail.MessagingException: [EOF]
at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:2023)
at com.sun.mail.smtp.SMTPTransport.helo(SMTPTransport.java:1440)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:644)
at javax.mail.Service.connect(Service.java:295)
at javax.mail.Service.connect(Service.java:176)
at envio2.EnviarEmail.enviarGmail(EnviarEmail.java:77)
at envio.principal.main(principal.java:19)Antes ontem estava dando conexão recusada e agora só está dando este erro
Só um detalhe, você precisa fornecer os dados VÁLIDOS, o Remetente e Destinatário PRECISAM existir.
Eu faço assim:
public static void main(String[] args) {
        new ControleEmail().envioSimples(
                "Jhonatas Tomaz", //Remetente
                "Assunto Daquele Dia", //Assunto
                "Oi, tudo bem?", //Mensagem
                "email@email.com"); //Email do Destinatário (O EMAIL PRECISA SER VALIDO)
    }
    public void envioSimples(String nomeRemetente, String assunto, String mensagem, String destinatario) {
        try {
            ModeloEmail me = new ModeloEmail();
            String host = "smtp.gmail.com";
            String usuario = "seuEmail@gmail.com";
            String senha = "suaSenha";
            String remetente = "seuEmail@gmail.com"; //Pode trocar aqui pela String usuario
            me.setAssunto(assunto);
            me.setMensagem(mensagem);
            boolean sessionDebug = true;
            Properties props = System.getProperties();
            props.put("mail.smtp.starttls.enable", "true");
            props.put("mail.smtp.host", host);
            props.put("mail.smtp.port", "587");
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.starttls.required", "true");
            props.put("mail.smtp.ssl.trust", "smtp.gmail.com");
            java.security.Security.addProvider(new Provider(host, remetente, senha) {
            });
            Session mailSession = Session.getDefaultInstance(props, null);
            mailSession.setDebug(sessionDebug);
            Message msg = new MimeMessage(mailSession);
            msg.setFrom(new InternetAddress(remetente, nomeRemetente));
            msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(destinatario));
            msg.setSubject(assunto);
            msg.setSentDate(new Date());
            msg.setContent(mensagem, "text/html;charset=UTF-8");
            Transport transport = mailSession.getTransport("smtp");
            transport.connect(host, usuario, senha);
            transport.sendMessage(msg, msg.getAllRecipients());
            transport.close();
            System.out.println("Enviado com Sucesso");
        } catch (MessagingException ex) {
            //JOptionPane.showMessageDialog(null, "Erro ao enviar email. Você está sem conexão.");
        } catch (UnsupportedEncodingException ex) {
            JOptionPane.showMessageDialog(null, "Destinatário Inválido.");
        }
    }@rodriguesabner
o Eclipse acusa uma sugestão dizendo que tem que converter a String remetente pra esse metodo que voce colocou:
sendo que importei a classe Provider do próprio java security
o que eu faço?
é só aviso?? se for, pode ignorar
Detalhe, não é pq a IDE tá sugerindo, que tem que fazer, beleza? É só uma sugestão mesmo!!
onde ta dando invalid arguments?
java.security.Security.addProvider(new Provider(host, remetente, senha) {});
aqui? Quais argumentos ela sugere?
sim
O erro é esse :
Multiple markers at this line
- The constructor Provider(String, String, String) is undefined
- The serializable class does not declare a static final serialVersionUID field of 
 type long
Ai a sugestão é
change of 'remetente' to 'double'
O que eu faço?o que eu preciso adicionar?
Faz o seguinte então, troca por isso:
            java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
            Session mailSession = Session.getDefaultInstance(props, null);da onde é essa importação porque está dando erro na hora de fazer a importação. Olha o erro:
com.sun.net.ssl.internal.ssl cannot be resolved to a typeCara, qual a versão do seu JDK?
o jdk 8.
A classe é importada somente assim
 import com.sun.net.ssl.internal.ssl.*;`
Porém como obtendo o método Provider?
Beleza, então volta pro antigo e coloca esse import:
  import java.security.Provider;
Código
  java.security.Security.addProvider(new Provider(host, remetente, senha) {
            });
  Session mailSession = Session.getDefaultInstance(props, null);