Voici le code de l'application. J'ai essayé d'exécuter cela en utilisant Eclipse IDE. J'ai également ajouté tous les fichiers jar de courrier électronique Java requis, à savoir dsn.jar,imap.jar,mailapi.jar,pop3.jar,smtp.jar,mail.jar
. Mais cela donne l’erreur suivante Could not connect to SMTP Host: smtp.gmail.com, port: 587
.
Aucun pare-feu ne bloque l’accès car une réponse est envoyée à smtp.gmail.com . Je l’ai même essayé de cette façon:
javax.mail.MessagingException: Impossible de se connecter à l'hôte SMTP: smtp.gmail.com, port: 587; exception imbriquée est la suivante: Java.net.ConnectException: Connexion expirée: connectez-vous à l'adresse com.Sun.mail.smtp.SMTPTransport.openServer (SMTPTransport.Java:1972) à l'adresse com.Sun.mail.smtp.SMTPTransport.protocolConnect (SMTPTransport.Java:642) à javax.mail.Service.connect (Service.Java:317) à javax.mail.Service.connect (Service.Java:176) à javax.mail.Service.connect (Service.Java:125) sur javax.mail.Transport.send0 (Transport.Java:194) à javax.mail.Transport.send (Transport.Java:124) sur PlainTextEmailSender.sendPlainTextEmail (PlainTextEmailSender.Java:50) sur PlainTextEmailSender.main (PlainTextEmailSender.Java:73) Causée par: Java.net.ConnectException: Connexion expirée: connect sur Java.net.DualStackPlainSocketImpl.connect0 (Méthode native) sur Java.net.DualStackPlainSocketImpl.socketConnect (Source inconnue) sur Java.net.AbstractPlainSocketImpl.doConnect (Source inconnue) sur Java.net.AbstractPlainSocketImpl.connectToAddress (Source inconnue) sur Java.net.AbstractPlainSocketImpl.connect (Source inconnue) sur Java.net.PlainSocketImpl.connect (Source inconnue) sur Java.net.SocksSocketImpl.connect (Source inconnue) sur Java.net.Socket.connect (Source inconnue) sur Java.net.Socket.connect (Source inconnue) sur com.Sun.mail.util.SocketFetcher.createSocket (SocketFetcher.Java:319) à l'adresse com.Sun.mail.util.SocketFetcher.getSocket (SocketFetcher.Java:233) à l'adresse com.Sun.mail.smtp.SMTPTransport.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();
}
}
}
Comme je l'ai dit, il n'y a rien de mal avec votre code. Au besoin, essayez de supprimer la partie Authentification pour voir si cela fonctionne:
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
}
C’est le code que j’utilise chaque jour pour envoyer des dizaines de courriels à partir de mon application, et son fonctionnement est garanti à 100% - à condition que smtp.gmail.com:587
soit accessible, bien sûr.
Email réussi à travers Gmail en utilisant JDK 7 avec ci-dessous Gmail
paramètres .
Allez à Gmail
Settings > Accounts and Import > Other Google Account settings > et moins Sign-in & security
utilisé les dépendances suivantes:
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>
et mon code source est:
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();
}
}
}
J'espère que cela aidera quelqu'un.