導入
電子メールサーバーの自己ホストは、メーリングリスト、ニュースレター、電子メール検証APIなどのタスクを自動化するのに役立ちます。
部屋の象は現実世界の救い性です。 自己ホストを使用すると、メールを受け取らないリスクがあります。 私は私の個人的なプロジェクトにこれを受け入れますが、あなたはそうではないかもしれません。これに留意してください。
私にとって、自己ホスティングのセールスポイントは、それが実質的に無料であるということです。すでにWebサイトを自己ホストしている場合は、サーバーに追加のパッケージをインストールしてください。必要なのは少しだけです。メールにはストレージが非常に少なく、ソフトウェアは軽量なので、エネルギー消費やディスクの使用量を大幅に変更する可能性は低いです。
長い間、私は自己ホストの電子メールを難しいと感じていましたが、私のプロジェクトの1つでそれを行った後、電子メールSaasを構成するよりもはるかに難しくなく、時間がかかりません。
ただし、セットアップを簡単にするために目標を少し変更しました。マルチユーザーのウェブメールを自己ホストすることは、重く見え、私が喜んで入りたいよりも関与しているので、私はそれをスキップしました。そうすれば、ユーザーアカウント、データベース、またはWebをまったく気にする必要はなく、タスクが簡単になりました。
私の構成を使用すると、メールサーバーにSSHを使用して電子メールを送信して受信することが可能です。セットアップは今では十分ですが、将来拡張することができ、マルチユーザーのウェブメールはとにかくテーブルから外れていません。たぶん私は自分でシンプルなウェブメールパッケージを書くことさえあります!
ポストフィックスのセットアップ
ポート25を開いて、インストールして構成する必要があります ポストフィックス そして OpendKim あなたのマシンで。 Postfixは完全なSMTPサーバーであり、基本メールだけでも十分ですが、実際には、Gmailのような人気サービスにメールを配信するにはOpendKimも必要です。
これが私のポストフィックス構成です。常にローカルで電子メールを送信しているため、Master.cfファイルをそのまま残しました。 POP3またはIMAPについては言及されていないことに注意してください。私はそれらを必要としなかったので、私はそれらをセットアップしませんでした。
デフォルトのエイリアスとヘッダーチェック構成ファイルは、実質的に自明です(それらを開いてコメントを読むだけです!)。
/etc/postfix/main.cf compatibility_level = 3.8 mail_owner = postfix myhostname = mx.idx.cy myorigin = idx.cy mydestination = localhost、idx.cy、maxadamski.com、localchat.cc inet_interfaces = all inet_protocols = ipv4 hash:/etc/postfix/aliases alias_database = $ alias_maps cosiipient_delimiter = +#私は自分のマシンの唯一のユーザーなので、必要な住所から送信します。 #smtpd_sender_login_maps = hash:/etc/postfix/sender_login_maps #smtpd_sender_restrictions = Reject_authenticed_sender_login_mismatch POSTDROP#TLS(Strict)SMTPD_TLS_CERT_FILE = /ETC/SSL/TLS/MX.IDX.CY.CRT SMTPD_TLS_KEY_FILE = /ETC/SSL/TLS/MX.IDX.CY.KEY SMTPD_TLS_SECURITY_LEBLE smtpd_tls_mandatory_protocols =!sslv2、!sslv3、!tlsv1、!tlsv1.1 smtpd_tls_protocols =!sslv2、!sslv3、!tlsv1、! smtp_tls_mandatory_protocols =!sslv2、!sslv3、!tlsv1、!tlsv1.1 smtp_tls_protocols =!sslv2、!sslv3、!tlsv1、!tlsv1.1 non_smtpd_milters = inet:localhost:8891 milter_default_action = accept
TLS
また、輸送中の暗号化のためのSSL証明書も必要です。ツールはかさばっていて自動化があなたのシステムのもう1つの可動部分であるため、SSL証明書の取得と更新が嫌いです(私はLEGOパッケージを使用しました。マニュアルDNSチャレンジは簡単に挑戦しますが、あまり満足していません)。 SSL証明書の取得に関するチュートリアルは提供しませんが、各カスタムドメインの証明書を取得して更新する必要はないことに注意してください。
他のSMTPサーバーへの輸送中にデータを暗号化するために、マシンに1つのSSL証明書が必要です。電子メールマシンのIPアドレスを指すレコードmx.example.comを作成する場合は、Let’s Encryptからmx.example.comの無料証明書を取得します。次に、Postfix構成でそれを指して、輸送暗号化があります!要するに、MXホスト名のみが、StartTLSを暗号化に使用するための証明書を必要とします。
example.comのような実際の電子メールドメインの証明書がないのはなぜですか?電子メールドメインは、輸送暗号化とはほとんど関係がないためです。 TLSは、サーバー間の接続のみを保護します。あなたはまだあなたが望むものをFrom Headerで設定することができます。
DKIM、SPF、およびDMARC
メールが実際にドメインから来て、メールを信頼できるようにし、Gmailとcoに配信することを証明する必要があります。それがDKIMの目的であり、幸いなことに、電子メールドメインごとに1回限りの取引です。最初に、OpenDKimを使用して各ドメインにキーペアを生成し、次にDNSのTXTレコードで公開キーを公開します。キーは自動的に期限切れになりませんが、定期的にそれらを回転させることがベストプラクティスです。私の設定では、滑らかな回転を可能にする命名スキームを使用しますが、スキップしても複雑ではありません。
DNSで公開する必要があるTXTレコードはさらに2つあります:SPFとDMARCレコード。あなたは、どのホストがあなたのメールドメインからメールを送信することを許可され、DKIMチェックに失敗するメールで何をすべきかについて他の電子メールサーバーに指示を与えることを許可します。私の場合、私は他の人に私のドメインから来ると確認できないメールを拒否するように言い、私のポストマスターアドレスにレポートを送信しました。
私のopendkim構成を見て、物事がどのようにまとめられるかを理解してください。
/etc/opendkim.conf userid opendkim:opendkim socket inet:8891@localhost keytable refile:/etc/opendkim/opendkim/opendkim:/etc/opendkim/signingtable ingignorerist refile:/etc/opendkim/sitedhosts refilets refileats:/etcim/cusentedkimリラックス/リラックスしたReportAddress [email protected] sendreports no logwhy yes syslog yesyslogsuccess no/etc/etc/opendkim/keytable key1._domainkey.idx.cy:key1:/etc/opendkim/keys/idx.cy/key1 maxadamski.com:Key1:/etc/opendkim/keys/maxadamski.com/key1.private key1._domainkey.localchat.cc localchat.ck/opendkim/keys/localchat.cc/key1.kekey1.private *@maxadamski.com key1._domainkey.maxadamski.com *@localchat.cc key1._domainkey.localchat.cc/etc/opendkim/trustedhosts 127.0.0.1 localhost
次のコマンドでDKIMキーを生成します。
opendkim-genkey -d /etc/opendkim/keys/example.com -d emple.com -s key1
また、各電子メールドメインについて、DNSに次のレコードがあります。
逆DNS
電子メールトラストについてもう1つ。逆DNS(PTRレコード)があなたの電子メールサーバーの評判を高めることを読みました。問題は、あなたのISPがそれをセットアップしなければならないことであり、私はISPが丁寧な「いいえ」で返信すると思われるので、私はまだそれをしませんでした。次のセクションで表示されているように、私のメールはGmailに正常に配信されます。 GMXもテストしましたが、Microsoft/Yahoo/Protonについては知りません。
ただし、幅広い配信可能性が必要な場合は、PTRはオプションではありません。
Gmailでのテスト
試してみるには、sendmailコマンドでGmailにテストメールを送信しましょう。
sendmail -vt test.mail content -type:text/html from:[email protected] to:[email protected]件名:dkimテストテストメッセージからidx.cy!
私は即座にメールを受け取り、GmailはTLS暗号化を確認しました。
Gmailの「オリジナルを表示」をクリックして、RAWメールを表示します。ヘッダーにはたくさんのテキストがありますので、SPF、DKIM、DMARCの合格に焦点を当てましょう:)

