J'ai créé un formulaire d'inscription en JSP avec un champ de saisie pour l'adresse e-mail. Lorsque l'utilisateur soumet le formulaire, l'utilisateur doit alors recevoir une réponse automatique sur son adresse e-mail. Comment puis-je accomplir cela?
Réponses
Trop de publicités?Réponse automatique ? Désolé, ce terme n'a pas de sens dans ce contexte particulier. Une réponse automatique est plutôt un paramètre sur un serveur de messagerie qui devrait envoyer automatiquement une réponse aux e-mails entrants, par exemple "Merci, votre e-mail a été reçu, votre e-mail sera répondu dans les 24 heures." ou quelque chose. Vous n'en avez pas besoin ici.
Vous voulez simplement envoyer un e-mail de manière programmée. L'e-mail devrait contenir un lien qui devrait activer le compte afin que l'utilisateur puisse se connecter. Vous voyez cela en effet souvent sur d'autres sites web. Voici comment vous pouvez procéder :
-
Configurer/préparer un serveur SMTP. Un serveur SMTP est un serveur de messagerie. Comme un serveur HTTP est un serveur web. Vous pouvez utiliser un existant de votre FAI ou un public comme Gmail. Vous pouvez même mettre en place complètement le vôtre. Par exemple avec Apache James. Quelle que soit la méthode que vous choisissez, vous devriez connaître le nom d'hôte, le numéro de port, le nom d'utilisateur et le mot de passe du serveur SMTP.
-
Créer une classe
Mailer
qui peut prendre au moins les arguments "from", "to", "subject" et "message" et envoie un e-mail en utilisant JavaMail. Connectez-vous et connectez le serveur SMTP par nom d'hôte, numéro de port, nom d'utilisateur et mot de passe. Créez une session de messagerie et envoyez l'e-mail en fonction des arguments donnés. Créez une classe de test factice avec une méthodemain()
qui exécute et teste la classeMailer
. Une fois que vous avez réussi à le faire fonctionner, passez aux étapes suivantes. -
Créez une autre table de base de données
user_activation
avec une clé primairekey
et une clé étrangèreuser_id
faisant référence à la clé primaireid
d'une tableuser
que vous devriez déjà avoir. Sur la tableuser
existante, ajoutez un champ booléen/bitactive
qui est par défautfalse
/0
. -
Lorsque l'enregistrement de l'utilisateur et l'insertion dans la base de données réussissent, obtenez l'identifiant d'insertion de la table
user
, générez une clé longue et unique avecjava.util.UUID
et insérez-les dans la tableuser_activation
. Préparez un message d'e-mail avec un lien d'activation où la clé uniquekey
est incluse en tant que paramètre d'URL ou chemin, puis envoyez ce message en utilisant la classeMailer
que vous avez créée. -
Créez un
Servlet
qui est mappé sur un modèle d'URL correspondant aux liens de clé d'activation, par exemple/activate/*
et extrait la clé d'activation de l'URL. Sélectionnez l'utilisateur associé dans la base de données et s'il en existe, définissez son champactive
surtrue
/1
et supprimez la clé de la tableuser_activation
. -
Lors de la connexion, ne sélectionnez l'utilisateur que lorsque
active=true
ou1
.
Votre question n'est pas très claire. Permettez-moi de clarifier la demande ; vous avez besoin du code pour envoyer un email à l'utilisateur uniquement lors de l'inscription réussie. correct ?
Dans votre servlet (qui est invoqué lors de l'action de soumission),
if(l'entrée de l'utilisateur est valide){
Étape 1 : registerUser();
Étape 2 : send confirmationEmail();
} else {
Étape 3 : Cas d'exception
}
La méthode d'envoi d'email enverrait idéalement la demande à une file d'attente JMS pour envoyer l'email à l'utilisateur souhaité. Voici un extrait pour envoyer un email.
//Code java d'exemple pour envoyer un email
public void sendEmail(){
try{
Properties props = null;
if (props == null) {
props = System.getProperties();
}
props.put("mail.smtp.host", "");
Session session = Session.getInstance(props, null);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(""));
message.addRecipients(Message.RecipientType.CC, "");
message.setSubject("");
message.setContent("", "text/plain");
Transport.send(message);
logger.info("Email envoyé :" +
"De :" + message.getFrom() +
"À :" + message.getAllRecipients() +
"Objet :" + message.getSubject() );
} catch(Exception ex){
ex.printStackTrace();
}
}