API JavaMail - Serveurs SMTP

SMTP est un acronyme pour Simple Mail Transfer Protocol. Il s'agit d'une norme Internet pour la transmission de courrier électronique (e-mail) sur les réseaux IP (Internet Protocol). SMTP utilise le port TCP 25. Les connexions SMTP sécurisées par SSL sont connues par le raccourci SMTPS, bien que SMTPS ne soit pas un protocole à part entière.

L'API JavaMail a un package com.sun.mail.smtpqui agissent en tant que fournisseur de protocole SMTP pour accéder à un serveur SMTP. Le tableau suivant répertorie les classes incluses dans ce package:

Classe La description
SMTPMessage Cette classe est une spécialisation de la classe MimeMessage qui vous permet de spécifier diverses options et paramètres SMTP qui seront utilisés lorsque ce message est envoyé via SMTP.
SMTPSSLTransport Cette classe implémente la classe abstraite Transport en utilisant SMTP sur SSL pour la soumission et le transport des messages.
SMTPTransport Cette classe implémente la classe abstraite Transport en utilisant SMTP pour la soumission et le transport des messages.

Le tableau suivant répertorie les exceptions levées:

Exception La description
SMTPAddressFailedException Cette exception est levée lorsque le message ne peut pas être envoyé.
SMTPAddressSucceededException Cette exception est enchaînée à partir d'une SendFailedException lorsque la propriété mail.smtp.reportsuccess a la valeur true.
SMTPSenderFailedException Cette exception est levée lorsque le message ne peut pas être envoyé.
SMTPSendFailedException Cette exception est levée lorsque le message ne peut pas être envoyé. L'exception inclut l'adresse de l'expéditeur, que le serveur de messagerie a rejetée.

le com.sun.mail.smtple fournisseur utilise l'authentification SMTP en option. Pour utiliser l'authentification SMTP, vous devez définir la propriété mail.smtp.auth ou fournir au transport SMTP un nom d'utilisateur et un mot de passe lors de la connexion au serveur SMTP. Vous pouvez le faire en utilisant l'une des approches suivantes:

  • Fournissez un objet Authenticator lors de la création de votre session de messagerie et fournissez les informations de nom d'utilisateur et de mot de passe lors du rappel de l'Authenticator. La propriété mail.smtp.user peut être définie pour fournir un nom d'utilisateur par défaut pour le rappel, mais le mot de passe devra toujours être fourni explicitement. Cette approche vous permet d'utiliser la méthode statique d'envoi de transport pour envoyer des messages. Par exemple:

  • Transport.send(message);
  • Appelez la méthode de connexion de transport explicitement avec des arguments de nom d'utilisateur et de mot de passe. Par exemple:

    Transport tr = session.getTransport("smtp");
    tr.connect(smtphost, username, password);
    msg.saveChanges();
    tr.sendMessage(msg, msg.getAllRecipients());
    tr.close();

Le fournisseur de protocole SMTP prend en charge les propriétés suivantes, qui peuvent être définies dans l'objet Session JavaMail. Les propriétés sont toujours définies sous forme de chaînes. Par exemple:

props.put("mail.smtp.port", "587");

Ici le Type La colonne décrit comment la chaîne est interprétée.

