Porém da erro
tem alguma outra coisa que posso fazer?
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.
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.
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:
1
2
3
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