また、-vオプションがあるため、レポート付きのメールも表示されます。私はこのような家宝のメールでメールを受け取ります:
/var/mail/max fool〜|に新しいメールがありますMailx Heirloom Mailバージョン12.5 7/5/10。タイプ ?助けのために。 「/var/mail/max」:1メッセージ1 new> n 1メール配達システムSAT 10月4日15:40 74/2437「メール配信ステータスレポート」
Pコマンドを使用してメールを印刷します。
&Pメッセージ1:Mailer-DaemonからSAT 10月4日15:40:50 2025 X-ORIGINAL-TO:[email protected]が配信されます:[email protected]日付:土、2025年10月15:40:50 +0200(CEST) Report-Type = Delivery-Status; boundary = “3c311bff8d.1759585250/mx.idx.cy”ステータス:rパート1:コンテンツデスプリェンス:通知コンテンツタイプ:テキスト/プレーン; charset = utf-8これはホストmx.idx.cyのメールシステムです。同封されているのは、あなたが要求したメール配信レポートです。メールシステム:gmail-smtp-in.l.google.com経由の配信[X.X.X.X]:25:250 2.0.0 OK 1759585250 4FB4D7F45D1CF -6393B6BA951SI3187039A12.40 -GSMTP
素晴らしい、すべてが機能している!そして、私はMailxのおかげで80年代の精神を感じています:)
何かが機能していない場合は、DNSレコードを再確認し、TLS証明書がPostfixユーザーが読みやすく、DKIMキーがOpenDKIMユーザーが読み取ることができることをトリプルチェックしてください。 PostfixとOpendkimログも役立ちます。 OpendKim構成ファイルはタイプミスの特に容赦ないので、小さな間違いに注意してください!
次のステップ
メールの次の投稿では、Pythonを使用して有用な電子メールアプリケーションを構築する方法を紹介します。読んでくれてありがとう!
ところで、あなたが私の構成について何かに気づいたら(または単にいくつかの考えを共有したいだけです)、[email protected]に私にメールしてください:)
#1984年のような自己ホスティングメール