Nom Type La description
mail.smtp.user Chaîne Nom d'utilisateur par défaut pour SMTP.
mail.smtp.host Chaîne Le serveur SMTP auquel se connecter.
mail.smtp.port int Le port du serveur SMTP auquel se connecter, si la méthode connect () n'en spécifie pas explicitement un. La valeur par défaut est 25.
mail.smtp.connectiontimeout int Valeur du délai d'expiration de la connexion au socket en millisecondes. La valeur par défaut est le délai d'expiration infini.
mail.smtp.timeout int Valeur du délai d'expiration d'E / S de socket en millisecondes. La valeur par défaut est le délai d'expiration infini.
mail.smtp.from Chaîne Adresse e-mail à utiliser pour la commande SMTP MAIL. Cela définit l'adresse de retour de l'enveloppe. La valeur par défaut est msg.getFrom () ou InternetAddress.getLocalAddress ().
mail.smtp.localhost Chaîne Nom d'hôte local utilisé dans la commande SMTP HELO ou EHLO. La valeur par défaut est InetAddress.getLocalHost (). GetHostName (). Ne devrait normalement pas avoir besoin d'être défini si votre JDK et votre service de noms sont configurés correctement.
mail.smtp.localaddress Chaîne Adresse locale (nom d'hôte) à laquelle se connecter lors de la création du socket SMTP. Par défaut, l'adresse sélectionnée par la classe Socket. Ne devrait normalement pas avoir besoin d'être défini.
mail.smtp.localport int Numéro de port local auquel se connecter lors de la création du socket SMTP. Par défaut, le numéro de port choisi par la classe Socket.
mail.smtp.ehlo booléen S'il est faux, n'essayez pas de vous connecter avec la commande EHLO. La valeur par défaut est true.
mail.smtp.auth booléen Si vrai, essayez d'authentifier l'utilisateur à l'aide de la commande AUTH. La valeur par défaut est false.
mail.smtp.auth.mechanisms Chaîne S'il est défini, répertorie les mécanismes d'authentification à prendre en compte. Seuls les mécanismes pris en charge par le serveur et pris en charge par l'implémentation actuelle seront utilisés. La valeur par défaut est "LOGIN PLAIN DIGEST-MD5 NTLM", qui inclut tous les mécanismes d'authentification pris en charge par l'implémentation actuelle.
mail.smtp.auth.login.disable booléen Si vrai, empêche l'utilisation de la commande AUTH LOGIN. La valeur par défaut est false.
mail.smtp.auth.plain.disable booléen Si vrai, empêche l'utilisation de la commande AUTH PLAIN. La valeur par défaut est false.
mail.smtp.auth.digest-md5.disable booléen Si vrai, empêche l'utilisation de la commande AUTH DIGEST-MD5. La valeur par défaut est false.
mail.smtp.auth.ntlm.disable booléen Si vrai, empêche l'utilisation de la commande AUTH NTLM. La valeur par défaut est false.
mail.smtp.auth.ntlm.domain Chaîne Le domaine d'authentification NTLM.
mail.smtp.auth.ntlm.flags int Indicateurs spécifiques au protocole NTLM.
mail.smtp.submitter Chaîne L'émetteur à utiliser dans la balise AUTH de la commande MAIL FROM. Généralement utilisé par un relais de messagerie pour transmettre des informations sur l'expéditeur d'origine du message.
mail.smtp.dsn.notify Chaîne L'option NOTIFY de la commande RCPT. Soit JAMAIS, soit une combinaison de SUCCÈS, D'ÉCHEC et DE RETARD (séparés par des virgules).
mail.smtp.dsn.ret Chaîne L'option RET de la commande MAIL. Soit FULL, soit HDRS.
mail.smtp.sendpartial booléen Si défini sur true et qu'un message a des adresses valides et des adresses non valides, envoyez le message quand même, en signalant l'échec partiel avec une SendFailedException. S'il est défini sur false (valeur par défaut), le message n'est envoyé à aucun des destinataires s'il existe une adresse de destinataire non valide.
mail.smtp.sasl.enable booléen S'il est défini sur true, essayez d'utiliser le package javax.security.sasl pour choisir un mécanisme d'authentification pour la connexion. La valeur par défaut est false.
mail.smtp.sasl.mechanisms Chaîne Une liste de noms de mécanismes SASL séparés par des espaces ou des virgules à essayer d'utiliser.
mail.smtp.sasl.authorizationid Chaîne ID d'autorisation à utiliser dans l'authentification SASL. S'il n'est pas défini, l'ID d'authentification (nom d'utilisateur) est utilisé.
mail.smtp.sasl.realm Chaîne Le domaine à utiliser avec l'authentification DIGEST-MD5.
mail.smtp.quitwait booléen S'il est défini sur false, la commande QUIT est envoyée et la connexion est immédiatement fermée. S'il est défini sur true (valeur par défaut), le transport attend la réponse à la commande QUIT.
mail.smtp.reportsuccess booléen S'il est défini sur true, le transport inclut une exception SMTPAddressSucceededException pour chaque adresse réussie.
mail.smtp.socketFactory Usine de douilles Si elle est définie sur une classe qui implémente l'interface javax.net.SocketFactory, cette classe sera utilisée pour créer des sockets SMTP.
mail.smtp.socketFactory.class Chaîne S'il est défini, spécifie le nom d'une classe qui implémente l'interface javax.net.SocketFactory. Cette classe sera utilisée pour créer des sockets SMTP.
mail.smtp.socketFactory.fallback booléen S'il est défini sur true, l'échec de la création d'un socket à l'aide de la classe d'usine de socket spécifiée entraînera la création du socket à l'aide de la classe java.net.Socket. La valeur par défaut est true.
mail.smtp.socketFactory.port int Spécifie le port auquel se connecter lors de l'utilisation de la fabrique de sockets spécifiée. S'il n'est pas défini, le port par défaut sera utilisé.
mail.smtp.ssl.enable booléen S'il est défini sur true, utilisez SSL pour vous connecter et utilisez le port SSL par défaut. La valeur par défaut est false pour le protocole "smtp" et true pour le protocole "smtps".
mail.smtp.ssl.checkserveridentity booléen S'il est défini sur true, vérifie l'identité du serveur comme spécifié par RFC 2595. La valeur par défaut est false.
mail.smtp.ssl.trust Chaîne S'il est défini et qu'aucune fabrique de sockets n'a été spécifiée, permet l'utilisation d'un MailSSLSocketFactory.
S'il est défini sur "*", tous les hôtes sont approuvés.
S'il est défini sur une liste d'hôtes séparés par des espaces, ces hôtes sont approuvés.
Sinon, la confiance dépend du certificat présenté par le serveur.
mail.smtp.ssl.socketFactory Usine de sockets SSL Si elle est définie sur une classe qui étend la classe javax.net.ssl.SSLSocketFactory, cette classe sera utilisée pour créer des sockets SSL SMTP.
mail.smtp.ssl.socketFactory.class Chaîne S'il est défini, spécifie le nom d'une classe qui étend la classe javax.net.ssl.SSLSocketFactory. Cette classe sera utilisée pour créer des sockets SSL SMTP.
mail.smtp.ssl.socketFactory.port int Spécifie le port auquel se connecter lors de l'utilisation de la fabrique de sockets spécifiée. S'il n'est pas défini, le port par défaut sera utilisé.
mail.smtp.ssl.protocols chaîne Spécifie les protocoles SSL qui seront activés pour les connexions SSL. La valeur de la propriété est une liste séparée par des espaces de jetons acceptables pour la méthode javax.net.ssl.SSLSocket.setEnabledProtocols.
mail.smtp.starttls.enable booléen Si la valeur est true, active l'utilisation de la commande STARTTLS (si prise en charge par le serveur) pour basculer la connexion vers une connexion protégée par TLS avant d'émettre des commandes de connexion. La valeur par défaut est false.
mail.smtp.starttls.required booléen Si vrai, nécessite l'utilisation de la commande STARTTLS. Si le serveur ne prend pas en charge la commande STARTTLS ou si la commande échoue, la méthode de connexion échouera. La valeur par défaut est false.
mail.smtp.socks.host chaîne Spécifie le nom d'hôte d'un serveur proxy SOCKS5 qui sera utilisé pour les connexions au serveur de messagerie.
mail.smtp.socks.port chaîne Spécifie le numéro de port du serveur proxy SOCKS5. Cela ne devrait être utilisé que si le serveur proxy n'utilise pas le numéro de port standard de 1080.
mail.smtp.mailextension Chaîne Chaîne d'extension à ajouter à la commande MAIL.
mail.smtp.userset booléen Si la valeur est true, utilisez la commande RSET au lieu de la commande NOOP dans la méthode isConnected. Dans certains cas, sendmail répondra lentement après de nombreuses commandes NOOP; l'utilisation de RSET évite ce problème de sendmail. La valeur par défaut est false.

En général, les applications ne devraient pas avoir besoin d'utiliser directement les classes de ce package. Au lieu de cela, ils doivent utiliser les API définies par le package javax.mail (et les sous-packages). Disons, par exemple, que les applications ne doivent jamais construire directement des instances de SMTPTransport. Au lieu de cela, ils doivent utiliser la méthode Session getTransport pour acquérir un objet Transport approprié.

Des exemples d'utilisation du serveur SMPT sont présentés dans le chapitre Envoi d'emails .