Implémenter l'envoi d'e-mails en Java

introduction

Je voulais réinitialiser le mot de passe dans le projet Spring Boot, mais c'est un mémorandum que j'ai essayé de voir si je pouvais envoyer le mot de passe initialisé par e-mail.

Tout d'abord, le réglage de l'environnement

L'environnement est IDE:Eclipse ** Version: Java8, springframework.boot version 2.3.0 **

De plus, un serveur SMTP est nécessaire pour envoyer du courrier, mais il semble qu'il ne puisse pas être envoyé localement, donc cette fois j'utiliserai facilement le SMTP de Google.

construisez ce dont vous avez besoin pour construire gradle

build.gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-mail'
    // https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
    //Commons pour la génération aléatoire de chaînes de mots de passe-Compiler lang3
    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.10'
}

application.propeties

<!--Paramètres Gmailsmtp-->
spring.mail.host=smtp.gmail.com
spring.mail.port=587

<!--Paramètres SMTP locaux-->
<!-- spring.mail.host=localhost -->
<!-- spring.mail.port=25 -->

spring.mail.username=*****@*****
spring.mail.password=******
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

Entrez l'adresse e-mail de l'expéditeur dans le nom d'utilisateur et le mot de passe du compte Google avec cette adresse e-mail dans le mot de passe. Comme mentionné dans le commentaire, ** Si vous êtes dans un environnement local, définissez host sur localhost et entrez le numéro de port par défaut **.

Créer une vue et un contrôleur

Créez un formulaire d'entrée qui spécifie la méthode de publication en html. Si vous entrez une adresse e-mail et appuyez sur le bouton d'envoi, un e-mail sera envoyé à cette adresse. (Comme ce n'est pas la ligne principale, elle est omise)

Controller

import org.apache.commons.lang3.RandomStringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import com.example.demo.entity.User;
import com.example.demo.service.UserService;

@Controller
@RequestMapping("passReset")
public class PassResetController {
	@Autowired
	private UserService userService;
	@Autowired
	private MailSender mailSender;

	@GetMapping
	public ModelAndView passResetPage(ModelAndView mav) {
		return mav;
	}

	@PostMapping
	public ModelAndView passResetSend(@RequestParam(name = "email") String email,
																User user,
																ModelAndView mav) {
		SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setTo(email);
        user = userService.findUserByEmail(email);
        if (user == null) {
        	simpleMailMessage.setTo(email);
        	simpleMailMessage.setSubject("Notification de réinitialisation du mot de passe");
            simpleMailMessage.setText("**Est un service\n\r\n\r" + email + "\n\r\n\r Ce compte n'existe pas");
            this.mailSender.send(simpleMailMessage);
			mav.setViewName("redirect:login");
			return mav;
        }
        String password = RandomStringUtils.randomAscii(8);;
        userService.accountEdit(user.getEmail(), password);
        simpleMailMessage.setTo(email);
        simpleMailMessage.setSubject("Notification de réinitialisation du mot de passe");
        simpleMailMessage.setText("**Est un service\n\r\n\r" + email + "\n\r\n\r Vous avez réinitialisé le mot de passe de ce compte.\n\r\n\Réinitialiser le mot de passe:" + password + "\n\r\n\r Une fois connecté, veuillez réinitialiser vous-même le mot de passe.");
        this.mailSender.send(simpleMailMessage);
        mav.setViewName("redirect:login");
		return mav;
	}
}

Ce que vous faites avec la méthode de publication

  1. Accédez à la base de données avec l'adresse e-mail envoyée depuis view et recherchez les utilisateurs
  2. Si l'utilisateur n'existe pas, indiquez dans le corps de l'e-mail que le compte n'existe pas
  3. Si un utilisateur existe, générez un mot de passe de manière aléatoire (RandomStringutils.randomAscii) et modifiez le mot de passe de l'utilisateur dans la base de données
  4. Entrez le mot de passe modifié en texte brut dans le corps de l'e-mail

Cela devient le flux de.

Notes sur cette implémentation

En fait, il serait préférable d'utiliser UUID au lieu de RandomStringUtils pour la sécurité, mais compte tenu de la gestion des symboles, etc., j'ai pensé que StringUtils serait plus facile, alors j'ai utilisé ceci. De plus, si vous avez configuré l'authentification en deux étapes avec votre compte Google, vous ne pourrez pas vous connecter à l'application, vous devez donc la désactiver à l'avance.

Résumé

Et, comme ça, c'est une merde en termes de sécurité, mais je pense que j'ai réussi à saisir le flux. Je l'ai essayé sur un serveur SMTP local, mais j'ai pu vérifier le courrier envoyé au serveur de la même manière (bien que les paramètres soient légèrement différents), j'ai donc pensé qu'il s'agissait d'une plage réaliste dans l'environnement local. C'était.

Recommended Posts

Implémenter l'envoi d'e-mails en Java
Implémentation de l'authentification en deux étapes en Java
Implémenter l'authentification de base en Java
Implémenter un tri rapide de type fonction en Java
Implémentez rm -rf en Java.
Implémenter la signature XML en Java
Implémenter un test piloté par table dans Java 14
J'ai envoyé un e-mail en Java
Implémenter reCAPTCHA v3 dans Java / Spring
Implémenter la fonction PHP implode en Java
Essayez d'implémenter Yuma en Java
1 Implémentez une analyse de phrase simple en Java
Comment implémenter le filtre de Kalman par Java
Implémenter l'autorisation API Gateway Lambda dans Java Lambda
Partition en Java
Essayez d'implémenter l'ajout n-aire en Java
Changements dans Java 11
Janken à Java
Implémenter quelque chose comme une pile en Java
Taux circonférentiel à Java
FizzBuzz en Java
Je souhaite envoyer un e-mail en Java.
Envoyer des e-mails à l'aide d'Amazon SES SMTP en Java
Lire JSON en Java
Implémentation de l'interpréteur par Java
Faites un blackjack avec Java
Application Janken en Java
Programmation par contraintes en Java
Mettez java8 dans centos7
NVL-ish guy en Java
Joindre des tableaux en Java
"Hello World" en Java
Commentaires dans la source Java
Fonctions Azure en Java
Formater XML en Java
Simple htmlspecialchars en Java
Implémentation Boyer-Moore en Java
Hello World en Java
Utiliser OpenCV avec Java
Détermination de type en Java
Divers threads en java
Implémentation du tri de tas (en java)
API Zabbix en Java
Art ASCII à Java
Comparer des listes en Java
POST JSON en Java
Exprimer l'échec en Java
Implémenter CustomView dans le code
Créer JSON en Java
Manipulation de la date dans Java 8
Nouveautés de Java 8
Utiliser PreparedStatement en Java
Nouveautés de Java 9,10,11
Exécution parallèle en Java
Markdown implémenté dans Rails
Écrivez ABNF en Java et transmettez l'adresse e-mail
J'ai essayé d'implémenter la notification push Firebase en Java
Implémentez rapidement singleton avec enum en Java