javax.mail.AuthenticationFailedException: impossible de se connecter, pas de mot de passe spécifié?
Ce programme tente d'envoyer des e-mail, mais jette une exception:
javax.mail.AuthenticationFailedException: failed to connect, no password specified?
Pourquoi j'obtiens cette erreur quand j'ai fourni le nom d'utilisateur correct et le mot de passe pour l'authentification?
À la fois l'expéditeur et le destinataire ont g des comptes de courrier. L'émetteur et le récepteur à la fois de g-mail. L'expéditeur a 2-étape du processus de vérification désactivé.
C'est le code:
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
class tester {
public static void main(String args[]) {
Properties props = new Properties();
props.put("mail.smtp.host" , "smtp.gmail.com");
props.put("mail.stmp.user" , "username");
//To use TLS
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.password", "password");
//To use SSL
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
Session session = Session.getDefaultInstance( props , null);
String to = "[email protected]";
String from = "[email protected]";
String subject = "Testing...";
Message msg = new MimeMessage(session);
try {
msg.setFrom(new InternetAddress(from));
msg.setRecipient(Message.RecipientType.TO,
new InternetAddress(to));
msg.setSubject(subject);
msg.setText("Working fine..!");
Transport transport = session.getTransport("smtp");
transport.connect("smtp.gmail.com" , 465 , "username", "password");
transport.send(msg);
System.out.println("fine!!");
}
catch(Exception exc) {
System.out.println(exc);
}
}
}
Même après avoir donné le mot de passe-je obtenir de l'exception. Pourquoi n'est-il pas l'authentification?
OriginalL'auteur Suhail Gupta | 2011-07-07
Vous devez vous connecter pour publier un commentaire.
Essayez de créer un javax.mail.Authentificateur de l'Objet, et l'envoyer avec l'objet de propriétés de l'objet Session.
Authentificateur
edit:
Vous pouvez le modifier pour accepter un nom d'utilisateur et le mot de passe et vous pouvez les stocker là, ou là où jamais vous le souhaitez.
Dans votre classe où vous envoyez l'e-mail:
Gupta, j'ai fait une erreur j'ai édité ma réponse
Gupta, avait-il travailler?
non j'ai des erreurs sur l'exécution du code
Je rencontre la même erreur et cela a résolu, mais pourquoi? Pourquoi ne l'authentification ne fonctionne que lors de l'obtention de l'instance de Session avec un authentificateur et pas en essayant de vous connecter avec les Transports, que le user/pass est évidemment la bonne.
OriginalL'auteur
Vous devez ajouter l'Objet d'Authentification en tant que Paramètre à la Session. comme
maintenant, Vous n'obtiendrez pas ce type d'Exception....
OriginalL'auteur
Votre email session doit être pourvu d'un authentificateur exemple comme ci-dessous
un exemple complet est ici http://bharatonjava.wordpress.com/2012/08/27/sending-email-using-java-mail-api/
OriginalL'auteur
En plus de RMT réponse. Moi aussi j'ai du modifier un peu le code.
voici mon exemple de send() méthodes. L'objet de config est juste un idiot conteneur de données.
OriginalL'auteur
J'ai résolu ce problème ajout d'utilisateur et le mot de passe dans
Transport.send
appel:Selon cette signature de la
envoyer
function dans javax.mail (de la version 1.5):public static void send(Message msg, String user, String password)
Aussi, si vous utilisez cette signature, il n'est pas nécessaire de mettre en place une
Authenticator
, et à définir l'utilisateur et le mot de passe dans leProperties
(seul l'hôte est nécessaire). Si votre code pourrait être:OriginalL'auteur
Il pourrait être intéressant de vérifier que le compte gmail n'a pas été bloquée suite à plusieurs échecs de tentatives de connexion, vous pouvez avoir besoin de réinitialiser votre mot de passe. J'ai eu le même problème que vous, et ceci s'est avéré être la solution.
OriginalL'auteur
J'ai aussi ce problème, donc ne vous inquiétez pas. Il s'agit du serveur de messagerie secondaires dus à un problème d'authentification. Ouvrez votre mail et vous recevrez un mail depuis le serveur de messagerie pour vous dire de permettre l'accessibilité. Lorsque vous avez terminé, relancez votre programme.
OriginalL'auteur
OriginalL'auteur
Même lors de l'utilisation d'un Authentificateur j'ai dû mettre de la poste.smtp.auth true à la propriété. Voici un exemple de travail:
OriginalL'auteur
Tour Sur "l'Accès de moins en sécurité des applications" dans le paramètre de Sécurité pour le compte gmail.(à partir de la messagerie), voir le lien ci-dessous pour les références
http://www.ghacks.net/2014/07/21/gmail-starts-block-less-secure-apps-enable-access/
OriginalL'auteur
Cette erreur peut être sur les caractères du mot de passe. Si votre mot de passe contient des caractères spéciaux et également vous ajoutez votre mot de passe dans
Transport
les méthodes de la classe;Par Exemple
ou
vous pouvez obtenir cette erreur. Parce que
Transport
de la classe de méthodes peuvent pas gérer les caractères spéciaux. Si vous ajoutez votre nom d'utilisateur et le mot de passe dans votre message à l'aide dejavax.mail.PasswordAuthentication
classe, j'espère que vous allez échapper à cette erreur;Par Exemple
OriginalL'auteur
Voir la 9 ligne de votre code,il peut être une erreur; il devrait être:
pas
OriginalL'auteur
J'ai juste du faire face à ce problème, et la solution est que la propriété "le courrier.smtp.utilisateur" doit être votre e-mail (pas de nom d'utilisateur).
L'exemple pour les utilisateurs de gmail:
OriginalL'auteur