تخصيص تكوين Postfix للتوصيل المباشر

إذا كان لديك حاوية استلام بريد تتطلب تكوينًا مخصصًا لـ Postfix، فهذا الموضوع مخصص لك. سنشرح هنا الخطوات اللازمة لتعيين متغيرات تكوين main.cf في Postfix حسب رغبتك.

يمكن تعيين متغيرات تكوين Postfix عبر بيئة الحاوية. فأي متغير بيئة يبدأ بـ POSTCONF_ سيعين متغير تكوين Postfix الذي يحمل الاسم المتبقي من متغير البيئة إلى قيمة متغير البيئة. على سبيل المثال، إذا عيّنت متغير البيئة POSTCONF_always_bcc إلى bob@example.com، فسيتم تكوين Postfix بـ always_bcc = bob@example.com، مما يؤدي إلى إرسال نسخة من جميع الرسائل الواردة إلى بوب. poor Bob.

الإجراء

  1. حدد متغيرات التكوين التي ترغب في تعيينها والقيم المراد تعيينها. يمكن القيام بذلك عن طريق قراءة الدليل الممتاز، أو من خلال التوصيات في وثائق Discourse الأخرى، أو بأي طريقة أخرى.

  2. اتصل بخادم Discourse الخاص بك عبر SSH، واحصل على صلاحيات root، ثم انتقل إلى المكان الذي توجد فيه جميع إعدادات discourse-docker:

    ssh ubuntu@192.0.2.42
    sudo -i
    cd /var/discourse
    
  3. افتح ملف 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'
    

    بمجرد أن تكون راضيًا عن ما أضفت، احفظ الملف واخرج من المحرر.

  4. لتحميل التكوين، كل ما عليك فعله هو إعادة تشغيل حاوية mail-receiver (لا يلزم إجراء rebuild):

    ./launcher restart mail-receiver
    

    بعد لحظة من الاضطراب، يجب أن تعمل الحاوية مرة أخرى.

  5. اختبر التغييرات. تأكد من أن ما أردت حدوثه قد حدث بالفعل، وأن أي شيء لم تتوقع تغييره لم يتغير.

إضافة: إضافة ملفات إلى حاوية mail-receiver

تتطلب العديد من معاملات تكوين Postfix الوصول إلى “ملفات قاعدة البيانات”، التي توفر معلومات بالمفتاح/القيمة التي يستخدمها Postfix لاتخاذ قرارات بشأن كيفية معالجة البريد. إذا رأيت أن معامل التكوين يقبل اسم ملف يبدو مثل hash:/some/file، فقد وجدت استخدامًا لملفات قاعدة البيانات.

المشكلة هي أن Postfix الذي يعمل داخل الحاوية يحتاج إلى القدرة على الوصول إلى هذه الملفات أثناء تشغيله، مما يعني أنه يجب عليك إما نسخ هذه الملفات إلى الحاوية، أو (الأفضل) وضع هذه الملفات في دليل على المضيف، ثم تركيب هذا الدليل كحجم داخل الحاوية. تصفح هذه التعليمات الطريقة الثانية.

بمجرد إكمال هذا الإجراء، ستصبح أي ملف تضعه في /var/discourse/shared/mail-receiver/etc مرئيًا فورًا في /etc/postfix/shared داخل الحاوية، وأي تغييرات تجريها على هذه الملفات ستصبح مرئية فورًا لـ Postfix.

إليك كيفية تحقيق ذلك.

  1. إذا لم تكن قد سجلت الدخول بعد كمسؤول (root) إلى خادم Discourse الخاص بك، فافعل ذلك مرة أخرى:

    ssh ubuntu@192.0.2.42
    sudo -i
    cd /var/discourse
    
  2. افتح ملف 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
    

    احفظ/اخرج من المحرر.

  3. لربط الحجم الجديد، كل ما عليك فعله هو إعادة تشغيل حاوية mail-receiver (لا يلزم إجراء rebuild):

    ./launcher restart mail-receiver
    

تم كل شيء!

10 إعجابات

Matt, do you think that could be possible to enable accounts like admin@domain or info@domain from this Postfix configuration?

I only need to have a couple of addresses for incoming e-mail and I have it working with Discourse but I can’t set accounts (their seem to be blocked by default even though messages are processed).

Thanks for all your guides related.

لقد قمت للتو بإعداد خدمة Discourse تجريبية باستخدام Digital Ocean و Mailgun للبريد الإلكتروني الصادر. لدي نطاق مسجل بسجل MX مناسب يشير إلى عنوان IP الخاص بـ Digital Ocean. يعمل البريد الإلكتروني الصادر والوارد بشكل صحيح مع Discourse. تؤدي الردود على المواضيع إلى إنشاء رسائل بريد إلكتروني صادرة إلى أولئك الذين لديهم إشعارات مضبوطة ويمكن للمستخدمين التجريبيين الرد على هذه الرسائل وتظهر المشاركات في Discourse. كل شيء على ما يرام حتى الآن.

