Não foi possível ligar à máquina de SMTP: smtp.gmail.com, Porto: 587; a excepção aninhada é: java. net. ConnectException: a ligação expirou: connect
Aqui está o código da aplicação. Tenho tentado fazer isto usando a IDE do eclipse. Eu também adicionei todos os arquivos java mail jar necessários, nomeadamente
dsn.jar,imap.jar,mailapi.jar,pop3.jar,smtp.jar,mail.jar
.
Mas dá o seguinte erro Could not connect to SMTP host: smtp.gmail.com, port: 587
.
- primeiro sinal na conta do Gmail num navegador no dispositivo onde está a configurar / a usar o seu cliente
- vá aqui e active o acesso para aplicações "menos seguras": https://www.google.com/settings/security/lesssecureapps Então vai para aqui. https://accounts.google.com/b/0/DisplayUnlockCaptcha e carregue em Continuar. Depois volta imediatamente para o teu cliente e tenta outra vez.
Javax.correio.Messagingexcepção: não foi possível ligar à máquina de SMTP: smtp.gmail.com, Porto: 587; a excepção aninhada é: java. net. ConnectException: a ligação expirou o tempo-limite: ligar em suplemento.sol.correio.smtp.Transporte SMTP.openServer (SMTPTransport.java: 1972) no com.sol.correio.smtp.Transporte SMTP.protocolo de ligação (transporte SMTP.java: 642) no javax.correio.Servico.connect (serviço.java: 317) no javax.correio.Servico.connect (serviço.java: 176) no javax.correio.Servico.connect (serviço.java: 125) no javax.correio.Transporte.send0 (Transportes.java:194) no javax.correio.Transporte.enviar (Transporte.java: 124) em PlainTextEmailSender.sendPlainTextEmail (Plantextemailsender.java: 50) em PlainTextEmailSender.main (PlainTextEmailSender.java: 73) Causado por: java. net. ConnectException: a ligação expirou: connect at java. net. DualStackPlainSocketImpl. connect0 (método nativo) at java. net. DualStackPlainSocketImpl. socketConnect (Fonte desconhecida) at java. net. AbstractPlainSocketImpl. doConnect (Fonte desconhecida) at java. net. AbstractPlainSocketImpl. connectToAddress(desconhecido Fonte) em java. net. AbstractPlainSocketImpl. connect(Fonte desconhecida) em java. net. PlainSocketImpl. connect(Fonte desconhecida) em java. net.SocksSocketImpl. connect(Fonte desconhecida) em java. net. Socket. connect(Fonte desconhecida) em java. net. Socket. connect(Fonte desconhecida) no com.sol.correio.util.SocketFetcher.createSocket (SocketFetcher.java: 319) no com.sol.correio.util.SocketFetcher.getSocket(SocketFetcher.java: 233) em suplemento.sol.correio.smtp.Transporte SMTP.openServer (SMTPTransport.java: 1938)
package net.codejava.mail;
import java.util.Date;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
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 PlainTextEmailSender {
public void sendPlainTextEmail(String host, String port,
final String userName, final String password, String toAddress,
String subject, String message) throws AddressException,
MessagingException {
// sets SMTP server properties
Properties properties = new Properties();
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.port", port);
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
// creates a new session with an authenticator
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
};
Session session = Session.getInstance(properties, auth);
// creates a new e-mail message
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(userName));
InternetAddress[] toAddresses = { new InternetAddress(toAddress) };
msg.setRecipients(Message.RecipientType.TO, toAddresses);
msg.setSubject(subject);
msg.setSentDate(new Date());
// set plain text message
msg.setText(message);
// sends the e-mail
Transport.send(msg);
}
/**
* Test the send e-mail method
*
*/
public static void main(String[] args) {
// SMTP server information
String host = "smtp.gmail.com";
String port = "587";
String mailFrom = "user_name";
String password = "password";
// outgoing message information
String mailTo = "email_address";
String subject = "Hello my friend";
String message = "Hi guy, Hope you are doing well. Duke.";
PlainTextEmailSender mailer = new PlainTextEmailSender();
try {
mailer.sendPlainTextEmail(host, port, mailFrom, password, mailTo,
subject, message);
System.out.println("Email sent.");
} catch (Exception ex) {
System.out.println("Failed to sent email.");
ex.printStackTrace();
}
}
}
6
2 answers
Como eu disse, Não há nada de errado com o seu código. Se alguma coisa, apenas para fazer alguns testes, tente largar a parte de autenticação para ver se isso funciona:
public void sendPlainTextEmail(String host, String port,
final String userName, final String password, String toAddress,
String subject, String message) throws AddressException,
MessagingException {
// sets SMTP server properties
Properties properties = new Properties();
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.port", port);
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
// *** BEGIN CHANGE
properties.put("mail.smtp.user", userName);
// creates a new session, no Authenticator (will connect() later)
Session session = Session.getDefaultInstance(properties);
// *** END CHANGE
// creates a new e-mail message
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(userName));
InternetAddress[] toAddresses = { new InternetAddress(toAddress) };
msg.setRecipients(Message.RecipientType.TO, toAddresses);
msg.setSubject(subject);
msg.setSentDate(new Date());
// set plain text message
msg.setText(message);
// *** BEGIN CHANGE
// sends the e-mail
Transport t = session.getTransport("smtp");
t.connect(userName, password);
t.sendMessage(msg, msg.getAllRecipients());
t.close();
// *** END CHANGE
}
Esse é o código que estou usando todos os dias para enviar dezenas de E-mails da minha aplicação, e é 100% garantido para funcionar -- desde que smtp.gmail.com:587
seja acessível, é claro.
0
Author: Luis G., 2016-07-28 07:03:50
E-Mail conseguiu através Gmail com JDK 7 com o abaixo Gmail
configurações.
Ir para Gmail
Definições > Contas e Importação > Outras configurações da Conta do Google > e em Sinal-em & segurança
- 2-Verificação Do Patamar: Desligado
- permitir aplicações menos seguras: em
- Aplicação Senhas: 1 Senha (16 caracteres longos), mais tarde substituiu a senha actual com isto.
Utilizado nas seguintes dependências maven:
spring-core:4.2.2
spring-beans:4.2.2
spring-context:4.2.2
spring-context-support:4.2.2
spring-expression:4.2.2
commons-logging:1.2
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
E o meu código-fonte é:
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.swing.JOptionPane;
import java.util.List;
import java.util.Properties;
public class Email {
public final void prepareAndSendEmail(String htmlMessage, String toMailId) {
final OneMethod oneMethod = new OneMethod();
final List<char[]> resourceList = oneMethod.getValidatorResource();
//Spring Framework JavaMailSenderImplementation
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("smtp.gmail.com");
mailSender.setPort(465);
//setting username and password
mailSender.setUsername(String.valueOf(resourceList.get(0)));
mailSender.setPassword(String.valueOf(resourceList.get(1)));
//setting Spring JavaMailSenderImpl Properties
Properties mailProp = mailSender.getJavaMailProperties();
mailProp.put("mail.transport.protocol", "smtp");
mailProp.put("mail.smtp.auth", "true");
mailProp.put("mail.smtp.starttls.enable", "true");
mailProp.put("mail.smtp.starttls.required", "true");
mailProp.put("mail.debug", "true");
mailProp.put("mail.smtp.ssl.enable", "true");
mailProp.put("mail.smtp.user", String.valueOf(resourceList.get(0)));
//preparing Multimedia Message and sending
MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setTo(toMailId);
helper.setSubject("I achieved the Email with Java 7 and Spring");
helper.setText(htmlMessage, true);//setting the html page and passing argument true for 'text/html'
//Checking the internet connection and therefore sending the email
if(OneMethod.isNetConnAvailable())
mailSender.send(mimeMessage);
else
JOptionPane.showMessageDialog(null, "No Internet Connection Found...");
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
Espero que isto ajude alguém.
0
Author: ArifMustafa, 2018-02-23 15:23:09