Préface
Je crois que tout le monde devrait savoir que l'API Open General nous appelle aura une valeur de retour ou un code d'état pour nous dire si l'exécution est réussie ou non. Cependant, Javamail ne fournit pas une telle valeur de retour.
Par conséquent, lorsque vous appelez Javamail pour envoyer des e-mails, nous ne pouvons utiliser l'exception de Catch pour déterminer si l'e-mail est envoyé avec succès. Nous pensons que tant qu'aucune exception ne se produit, l'e-mail sera envoyé avec succès. Ensuite, analysons pourquoi Javamail ne fournit pas de valeur de retour et si le statut d'e-mail réussi est fiable grâce à des exceptions.
Principe de courrier envoyant Javamail
Lors de l'envoi de courrier à l'aide de Javamail, nous devons fournir une session de messagerie. Le processus de création d'une session de messagerie est le suivant:
Properties props = news properties (); // L'IP et le port du serveur qui envoient le Mail props.put ("mail.smtp.host", mail_smtp_host); props.put ("mail.smtp.port", mail_smtp_port); // si l'authentification est requise props.put ("mail.smtp.auth", "true"); props.put ("mail.smtp.socketfactory.class", "javax.net.ssl.sslsocketfactory"); Session session = session.getDefaultInstance (Props, new Authenticator () {Protected PasswordAuthentication GetPasswordAuthentication () {// Connectez-vous au nom d'utilisateur et au mot de passe de l'e-mail Envoi du serveur renvoie un nouveau PasswordAuthentication (Mail_Sender_Mail, Mail_Sender_Pass);}});Analyser le code.
Avant de créer la session, nous créons d'abord des propriétés. Ces propriétés définissent les paramètres suivants: mail.smtp.host , mail.smtp.port , mail.smtp.auth et mail.smtp.socketFactory.class . Lors de la création d'une session, vous devez également passer le nom d'utilisateur et le mot de passe pour envoyer l'e-mail.
Le code e-mail d'envoi est le suivant:
// 5 étapes pour envoyer des e-mails à l'aide de Javamail // 1. Créer une session Session Session Session = Session.getInstance (PROP); // Activer le mode de débogage de la session, afin que vous puissiez afficher l'état d'exécution de l'e-mail envoyé par le programme Session.SetDebug (true); // 2. Obtenez l'objet de transport via Session Transport ts = session.getTransport (); // 3. Utilisez le nom d'utilisateur et le mot de passe de l'e-mail pour vous connecter au serveur de messagerie. Lors de l'envoi d'e-mails, l'expéditeur doit soumettre le nom d'utilisateur et le mot de passe de l'e-mail au serveur SMTP. Le nom d'utilisateur et le mot de passe peuvent être vérifiés avant que l'e-mail ne puisse être envoyé normalement au destinataire. ts.connect ("smtp.sohu.com", "gacl", "mot de passe e-mail"); // 4. Créer un message Message Message = createImpleMail (session); // 5. Envoyer Mail Ts.SendMessage (message, message.getAllRescicipients ()); // Ferme la connexion ts.close ();Résumé du processus d'envoi d'e-mails a les étapes suivantes:
1. Créez un objet de session contenant un lien réseau vers le serveur de messagerie
2. Créez un objet de message représentant le contenu de l'e-mail
3. Créez un objet de transport
4. Lien vers le serveur
5. Envoyer un message
6. Fermez le lien
Étant donné que le transport n'est qu'une classe abstraite, la méthode ts.sendMessage est en fait la méthode sendMessage de la classe d'implémentation SMTPTRansport SMTPTransport .
La méthode sendMessage de SMTPTransport s'appuie sur le protocole SMTP pour envoyer des e-mails.
Par conséquent, lorsque Javamail utilise le service SMTP pour envoyer des e-mails, lorsque vous envoyez l'e-mail au serveur SMTP, vous ne pouvez obtenir que l'état qui a été envoyé à la file d'attente SMTP, mais vous ne pouvez pas l'obtenir si le serveur de messagerie peut l'envoyer avec succès. C'est-à-dire que vous ne pouvez pas garantir que l'e-mail sera envoyé avec succès. Cela dépend de la transmission de contenu du protocole SMTP.
Cependant, si le protocole SMTP échoue, une erreur sera signalée. Le service de transmission de données fiable de SMTP fourni par TCP transmet des messages maillés du serveur de messagerie de l'expéditeur au serveur de messagerie du destinataire.
Nous pouvons donc penser que lorsque nous appelons Javamail pour envoyer des e-mails, si le programme ne signale pas d'erreur, cela signifie que l'e-mail est envoyé avec succès.
Mécanisme de travail SMTP
SMTP a généralement deux modes de travail: l'envoi de SMTP et la réception de SMTP.
La méthode de travail spécifique est: après avoir reçu la demande de courrier électronique de l'utilisateur, il détermine si l'e-mail est un e-mail local. S'il est envoyé directement à l'e-mail de l'utilisateur, sinon, interrogez l'enregistrement MX du serveur de messagerie distant du DNS et établissez un canal de transmission bidirectionnel avec le SMTP à distance. Après cela, la commande SMTP est envoyée par l'envoi SMTP, reçu par la réception SMTP, et la réponse est transmise dans la direction opposée. Une fois le canal de transmission établi, l'expéditeur SMTP envoie une commande de courrier pour indiquer l'expéditeur du courrier. Si le destinataire SMTP peut recevoir le courrier, la réponse OK sera retournée. L'expéditeur SMTP émet alors une commande RCPT pour confirmer si l'e-mail a été reçu. Si le destinataire SMTP le reçoit, il renvoie une réponse OK; S'il ne peut pas être reçu, il envoie une réponse de rejet (mais n'abandonne pas l'intégralité de l'opération de messagerie), et les deux parties le répéteront plusieurs fois. Lorsque le destinataire reçoit tous les e-mails, une séquence spéciale sera reçue. Si le destinataire traite avec succès les e-mails, il renverra une réponse OK.
Processus de travail SMTP
Le protocole de transfert de courrier simple (SMTP) est un protocole de transmission de messagerie textuel qui est utilisé sur Internet pour échanger le courrier entre les serveurs de messagerie. SMTP est un service au niveau de l'application qui peut être adapté à divers systèmes de réseau.
Les commandes et les réponses de SMTP sont toutes basées sur du texte, avec des unités de comportement des commandes, et la nouvelle ligne est CR / LF. Les informations de réponse n'ont généralement qu'une seule ligne, en commençant par un code à 3 chiffres, et une description de texte très courte peut être jointe plus tard.
SMTP doit passer par trois étapes: établir une connexion, livrer du courrier et libérer une connexion. Spécifiquement:
(1) Établir une connexion TCP.
(2) Le client envoie une commande HELO au serveur pour identifier la propre identité de l'expéditeur et le client envoie ensuite une commande de messagerie.
(3) Le serveur répond avec OK, indiquant qu'il est prêt à recevoir.
(4) Le client envoie la commande RCPT.
(5) Le côté serveur indique s'il est disposé à recevoir des e-mails pour le destinataire.
(6) Fin de négociation, envoyer des e-mails et utiliser les données de commande pour envoyer le contenu d'entrée.
(7) terminer cet envoi et quitter avec la commande quit.
Le serveur SMTP crie les e-mails basés sur l'échange de messagerie (MX) dans DNS. Lors de l'envoi d'e-mails, le serveur de messagerie est situé en fonction du suffixe d'adresse du destinataire. SMTP complète les fonctions de modification, de collecte et de lecture des e-mails via l'agent utilisateur (UA); et transmet les e-mails à la destination via l'agent de transfert de courrier (MTA).
Résumer
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article sera d'une aide à votre étude ou à votre travail. Si vous avez des questions, vous pouvez laisser un message pour communiquer.