حاولت إضافة خيار POSTCONF_always_bcc: كما هو مذكور أعلاه ولكنه لا يبدو أنه يعمل - أشك في أن جزء ‘mail-receiver’ من Discourse غير قادر على إرسال البريد الإلكتروني بشكل صحيح عبر Mailgun، على الرغم من أن جزء ‘app’ يعرف كيفية القيام بذلك - يحتوي app.yml على اسم المستخدم وكلمة المرور لخادم Mailgun ولكني لم أر أي أمثلة لكيفية وضع هذه المعلومات في ملف إعدادات mail-receiver.

أعلم أن خيار always_bcc تتم قراءته والتصرف فيه، حيث إذا كتبت:

./launcher enter mail-receiver

ثم قمت بتشغيل

mailq

يمكنني رؤية رسالة اختبار أرسلتها وهي في قائمة الانتظار تحاول التسليم. في عمود “-Sender/Recipient-------” يوجد العنوان الذي جاءت منه رسالة الاختبار الخاصة بي، والكلمات “(unknown mail transport error)” ثم عنوان البريد الإلكتروني الذي كان في إعداد always_bcc.

كنت آمل في تصفية الرسائل الواردة بطريقة ما بحيث إذا تم إرسال رسالة إلى postmaster@mydomain أو admin@mydomain، فسيتم إعادة إرسالها عبر الإنترنت العام، عبر Mailgun، إلى عنوان Gmail الخاص بي وعدم إرسالها إلى Discourse للمعالجة. قد يكون هذا ما كان يحاول المستخدم @satonotdead القيام به.

أي تلميحات مقدرة حول كيفية القيام بذلك!

هممم. نعم، أولاً ستحتاج إلى تكوين مستلم البريد mailgun ليكون لديه بعض الوسائل لتسليم البريد، لأنه لا يعرف بيانات الاعتماد أو آلية النقل في app.yml. أعتقد أنك ستحتاج إلى إضافة تكوين أكثر اكتمالاً كما هو مشار إليه في القسم التالي حول تحميل وحدات التخزين، وتفاصيلها خارج نطاق هذه الوثيقة.

الحل البسيط لـ “كيف أتعامل مع رسائل البريد الإلكتروني الخاصة بـ postmaster و admin” هو إنشاء مجموعة لكل منها وإضافة كل من تريد أن يتلقى هذه الرسائل إلى تلك المجموعة ويمكنهم التعامل معها كرسائل جماعية.

3 إعجابات

هل تقصد ‘mail-receiver’ بدلاً من Mailgun؟ كما في تعليم ‘mail-receiver’ كيفية التحدث إلى Mailgun عبر الإنترنت العام وتمرير بيانات الاعتماد بشكل صحيح لطلب منه إجراء عمليات التسليم الفعلية؟

نعم. آسف لذلك.

حسنًا نعم، ذلك، أو بطريقة أخرى، قم بتكوين mail-receiver (أي Postfix) لتسليم البريد بطريقة ما. أنا في الغالب على رأي أنه إذا كنت تعرف كيفية القيام بذلك، فقد تفضل القيام بذلك بدلاً من استخدام mail-receiver.

حل آخر سيكون وجود عملية \u003cmail thing\u003e تعالج البريد لـ domain وترسل الباقي إلى mail-receiver، ربما تحت MX آخر.

بعد قضاء هذه الليلة في تجربة العديد من التركيبات، تمكنت من تثبيت postfix خارج الحاويات التي تعمل فيها Discourse ويمكنني إرسال البريد الإلكتروني عبر Mailgun بهذه الطريقة من سطر الأوامر، لذلك قمت بتكوين postfix لاستخدام Mailgun بنجاح. ما زلت أواجه صعوبة في محاولة إدخال الإعدادات في حاوية mail-receiver التي ستجعل إعادة التوجيه تعمل عبر Mailgun. أنا متأكد من أن هناك طريقة (بسيطة!). لا يبدو أنني أجد أي سجلات لمعرفة سبب تعليق الرسائل في قائمة انتظار البريد. لم تكن الحاويات موجودة في المرة الأخيرة التي استخدمت فيها لينكس (قبل عدة سنوات). هل هناك طريقة لتشغيل التسجيل حتى أتمكن من رؤية الاتصال الذي يحاول postfix إجراؤه حتى أتمكن من معرفة المشكلة؟ من الناحية المفاهيمية، أود أن يذهب admin@mydomain، بمجرد وصوله، مباشرة إلى حساب Gmail الشخصي الخاص بي عبر Mailgun مع category1@mydomain و category2@mydomain وما إلى ذلك ليتم دفعها محليًا إلى Discourse لاستخدامها لإنشاء مشاركات.

إعجابَين (2)

