Implementieren Sie das Senden von E-Mails in Java

Einführung

Ich wollte das Passwort im Spring Boot-Projekt zurücksetzen, aber es ist ein Memorandum, in dem ich versucht habe, das initialisierte Passwort per E-Mail zu senden.

Zunächst die Umgebungseinstellung

Die Umwelt ist IDE:Eclipse ** Version: Java8, springframework.boot Version 2.3.0 **

Außerdem ist ein SMTP-Server erforderlich, um E-Mails zu senden, aber es scheint, dass diese nicht lokal gesendet werden können. Daher werde ich dieses Mal problemlos SMTP von Google verwenden.

Bauen Sie, was Sie für den Bau von Gradle benötigen

build.gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-mail'
    // https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
    //Commons zum zufälligen Generieren von Passwortzeichenfolgen-Kompiliere lang3
    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.10'
}

application.propeties

<!--Gmailsmtp-Einstellungen-->
spring.mail.host=smtp.gmail.com
spring.mail.port=587

<!--Lokale SMTP-Einstellungen-->
<!-- 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

Geben Sie die E-Mail-Adresse des Absenders in den Benutzernamen und das Passwort des Google-Kontos mit dieser E-Mail-Adresse in das Passwort ein. Wie im Kommentar erwähnt, ** Wenn Sie sich in einer lokalen Umgebung befinden, setzen Sie den Host auf localhost und geben Sie die Standardportnummer ** ein.

Ansicht und Controller erstellen

Erstellen Sie ein Eingabeformular, das die Post-Methode in HTML angibt. Wenn Sie eine E-Mail-Adresse eingeben und auf die Schaltfläche "Senden" klicken, wird eine E-Mail an diese Adresse gesendet. (Da es nicht die Hauptleitung ist, wird es weggelassen)

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("Benachrichtigung über das Zurücksetzen des Passworts");
            simpleMailMessage.setText("**Ist ein Service\n\r\n\r" + email + "\n\r\n\r Dieses Konto existiert nicht");
            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("Benachrichtigung über das Zurücksetzen des Passworts");
        simpleMailMessage.setText("**Ist ein Service\n\r\n\r" + email + "\n\r\n\r Sie haben das Passwort für dieses Konto zurückgesetzt.\n\r\n\r Passwort zurücksetzen:" + password + "\n\r\n\r Bitte setzen Sie das Passwort nach dem Einloggen selbst zurück.");
        this.mailSender.send(simpleMailMessage);
        mav.setViewName("redirect:login");
		return mav;
	}
}

Was Sie mit der Post-Methode machen

  1. Greifen Sie mit der aus der Ansicht gesendeten E-Mail-Adresse auf die Datenbank zu und suchen Sie nach Benutzern
  2. Wenn der Benutzer nicht vorhanden ist, geben Sie im Text der E-Mail an, dass das Konto nicht vorhanden ist
  3. Wenn ein Benutzer vorhanden ist, generieren Sie zufällig ein Kennwort (RandomStringutils.randomAscii) und ändern Sie das Kennwort des Benutzers in der Datenbank
  4. Geben Sie das geänderte Passwort im Klartext in den Text der E-Mail ein

Es wird der Fluss von.

Hinweise zu dieser Implementierung

Eigentlich wäre es aus Sicherheitsgründen besser, UUID anstelle von RandomStringUtils zu verwenden, aber angesichts des Umgangs mit Symbolen usw. dachte ich, dass StringUtils einfacher wäre, also habe ich dies verwendet. Wenn Sie mit Ihrem Google-Konto eine zweistufige Authentifizierung eingerichtet haben, können Sie sich nicht bei der Anwendung anmelden. Sie müssen diese daher im Voraus deaktivieren.

Zusammenfassung

Mit dieser Art von Gefühl ist Sicherheit unangenehm, aber ich glaube, ich habe es geschafft, den Fluss zu erfassen. Ich habe es auch auf einem lokalen SMTP-Server versucht, aber ich konnte die an den Server gesendeten E-Mails auf die gleiche Weise überprüfen (obwohl die Einstellungen geringfügig abweichen), sodass ich der Meinung war, dass dies ein realistischer Bereich in der lokalen Umgebung ist. Es war.

Recommended Posts

Implementieren Sie das Senden von E-Mails in Java
Implementierung der zweistufigen Authentifizierung in Java
Implementieren Sie die Standardauthentifizierung in Java
Implementieren Sie eine funktionsähnliche schnelle Sortierung in Java
Implementieren Sie rm -rf in Java.
Implementieren Sie die XML-Signatur in Java
Implementieren Sie einen tabellengesteuerten Test in Java 14
Ich habe eine E-Mail in Java gesendet
Implementieren Sie reCAPTCHA v3 in Java / Spring
Implementieren Sie die PHP-Implodierungsfunktion in Java
Versuchen Sie, Yuma in Java zu implementieren
1 Implementieren Sie eine einfache Phrasenanalyse in Java
So implementieren Sie den Kalman-Filter mit Java
Implementieren Sie API Gateway Lambda Authorizer in Java Lambda
Partisierung in Java
Versuchen Sie, n-ary Addition in Java zu implementieren
Änderungen in Java 11
Janken in Java
Implementieren Sie so etwas wie einen Stack in Java
Umfangsrate in Java
FizzBuzz in Java
Ich möchte eine E-Mail in Java senden.
Senden Sie E-Mails mit Amazon SES SMTP in Java
Lesen Sie JSON in Java
Interpreter-Implementierung durch Java
Machen Sie einen Blackjack mit Java
Janken App in Java
Einschränkungsprogrammierung in Java
Setzen Sie Java8 in Centos7
NVL-artiger Typ in Java
Verbinden Sie Arrays in Java
"Hallo Welt" in Java
Kommentare in der Java-Quelle
Azure funktioniert in Java
Formatieren Sie XML in Java
Einfache HTML-Spezialchars in Java
Boyer-Moore-Implementierung in Java
Hallo Welt in Java
Verwenden Sie OpenCV mit Java
Typbestimmung in Java
Verschiedene Threads in Java
Implementierung der Heap-Sortierung (in Java)
Zabbix API in Java
ASCII-Kunst in Java
Listen in Java vergleichen
POST JSON in Java
Fehler in Java ausdrücken
Implementieren Sie CustomView im Code
Erstellen Sie JSON in Java
Datumsmanipulation in Java 8
Was ist neu in Java 8?
Verwenden Sie PreparedStatement in Java
Was ist neu in Java 9,10,11
Parallele Ausführung in Java
Markdown in Rails implementiert
Schreiben Sie ABNF in Java und geben Sie die E-Mail-Adresse weiter
Ich habe versucht, die Firebase-Push-Benachrichtigung in Java zu implementieren
Implementieren Sie Singleton mit Enum schnell in Java