docker-compose で、メールをTLS1.2でpostfixに送信して、それをMailCatcherにリレーする

開発環境のdocker-composeの環境から、TLS1.2でメール送信できることを確認したかったので、postfixにTLS1.2で送信したものを全てmail catcherに、リレーしてブラウザで確認できるようにしました。 そのpostfixとmail catcher部分を取り出してみました。

  • postfix : TLS1.2で受けつけるSMTPサーバー
  • smtp: Mail Catcher (デバッグでメールを全部確認できるsmtp(25)サーバと、ブラウザメーラUI
  • command: mailxコマンドを実行する

docker-compose.yml

    version: '2'
    services:
      postfix:
        container_name: 'postfix'
        build: ./postfix
        ports:
         - "587:587"
         - "25:25"
        networks:
          app_net:
            ipv4_address: 192.168.0.3
      smtp: 
        image: schickling/mailcatcher
        container_name: 'smtp'
        ports:
         - "1080:1080"
         - "1025:1025"
        networks:
          app_net:
            ipv4_address: 192.168.0.2
      command:
        container_name: "command"
        image: harobed/docker-heirloom-mailx
        command: /bin/sh -c "while :; do sleep 10; done"
        networks:
          app_net:
            ipv4_address: 192.168.0.4
    networks:
      app_net:
        driver: bridge
        ipam: 
         driver: default
         config:
           - subnet: 192.168.0.0/24

build

    $ docker-compose build

run

    $ docker-compose up

mail catcher の確認方法

ブラウザで http://localhost:1080/ にアクセスする。

command ホストで、メール送信

  • command コンテナにログインして、mailxコマンドでメールを送信する。
    $ docker exec -it command sh
 
    # echo 'mail body' | mailx \
        -v \
        -S smtp-use-starttls \
        -S smtp-auth=login \
        -S ssl-verify=ignore \
        -S smtp="postfix:587" \
        -S smtp-auth-user="smtpuser" \
        -S smtp-auth-password="password" \
        -S from="hoge@example.com" \
        -r "hoge@example.com" \
        -s "TLS test mail" \
        "foo@example.com"

log

    $ docker exec -it command sh
    / # echo 'mail body' \
    >   | mailx \
    >     -v \
    >     -S smtp-use-starttls \
    >     -S smtp-auth=login \
    >     -S ssl-verify=ignore \
    >     -S smtp="postfix:587" \
    >     -S smtp-auth-user="smtpuser" \
    >     -S smtp-auth-password="password" \
    >     -S from="hoge@example.com" \
    >     -r "hoge@example.com" \
    >     -s "TLS test mail" \
    >     "foo@example.com"
    Resolving host postfix . . . done.
    Connecting to 192.168.0.3:587 . . . connected.
    220 postfix.example.com ESMTP Postfix (Ubuntu)
    >>> EHLO eb54e0901dae
    250-postfix.example.com
    250-PIPELINING
    250-SIZE 10240000
    250-VRFY
    250-ETRN
    250-STARTTLS
    250-AUTH PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM
    250-AUTH=PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM
    250-ENHANCEDSTATUSCODES
    250-8BITMIME
    250 DSN
    >>> STARTTLS
    220 2.0.0 Ready to start TLS
    >>> EHLO eb54e0901dae
    250-postfix.example.com
    250-PIPELINING
    250-SIZE 10240000
    250-VRFY
    250-ETRN
    250-AUTH PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM
    250-AUTH=PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM
    250-ENHANCEDSTATUSCODES
    250-8BITMIME
    250 DSN
    >>> AUTH LOGIN
    334 VXNlcm5hbWU6
    >>> c210cHVzZXI=
    334 UGFzc3dvcmQ6
    >>> cGFzc3dvcmQ=
    235 2.7.0 Authentication successful
    >>> MAIL FROM:<hoge@example.com>
    250 2.1.0 Ok
    >>> RCPT TO:<foo@example.com>
    250 2.1.5 Ok
    >>> DATA
    354 End data with <CR><LF>.<CR><LF>
    >>> .
    250 2.0.0 Ok: queued as D87C86408
    >>> QUIT
    221 2.0.0 Bye

postfixコンテナのログからの抜粋

    postfix    | 2020-11-18T14:26:30.861334+00:00 36587352c6a6 postfix/smtpd[135]: Anonymous TLS connection established from unknown[192.168.0.4]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)

TLSv1.2 で送信できてそう。

mail catcher で確認

ブラウザで確認も問題なかった。

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.