Quel est le problème avec ce code? D'une manière ou d'une autre, il s'agit d'entrer dans une boucle infinie à la ligne Transport.send(message);
line, pas de message d'erreur, pas d'exception, juste une boucle infinie peut-être (je ne sais pas parce que je n'attends pas plus de 5 à 10 minutes)
final String username = "<mail_name>";
final String password = "<password>";
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.Host", "smtp.gmail.com");
props.put("mail.smtp.port", "465");
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("<mail_from>@gmail.com"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("<mail_to>@gmail.com"));
message.setSubject("Test Subject");
message.setText("Test");
Transport.send(message);
System.out.println("Done");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
Ici, je suis en train de donner quelques modifications qui fonctionnent bien pour moi:
Session session = Session.getInstance(props,null);
Vous instanciez l'objet du message comme vous l'avez fait. Et enfin:
Transport transport = session.getTransport("smtp");
String mfrom = "yourGmailUsernameWithout@"// example laabidiraissi
transport.connect("smtp.gmail.com", mfrom, "thepassword");
transport.sendMessage(message, message.getAllRecipients());
Edit, pourriez-vous s'il vous plaît me donner une faveur et copier/coller et essayer cet exemple et montrer ce qu'il affiche
package com.test;
import Java.util.Properties;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import org.junit.Test;
public class EmailService {
@Test
public void test(){
Properties props = System.getProperties();
props.put("mail.smtp.starttls.enable", true); // added this line
props.put("mail.smtp.Host", "smtp.gmail.com");
props.put("mail.smtp.user", "username");
props.put("mail.smtp.password", "password");
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", true);
Session session = Session.getInstance(props,null);
MimeMessage message = new MimeMessage(session);
System.out.println("Port: "+session.getProperty("mail.smtp.port"));
// Create the email addresses involved
try {
InternetAddress from = new InternetAddress("username");
message.setSubject("Yes we can");
message.setFrom(from);
message.addRecipients(Message.RecipientType.TO, InternetAddress.parse("receivermail"));
// Create a multi-part to combine the parts
Multipart multipart = new MimeMultipart("alternative");
// Create your text message part
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("some text to send");
// Add the text part to the multipart
multipart.addBodyPart(messageBodyPart);
// Create the html part
messageBodyPart = new MimeBodyPart();
String htmlMessage = "Our html text";
messageBodyPart.setContent(htmlMessage, "text/html");
// Add html part to multi part
multipart.addBodyPart(messageBodyPart);
// Associate multi-part with message
message.setContent(multipart);
// Send message
Transport transport = session.getTransport("smtp");
transport.connect("smtp.gmail.com", "username", "password");
System.out.println("Transport: "+transport.toString());
transport.sendMessage(message, message.getAllRecipients());
} catch (AddressException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
D'accord. C'est un peu plus complexe que ce que je pensais pour la première fois ... Pour résumer ce que j'ai obtenu:
session.setDebug(true);
. Si vous définissez ceci sur true, tous les processus importants seront débogués vers la console. Je recommande de l'utiliser.Transport transport = session.getTransport("smtps");
plutôt que du smtp non sécurisé ... L'objet JavaMail API Transport se chargera également des ports (respectivement smtp: 587, smtps: 465)Vous pouvez également utiliser la méthode statique de la classe Transport pour envoyer le message et (l'enregistrer avant, la méthode sendMessage non statique n'enregistrera pas le message), mais cette fois, vous devez utiliser javax.mail.Authenticator lors de la création de la session. comme ça:
Session session = Session.getInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("login", "password");
}
});
1.4.2 JavaMailApi a une autre exception que la version 1.4.7 pour ce problème ...
Si vous ne l'utilisez pas, vous ne pouvez pas vous authentifier avec la méthode statique. Si vous utilisez la méthode d'instance, vous pouvez.
Si joli foiré, mais il y avait un concept de base qui devrait être concentré ...
Utiliser Simple Java Mail il devrait être simple:
Email email = new Email();
email.setFromAddress("lollypop", "[email protected]");
email.addRecipient("C.Cane", "[email protected]", RecipientType.TO);
email.setText("We should meet up!");
email.setTextHTML("<b>We should meet up!</b>");
email.setSubject("hey");
new Mailer("smtp.gmail.com", 25, "your user", "your password", TransportStrategy.SMTP_TLS).sendMail(email);
new Mailer("smtp.gmail.com", 587, "your user", "your password", TransportStrategy.SMTP_TLS).sendMail(email);
new Mailer("smtp.gmail.com", 465, "your user", "your password", TransportStrategy.SMTP_SSL).sendMail(email);
Si la connexion à deux facteurs est activée, vous devez générer un mot de passe spécifique à l'application depuis votre compte Google.
Je pourrais reproduire le problème décrit dans votre question et le corriger.
La méthode send
reste bloquée à
SMTPTransport(Service).connect(String, int, String, String) line: 308
La connexion échoue, car vous avez le mauvais port pour l'hôte smtp gmail: 465
changez-le en 587
props.put("mail.smtp.port", "587");
et ça va marcher.