mpalmer
(Matt Palmer)
2019 年 5 月 27 日午前 4:32
1
カスタマイズされた Postfix 設定が必要な メール受信コンテナ をお持ちの場合は、このトピックが参考になるでしょう。ここでは、Postfix の main.cf 設定変数を、ご自身の希望通りに設定するための手順を説明します。
Postfix 設定変数は、コンテナ環境変数を通じて設定できます。POSTCONF_ で始まる環境変数は、その残りの部分が Postfix 設定変数の名前となり、環境変数の値がその変数の値として設定されます。例えば、環境変数 POSTCONF_always_bcc に bob@example.com を設定すると、Postfix は always_bcc = bob@example.com で設定され、すべての受信メールのコピーが Bob に送信されます。かわいそうな Bob です。
手順
設定したい変数と、その値を特定します。これは 公式マニュアル を読むか、他の Discourse ドキュメントの推奨事項を参照するか、その他の方法で行います。
SSH を通じて Discourse サーバーに接続し、root 権限を取得して、discourse-docker 設定が保存されているディレクトリへ移動します。
ssh ubuntu@192.0.2.42
sudo -i
cd /var/discourse
お好みのテキストエディタで containers/mail-receiver.yml を開き、ファイル内の env: セクションへ移動します。その中に、追加したい変数のエントリを追加します。他の部分を修正せず、適切なインデントを維持することに注意してください。例えば、always_bcc 設定を追加する場合、ファイルは以下のようになります。
env:
LANG: en_US.UTF-8
MAIL_DOMAIN: discourse.example.com
DISCOURSE_BASE_URL: 'https://discourse.example.com'
DISCOURSE_API_KEY: abcdefghijklmnop
DISCOURSE_API_USERNAME: system
POSTCONF_always_bcc: 'bob@example.com'
追加内容に満足したら、エディタを保存して終了します。
設定を反映させるには、mail-receiver コンテナを再起動するだけで十分です(rebuild は 不要 です)。
./launcher restart mail-receiver
一瞬の処理の後、コンテナが再起動して実行状態になります。
変更をテストします。意図した動作が実際に行われているか、また意図しない変更が起きていないかを確認してください。
補足:mail-receiver コンテナへのファイル追加
多くの Postfix 設定パラメータは、Postfix がメールの処理方法を決定するために使用するキー/値情報を提供する「データベースファイル」へのアクセスを必要とします。設定パラメータが hash:/some/file のようなファイル名を受け入れる場合、それはデータベースファイルを使用するケースです。
ただし、コンテナ内で動作する Postfix は実行中にこれらのファイルにアクセスできる必要があります。つまり、ファイルをコンテナ内にコピーするか、(より好ましい方法として)ホスト上のディレクトリにファイルを配置し、そのディレクトリをコンテナ内のボリュームとしてマウントする必要があります。以下の手順では、2 番目の方法を説明します。
この手順を完了すると、/var/discourse/shared/mail-receiver/etc に配置したファイルは、コンテナ内の /etc/postfix/shared ですぐに可視化され、それらのファイルに変更を加えると Postfix ですぐに反映されます。
以下にその方法を示します。
Discourse サーバーに root としてログインしていない場合は、再度ログインします。
ssh ubuntu@192.0.2.42
sudo -i
cd /var/discourse
お好みのテキストエディタで containers/mail-receiver.yml を開き、今回は volume: セクションへ移動します。既存の /var/spool/postfix ディレクトリの定義の下に、もう一つ追加して、volume セクションが以下のようになるようにします。
volumes:
- volume:
host: /var/discourse/shared/mail-receiver/postfix-spool
guest: /var/spool/postfix
- volume:
host: /var/discourse/shared/mail-receiver/etc
guest: /etc/postfix/shared
エディタを保存して終了します。
新しいボリュームをアタッチするには、mail-receiver コンテナを再起動するだけで十分です(rebuild は 不要 です)。
./launcher restart mail-receiver
これで完了です!
「いいね!」 10
マットさん、この Postfix 設定から admin@domain や info@domain のようなアカウントを有効化することは可能でしょうか?
受信メール用のアドレスが数個あれば十分で、Discourse では動作確認済みですが、アカウントの設定ができません(メッセージは処理されているようですが、デフォルトでブロックされているようです)。
関連する素晴らしいガイドをありがとうございます。
markcoley
(Mark Coley)
2021 年 12 月 3 日午後 7:13
3
Digital Oceanで試用のDiscourseサービスをセットアップし、送信メールにはMailgunを使用しました。適切なMXレコードがDigital OceanのIPアドレスを指すように設定されたドメインも登録済みです。Discourseでの送受信メールは正常に機能しています。トピックへの返信は、通知が設定されているユーザーに送信メールを生成し、テストユーザーはこれらのメールに返信して、投稿がDiscourseに表示されます。ここまでは順調です。
上記のようにPOSTCONF_always_bcc: オプションを追加しようとしましたが、機能していないようです。「mail-receiver」の部分が、Discourseの「app」部分がMailgun経由でメールを送信する方法を知っているにもかかわらず、Mailgun経由でメールを適切に送信できないのではないかと疑っています。app.ymlにはMailgunサーバーのユーザー名とパスワードが含まれていますが、この情報をmail-receiverの設定ファイルにどのように記述するかについての例を見たことがありません。
always_bccオプションが読み取られ、処理されていることはわかっています。なぜなら、以下を実行すると:
./launcher enter mail-receiver
そして実行する
mailq
送信しようとしているテストメッセージがキューにあり、配信されようとしているのを確認できます。「-Sender/Recipient-------」の列には、テストメッセージが送信されたアドレス、(unknown mail transport error) という言葉、そしてalways_bcc設定にあったメールアドレスが表示されます。
postmaster@mydomainまたはadmin@mydomainに送信されたメッセージを、Discourseでの処理のために送信するのではなく、公開インターネット経由でMailgun経由でGmailアドレスに再送信するように、受信メッセージをフィルタリングする方法を望んでいました。これはユーザー@satonotdeadが試みようとしていたことかもしれません。
これを実現するためのヒントをいただけると幸いです!
pfaffman
(Jay Pfaffman)
2021 年 12 月 3 日午後 7:39
4
うーん。はい、まず、app.ymlの認証情報や転送メカニズムについて知らないメール受信者を、メールを転送する手段を持つように設定する必要があります。マウントボリュームに関する次のセクションで示唆されているように、より完全な設定を追加する必要があると思いますが、その詳細は本書の範囲を超えています。
「postmasterとadminのメールをどう扱えばよいか」という簡単な解決策は、それぞれにグループを作成し、そのメールを受け取りたい人をそのグループに追加すれば、グループメッセージとして処理できます。
「いいね!」 3
markcoley
(Mark Coley)
2021 年 12 月 3 日午後 7:44
5
pfaffman:
まず、Mailgunを設定する必要があります
Mailgunではなく「mail-receiver」のことでしょうか?つまり、「mail-receiver」が公開インターネット経由でMailgunと通信する方法を教え、実際の配信を実行するように適切に認証情報を渡すということでしょうか?
pfaffman
(Jay Pfaffman)
2021 年 12 月 3 日午後 7:48
6
はい。すみません。
まあ、そうですね、あるいは、何らかの方法で、mail-receiver(つまりPostfix)を設定してメールを配信させるということです。mail-receiverの使い方を知っているなら、それを使うよりもそちらを使った方が良いのではないかというのが私の意見です。
別の解決策としては、domainのメールを処理し、他のMXの下でmail-receiverに転送するような <mail thing> プロセスを用意することです。
markcoley
(Mark Coley)
2021 年 12 月 4 日午前 12:36
7
数時間、様々な組み合わせを試しましたが、Discourseが実行されているコンテナの外にpostfixをインストールし、コマンドラインからMailgun経由で電子メールを送信できるようになりました。そのため、postfixをMailgunを使用するように正常に設定しました。しかし、リレーがMailgun経由で機能するように、mail-receiverコンテナに設定を組み込む方法については、まだ解決策が見つかっていません。簡単な方法があるはずです。メッセージがメールキューに留まっている理由を特定するためのログを見つけることができません。コンテナは、私がLinuxを使用していた最後(数年前)には存在しませんでした。Postfixが試みている通信を確認できるようにログを有効にする方法はありますか?そうすれば、問題がどこにあるのかを特定できます。概念的には、admin@mydomainが受信されたら、Mailgun経由で私の個人のGmailアカウントに直接送信され、category1@mydomainやcategory2@mydomainなどは、投稿の作成に使用するためにローカルのDiscourseにプッシュされるようにしたいと考えています。
「いいね!」 2
f1r4s
(Eddie)
2022 年 1 月 17 日午後 12:53
8
Discourse コンテナの外部、別の VPS またはデータセンターで mail-receiver を使用できますか?
目的は、プライバシー向上のために Discourse の IP アドレスを変更し、Discourse フォーラムと連携して動作/認証する外部の「mail-receiver」を使用することです。
pfaffman
(Jay Pfaffman)
2022 年 1 月 17 日午後 1:40
9
はい。まさにそれを実行しています。メール受信者をDigitalOceanで実行し、Discourseを別のデータセンターのマシンで実行しています。
f1r4s
(Eddie)
2022 年 1 月 17 日午後 1:41
10
誰かやり方を説明してくれませんか?この人は答えてくれただけでお金を要求しています。
pfaffman
(Jay Pfaffman)
2022 年 1 月 17 日午後 3:11
11
ご質問は何でしょうか?
メール受信者をサーバーに設定するために特別なことは何も必要ありません。Dockerがインストールされており、必要なポートにアクセスできる限り、問題なく動作します。
f1r4s
(Eddie)
2022 年 1 月 17 日午後 3:52
12
メール受信者をセットアップしましたが、メールを処理しようとすると404エラーが発生します。
私のサイトはサブドメインです。例:forum.site.com
そして、app mail-receiverの DISCOURSE_MAIL_ENDPOINT は次のようになっています。
DISCOURSE_MAIL_ENDPOINT: ‘http://forum.site.com/admin/email/handle_mail ’
Discourseも再構築する必要がありますか?
pfaffman
(Jay Pfaffman)
2022 年 1 月 17 日午後 4:13
13
404エラーが発生している場合は、APIキーが間違っている可能性が高いです。
「いいね!」 2
f1r4s
(Eddie)
2022 年 1 月 17 日午後 4:17
14
デフォルトのAPIですが、まだ404が返ってきます。Google Talkでお送りしましたので、ご確認ください。
「いいね!」 1
SMTPバナーの設定方法
MXtoobox’s SuperTool でSMTPバナーチェックの問題が報告されています。
通常、EHLOバナーはMAIL_DOMAINと一致するはずであり、これはさらに逆引きDNSポインター(PTRレコード)と一致するはずです。したがって、私のmail-receiverがdiscourse.exampleで実行されている場合、POSTCONF_myhostnameはdiscourse.exampleであるべきです。
EHLOバナーを設定する正しい方法はありますか?
最初に考えたのは、mail-receiver.ymlでHOSTNAMEを設定して、/etc/postfix/mail-receiver-environment.jsonの元のhost-mail-receiver.localdomainを置き換えることでした。しかし、これは/etc/hostnameを変更せず、Postfixの設定のmyhostnameも変更しません。
POSTCONF_myhostnameを使用することを検討していますが、$myhostnameは複数の場所で使用されており、/etc/hostnameと一致しなくなるため、意図しない副作用があるのではないかと心配しています。
root@host-mail-receiver:/etc/postfix# postconf | grep myhostname
lmtp_lhlo_name = $myhostname
local_transport = local:$myhostname
milter_macro_daemon_name = $myhostname
myhostname = host-mail-receiver.localdomain
myorigin = $myhostname
smtp_helo_name = $myhostname
smtpd_proxy_ehlo = $myhostname
root@host-mail-receiver:/etc/postfix# cat /etc/hostname
host-mail-receiver
pfaffman
(Jay Pfaffman)
2023 年 7 月 21 日午前 11:01
16
Discourse-setupが尋ねる設定があります。名前を覚えておらず、携帯電話で見つけるのが難しいです。ソースを見たり、実行したりすることができます。
mpalmer
(Matt Palmer)
2023 年 8 月 10 日午前 12:31
17
Postfix の smtp_helo_name 設定は HELO (または EHLO) コマンドで指定された名前を変更しますが、これは 送信 配信の設定であり、SMTP バナーはメールを 受信 する際に送信されます。デフォルトのホスト名は myhostname から取得されますが、smtpd_banner 設定でバナーに表示されるものを変更できます。
「いいね!」 1
jimkleiber
(Jim Kleiber)
2023 年 11 月 29 日午後 10:41
18
これが他の人に役立つかわかりませんが、私も同様の問題が発生していました。この情報のおかげで、何らかの理由でAPIキーを取り消していたことに気づきました。取り消しを取り消したところ、受信メールが再び機能するようになりました。
APIキーに関連していることに気づかせてくれてありがとう
「いいね!」 1
ToddZ
2024 年 11 月 5 日午前 6:02
19
これは書かれた時点から何か変更されたのでしょうか? env: の下に POSTCONF_smtpd_banner 値を追加しても、複数回再起動しても全く認識されませんでした。反映させるには再構築 (./launcher rebuild mail-receiver) が必要でした。
皆さん、こんにちは。
ドメイン移行を完了しました(Change the domain name or rename your Discourse に従いました)が、問題なく完了しました。しかし、数カテゴリへの着信メールのためにMXレコードを使用する mail-receiver コンテナを使用しています……。
見る限り、コンテナのデフォルト設定では、着信ドメインとLetsEncrypt証明書へのパスの両方がハードコードされています。設定で2つのドメインを許可することは可能でしょうか、あるいはこれらの高度なオプション経由で可能でしょうか?