Docker 환경의 MailDev에서 SMTP 인증하기
소개
메일 전송은 Sendmail/SMTP 둘 다를 지원해야 합니다.
그리고 SMTP 배달을 사용하는 경우 SMTP Auth를 사용하여 인증을 사용하는 것이 필수적입니다.
이 때문에 SMTP Auth의 개발·테스트 환경을 만들어 갑니다.
마지막으로 작성한 Docker로 PHP-alpine 메일 전송 테스트(SMTP/sendmail) 환경 구축을 기반으로 step10-php5-xdebug-redis-mail3로 작성합니다.
TL;DR
GitHub의 샘플 코드 Step10을 참조하십시오.
step10-php5-xdebug-redis-mail3
MailDev의 SMTP Auth 지원
SMTP Auth에 대한 대응은 MailDev의 Usage에 쓰여져 있습니다.
MailDev의 기동 옵션에, 「--incoming-user」와「--incoming-pass」를 붙이면 좋다고 합니다.
maildev [options]
-h, --help output usage information
-V, --version output the version number
-s, --smtp <port> SMTP port to catch emails [1025]
-w, --web <port> Port to run the Web GUI [1080]
・・・省略・・・
--incoming-user <user> SMTP user for incoming emails
--incoming-pass <pass> SMTP password for incoming emails
・・・省略・・・
-o, --open Open the Web GUI after startup
-v, --verbose
--silent
여기까지는 알겠습니다만, 그럼, Docker로서는 어떻게 하면 좋을까? 되었습니다.
MailDev의 DockerHub에 나열된 Dockerfile 를 보면, 마지막에 「CMD ["bin/maildev", "--web", "80", "--smtp", "25"]」라고 하는 기재가 있습니다.
MailDev의 기본 DockerfileFROM node:6-alpine
MAINTAINER "Dan Farrelly <[email protected]>"
ENV NODE_ENV production
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ADD package.json /usr/src/app/
RUN npm install && \
npm prune && \
npm cache clean \
rm -rf /tmp/*
ADD . /usr/src/app/
EXPOSE 80 25
CMD ["bin/maildev", "--web", "80", "--smtp", "25"]
여기를 다시 써서 Image를 재작성할까? 라고도 생각했습니다.
추가 조사를 통해 docker-compose.yml에서 command라는 형식으로 지정할 수 있음을 발견했습니다.
GitHub의 샘플 코드 Step10을 참조하십시오.
step10-php5-xdebug-redis-mail3
MailDev의 SMTP Auth 지원
SMTP Auth에 대한 대응은 MailDev의 Usage에 쓰여져 있습니다.
MailDev의 기동 옵션에, 「--incoming-user」와「--incoming-pass」를 붙이면 좋다고 합니다.
maildev [options]
-h, --help output usage information
-V, --version output the version number
-s, --smtp <port> SMTP port to catch emails [1025]
-w, --web <port> Port to run the Web GUI [1080]
・・・省略・・・
--incoming-user <user> SMTP user for incoming emails
--incoming-pass <pass> SMTP password for incoming emails
・・・省略・・・
-o, --open Open the Web GUI after startup
-v, --verbose
--silent
여기까지는 알겠습니다만, 그럼, Docker로서는 어떻게 하면 좋을까? 되었습니다.
MailDev의 DockerHub에 나열된 Dockerfile 를 보면, 마지막에 「CMD ["bin/maildev", "--web", "80", "--smtp", "25"]」라고 하는 기재가 있습니다.
MailDev의 기본 DockerfileFROM node:6-alpine
MAINTAINER "Dan Farrelly <[email protected]>"
ENV NODE_ENV production
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ADD package.json /usr/src/app/
RUN npm install && \
npm prune && \
npm cache clean \
rm -rf /tmp/*
ADD . /usr/src/app/
EXPOSE 80 25
CMD ["bin/maildev", "--web", "80", "--smtp", "25"]
여기를 다시 써서 Image를 재작성할까? 라고도 생각했습니다.
추가 조사를 통해 docker-compose.yml에서 command라는 형식으로 지정할 수 있음을 발견했습니다.
maildev [options]
-h, --help output usage information
-V, --version output the version number
-s, --smtp <port> SMTP port to catch emails [1025]
-w, --web <port> Port to run the Web GUI [1080]
・・・省略・・・
--incoming-user <user> SMTP user for incoming emails
--incoming-pass <pass> SMTP password for incoming emails
・・・省略・・・
-o, --open Open the Web GUI after startup
-v, --verbose
--silent
FROM node:6-alpine
MAINTAINER "Dan Farrelly <[email protected]>"
ENV NODE_ENV production
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ADD package.json /usr/src/app/
RUN npm install && \
npm prune && \
npm cache clean \
rm -rf /tmp/*
ADD . /usr/src/app/
EXPOSE 80 25
CMD ["bin/maildev", "--web", "80", "--smtp", "25"]
Docker Compose file reference
step10의 docker-compose.yml을 다음과 같이 다시 작성합니다.
SMTP AUTH의 ID/PW는 변경될 가능성이 있으므로 환경 변수 지정으로 합니다.
docker-compose.yml
version: '3'
services:
・・・省略・・・
maildev:
image: kanemu/maildev-with-iconv
command: bin/maildev -w 80 -s 25 --incoming-user ${SMTP_USER} --incoming-pass ${SMTP_PASSWORD}
ports:
- "1025:25"
- "8025:80"
・・・省略・・・
.env 파일에 ID/PW를 추가합니다.
.env
MYSQL_RANDOM_ROOT_PASSWORD=yes
MYSQL_DATABASE=step3
MYSQL_USER=db_user
MYSQL_PASSWORD=password
# REDIS関係
REDIS_PORT=6379
REDIS_PASSWORD=password
# Mail <-ここ
SMTP_USER=smtpuser
SMTP_PASSWORD=password
다음으로 sendmail의 역할을 담당하는 ssmtp.conf에도 SMTP Auth 설정을 추가합니다.
덧붙여서, 직접 기술하고 있습니다만, 환경 변수로 지정을 할 수 있으면 좋겠습니다만, 좋은 방법은 없을까요?
음, 최종 수단으로서 .env를 보고 ssmtp.conf를 생성하는 스크립트를 작성하면 됩니다만. . .
app/ssmtp.conf
root=postmaster
mailhub=maildev:25
hostname=app
FromLineOverride=YES
AuthUser=smtpuser
AuthPass=password
AuthMethod=LOGIN
마지막으로 샘플 파일인 index.php의 SMTP 전송 부분을 다시 씁니다.
sendmail의 분은, SMTP Auth를 ssmtp가 대응해 주었으므로, 수정은 없습니다.
data/html/index.php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
// Load Composer's autoloader
require 'vendor/autoload.php';
// Instantiation and passing `true` enables exceptions
$mail = new PHPMailer;
try {
//Server settings
echo '<pre class="log">';
echo 'SMTPでメール配信' . PHP_EOL;
$mail->SMTPDebug = 2; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'maildev'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = getenv('SMTP_USER'); // SMTP username
$mail->Password = getenv('SMTP_PASSWORD'); // SMTP password
$mail->SMTPSecure = false; // Enable TLS encryption, `ssl` also accepted
$mail->SMTPAutoTLS = false;
$mail->Port = 25; // TCP port to connect to
//Recipients
$mail->setFrom('[email protected]', mb_encode_mimeheader('日本語送信者名SMTP AUTH'));
$mail->addAddress('[email protected]', mb_encode_mimeheader('日本語受信者名SMTP AUTH')); // Add a recipient
테스트
127.0.0.1에 액세스하면 SMTP/Sendmail에서 메일이 한 번씩 전송됩니다.
127.0.0.1:8025에 액세스를 하고, 2통의 메일의 수신을 할 수 있으면 OK입니다.
요약
이것으로 일반 메일의 테스트에 대응할 수 있다고 생각합니다.
Reference
이 문제에 관하여(Docker 환경의 MailDev에서 SMTP 인증하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/idani/items/ed363e9fdc97d79d4b47
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이것으로 일반 메일의 테스트에 대응할 수 있다고 생각합니다.
Reference
이 문제에 관하여(Docker 환경의 MailDev에서 SMTP 인증하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/idani/items/ed363e9fdc97d79d4b47텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)