개발 테스트를 위해 더미 이메일 주소를 사용하여 송수신 확인

환경



java8
Spring Boot2.4.0
Eclipse2020-12

목적



수주 시스템을 개발하고 있어, 발주시에 「시스템 메일을 송신해 통지하는 기능」을 구현하려고 했지만, 유저의 메일 주소는 모두 더미의 메일 주소. 동작 확인할 수 있도록 실제로 유효한 주소를 사용하는 편이 좋을지도 모릅니다만, 메일의 송신 자체는 시스템으로부터 온리가 되므로, 수신의 확인은 하지 않아도 된다. 설정 여러가지 송신측에서 좋을 것이므로, 텍토 주소로 「시스템으로부터의 알림입니다!」같은 메시지를 보내고 싶다. 어서 어때? ? 되어 미주하고 있었습니다.

우선 메일 서버 첨부의 렌탈 서버를 계약해 시스템 메일의 계정은 만들었지만,

「더미의 메일 주소로 보내도 에러다구나・・・」

라고 생각하면서 실행하면 당연히 에러.

그런 때에 발견한 것이 FakeSMTP였습니다.

사용한 도구



FakeSMTP
h tp //에 lh m. 코 m/후우케 SMTP/# 에서 다운로드.
다운로드

C 드라이브 바로 아래로 확장하고 java -jar로 실행.
이것으로 FakeSMTP가 일어난다.



설정


ホスト名: localhost
ポート番号: 25

포트 번호는 「청취 포트」를 괴롭히면 바꿀 수 있다고는 생각합니다(자신은 하고 있지 않습니다만, 뭐 할 수 있겠지요.)

롤리팝의 SMTP 서버 설정이라면, 관리 화면에는 465라고 적혀 있지만, 587이 아니면 잘 전송할 수 없었습니다. 무슨 일이야? ?

TLS 라든지 SSL 라든지가 관계해 오는 것일지도 모릅니다만, 거기까지 나는 모릅니다 변경하면 제출할 수 있었습니다. 무슨・・・? ?

구현



application.properties
spring.mail.port=25
spring.mail.host=localhost

EmailConfig.java
package com.example.home.mail;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import lombok.Data;

@Component
@Data
public class EmailConfig {
    @Value("${spring.mail.host}")
    private String host; // ここにプロパティファイルのホストの値が格納される

    @Value("${spring.mail.port}")
    private String port; // ここにプロパティファイルのポート番号の値が格納される
}

MailUtil.java
package com.example.home.mail;

import java.util.Date;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MailUtil {

    @Autowired
    private EmailConfig emailConfig;

    public void sendEmail(String to) {

        Properties props = new Properties();
        props.setProperty("mail.smtp.host", emailConfig.getHost());
        props.setProperty("mail.smtp.port", emailConfig.getPort());
        Session session = Session.getInstance(props, new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(emailConfig.getUsername(), emailConfig.getPassword());
            }
        });
        try {
            // Messageオブジェクト作成
            Message msg = new MimeMessage(session);
            // Fromヘッダーフィールドを設定
            msg.setFrom(new InternetAddress(emailConfig.getUsername()));
            msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false));
            // 件名を設定
            msg.setSubject("Javax.Mail test");
            // 送信された日付を取得
            msg.setSentDate(new Date());
            // text/plainのmimeタイプをコンテンツとして設定
            msg.setText("MimeMessageのテストです");

            Transport.send(msg);

        } catch (AddressException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
}

이제 sendEmail 메소드를 어딘가에서 호출하면 제대로 FakeSMTP에 로그가 출력되었으므로 더미 주소로 전송을 시도하고있는 것을 알았습니다.

좋은 웹페이지 즐겨찾기