Envio de email no Java

Porém da erro

tem alguma outra coisa que posso fazer?

Cara, manda o código todo aqui, eu tenho ele desse jeito e não dá nenhum erro. Manda aqui o fonte todo, por favor.

@rodriguesabner
o código é esse do post acima

Eu sei, mas manda os imports também

O import utilizado é no JDK 8:
import java.security.Security;
e na linha onde está o Security.addPovider alterei para:
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
Funcionou para mim desta forma com o código compartilhado pelo @rodriguesabner.
@rodriguesabner obrigado por compartilhar seu código.

1 curtida

Esses são os meu imports:

import java.io.UnsupportedEncodingException;
import java.security.Provider;
import java.util.Date;
import java.util.Properties;
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.swing.JOptionPane;

Quando eu tenho fazer igual está nesse post

aprece o X e aprece isso aqui:

Multiple markers at this line
- Access restriction: The constructor 'Provider()' is not API (restriction on required library 'C:
 \Program Files\Java\jre1.8.0_151\lib\jsse.jar')
- Access restriction: The type 'Provider' is not API (restriction on required library 'C:\Program 
 Files\Java\jre1.8.0_151\lib\jsse.jar')

E aprece isso nas sugestões

Só por curiosidade o seu JDK 8 está instalado neste computador?

Comigo acontecia isso quando eu instalei o JDK 13 na máquina e precisei fazer algumas alterações.

Tive que mudar isso:

Pra isso:
java.security.Security.addProvider(new Provider(host, remetente, senha) {});

JDK 8 Imports:

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

JDK 13 imports:

import java.io.UnsupportedEncodingException;
import java.security.Provider;

import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

sim

ainda continua aparecendo o erro:

O que faço?vou ter que mudar de jdk?

Cara, manda o seu código, vc ainda não mandou. OK que é igual, mas manda aí.

Ok então. Esse é meu código:

package envio2;

import java.io.UnsupportedEncodingException;
import java.security.Provider;
import java.util.Date;
import java.util.Properties;
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.swing.JOptionPane;
import java.security.Security;
//import java.security.Security;
public class ControleEmail {
public static void main(String[] args) {
    new ControleEmail().envioSimples(
            "Meu usuário", //Remetente
            "Assunto Daquele Dia", //Assunto
            "Oi, tudo bem?", //Mensagem
            "meuemaildedestino@gmail.com"); //Email do Destinatário (O EMAIL PRECISA SER VALIDO)
}

public void envioSimples(String nomeRemetente, String assunto, String mensagem, String destinatario) {
    try {
        Email me = new Email();
        String host = "smtp.gmail.com";
        String usuario = "meu email@gmail.com";
        String senha = "minhasenha";
        String remetente = "meuemail@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");
       
        //Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
        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.");
    }
}
 }

Vamos lá, desinstalei o JDK 13 do meu pc:

Me deu esse erro:

Comentei a linha errada e funcionou


Com o JDK 13 instalado:
image

1
image

2
image

3
image

Peguei o seu código, fiz as alterações e funcionou normal…

@rodriguesabner Precisa do protocolo oAuth 2 para enviar email para o gmail?
porque na documentação do javamail está isso:

https://javaee.github.io/javamail/FAQ#gmail
https://javaee.github.io/javamail/OAuth2

Não é necessário, o email é enviado normalmente com o código que passei. Você conseguiu usa-lo?

não está dando
Eof e messagemException

Você conseguiu usar o código?? Parou de dar aquele bug?

que?

sim consegui,parrou de dar bug do ssl
Mas está dando o seguinte erro:

javax.mail.MessagingException: [EOF]

Não sei porque está dando isso,já coloquei o ssl e tls e ainda está dando erro