هل يمكننا استخدام “مستقبل البريد” خارج حاويات Discourse في خادم افتراضي خاص (VPS) آخر أو مركز بيانات آخر؟
الفكرة هي تغيير عنوان IP الخاص بـ Discourse لمزيد من الخصوصية واستخدام “مستقبل البريد” الخارجي الذي يعمل/المصادقة مع منتدى Discourse.

نعم. أنا أفعل ذلك بالضبط. لديّ مستلم البريد يعمل في DigitalOcean و Discourse على أجهزة في مركز بيانات آخر.

هل يمكن لأحد أن يشرح لي كيف أفعل ذلك؟ هذا الرجل يطلب المال حتى للرد علي.

ما هو سؤالك؟

لا يلزم أي شيء خاص لتكوين مستلم البريد على أي خادم، طالما أنه يحتوي على دوكر والوصول إلى المنافذ اللازمة.

لقد قمت بإعداد مستلم البريد لأنه سريع وبسيط.. ولكن عندما أذهب للتحقق من رسائل البريد الإلكتروني المعالجة، فإنه يعطيني 404؛
موقعي هو نطاق فرعي مثل؛ forum.site.com
وفي تطبيق مستلم البريد لدي هذا لنقطة النهاية؛

DISCOURSE_MAIL_ENDPOINT: ‘http://forum.site.com/admin/email/handle_mail

هل يجب علي إعادة بناء ديسكورس أيضًا؟

إذا كنت تحصل على 404 فمن المحتمل أن يكون مفتاح واجهة برمجة التطبيقات (API) خاطئًا.

إعجابَين (2)

إنها واجهة برمجة تطبيقات افتراضية ولا تزال تعطيني 404 .. أرسلت لك في Google Talk، يرجى التحقق.

إعجاب واحد (1)

تكوين لافتة SMTP؟

أداة SuperTool من MXtoobox تبلغ عن مشكلة في فحص لافتة SMTP.
صورة

عادةً، يجب أن تتطابق لافتة EHLO مع MAIL_DOMAIN والتي بدورها يفترض أن تتطابق مع مؤشر DNS العكسي (سجل PTR). لذا إذا كان mail-receiver الخاص بي يعمل على discourse.example، فيجب أن يكون POSTCONF_myhostname هو discourse.example.

ما هي الطريقة الصحيحة لتكوين لافتة EHLO؟

كان حدسي الأول هو محاولة تعيين HOSTNAME في mail-receiver.yml حتى يتم استبدال host-mail-receiver.localdomain الأصلي في /etc/postfix/mail-receiver-environment.json. لكن هذا لا يغير /etc/hostname ولا يغير myhostname في تكوين Postfix.

أنا متردد في استخدام 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

هناك إعداد يطلبه Discourse-setup. لا أتذكر اسمه ومن الصعب العثور عليه على هاتفي. يمكنك النظر إلى المصدر أو تشغيله.

يقوم إعداد Postfix smtp_helo_name بتغيير الاسم المحدد في أمر HELO (أو EHLO)، ولكن هذا إعداد تسليم خارجي، بينما يتم إرسال لافتة SMTP عند استقبال البريد. يتم أخذ اسم المضيف الافتراضي المحدد في ذلك من myhostname، ولكن يمكنك تعديل اللافتة لعرض شيء مختلف باستخدام إعداد smtpd_banner.

إعجاب واحد (1)

لست متأكدًا مما إذا كان هذا سيساعد الآخرين، كنت أواجه مشكلة مماثلة وساعدني هذا في إدراك أنني قمت بإلغاء مفتاح واجهة برمجة التطبيقات لسبب ما. بمجرد أن ألغيت الإلغاء، عادت رسائل البريد الإلكتروني الواردة للعمل مرة أخرى.

لذلك شكراً لمساعدتي في إدراك أن الأمر كان متعلقًا بمفتاح واجهة برمجة التطبيقات :slightly_smiling_face:

إعجاب واحد (1)

هل تغير شيء ربما منذ كتابة هذا؟ لقد وجدت للتو أن إضافة قيمة POSTCONF_smtpd_banner تحت env: لم يتم التقاطها على الإطلاق بواسطة عمليات إعادة تشغيل متعددة. اضطررت إلى إعادة البناء (./launcher rebuild mail-receiver) لجعلها سارية المفعول.

مرحباً بالجميع،

لقد أكملت للتو ترحيل نطاق (وفقًا لـ Change the domain name or rename your Discourse) وقد سار على ما يرام. ومع ذلك، أنا أستخدم حاوية mail-receiver مع سجلات MX للبريد الوارد إلى فئتين…

على حد علمي، يقوم التكوين الافتراضي للحاوية بتثبيت كل من النطاق الوارد ومسار شهادات LetsEncrypt بشكل ثابت. هل من الممكن السماح بنطاقين، إما في التكوين، أو عبر هذه الخيارات المتقدمة؟