تهيئة البريد الإلكتروني الوارد بالتسليم المباشر للمواقع المستضافة ذاتيًا باستخدام Mail-Receiver

Discourse is all about enabling civilized discussion. While plenty of people like a web interface, e-mail is still the “hub” of many people’s online lives. That’s why sending e-mail is so important, and when you’re sending e-mail, you really want to be able to receive it, too. There are several reasons why:

  • If e-mails “bounce” (they can’t be delivered for some reason), you need to know about that. Repeatedly sending e-mails that bounce will get your e-mails flagged as spam. Receiving e-mail bounces allows you to disable sending to non-existent addresses.
  • Allowing people to reply to posts via e-mail can significantly improve engagement, as people can reply straight away from their mail client, even if they’re not able to visit the forum at that moment.
  • Letting people post new topics, or send PMs, via e-mail has similar benefits to engagement. In addition, you can use Discourse to handle e-mail for a group, such as an e-mail-based support channel (which is how Discourse’ own e-mail support is handled).

Delivering e-mail directly into your Discourse forum, rather than setting up POP3 polling, has a number of benefits:

  • No need to deal with gmail or another provider’s foibles;
  • You have more control over the e-mail addresses that people use to send posts; and
  • There are no delays in delivery – no more waiting for the next polling run to see new posts appear!

This howto is all about getting that hawtness into your forum.

Overview

This procedure creates a new container on your Discourse server, alongside the typical app container, which receives e-mail and forwards it into Discourse for processing. It supports all e-mail processes: handling bounces, replies, and new topic creation. Any self-hosted Discourse forum using our supported installation process can make use of this procedure to get easy, smooth-flowing incoming e-mail.

Container Setup

We’re going to get the mail-receiver container up and running on the server that’s already running your Discourse instance. There’s no need for a separate droplet just to handle mail – the whole container only takes about 5MB of memory!

So, start off by logging into your Discourse server, and becoming root via sudo:

ssh ubuntu@192.0.2.42
sudo -i

Now, go to your /var/discourse directory and create a new mail-receiver.yml container definition from the sample conveniently provided:

cd /var/discourse
git pull
cp samples/mail-receiver.yml containers/

Since every site is unique, open containers/mail-receiver.yml in your preferred text editor and change the MAIL_DOMAIN, DISCOURSE_MAIL_ENDPOINT, and DISCOURSE_API_KEY variables to suit your site. (If you are an advanced user and know that you are using nginx outside your container, see below for additional configuration for external nginx.)

:bulb: If you use the default mail endpoint (/admin/email/handle_mail), we suggest using the receive_email API key scope to provide an extra layer of security.

If you’re not sure what your favourite text editor is, try nano:

nano containers/mail-receiver.yml

Use Ctrl-X to exit (say “Yes” to “Do you want to save changes?”, or all your work will be for nothing).

Now, do an initial build of the container, and fire it up!

./launcher bootstrap mail-receiver
./launcher start mail-receiver

To check everything’s OK, take a peek in the logs:

./launcher logs mail-receiver

The last line printed should look rather a lot like this:

<22>Aug 31 04:14:31 postfix/master[1]: daemon started -- version 3.1.1, configuration /etc/postfix

If so, all is well, and you can go on to then next step.

DNS Setup

In order for everyone else on the Internet to know where to deliver mail, you must create an MX record for your forum. The exact details of how to do this vary by DNS provider, but in general, the procedure should be very similar to how you setup the DNS records for your forum in the first place, except that instead of creating an A (or “Address”) record, you’re creating an MX (or “Mail eXchange”) record. If your forum is at forum.example.com, and you set MAIL_DOMAIN to forum.example.com in the mail-receiver.yml, then the DNS record should look like this:

  • DNS Name: forum.example.com (this is the MAIL_DOMAIN)
  • Type: MX
  • Priority: 10
  • Value: forum.example.com (this is the domain of your forum)

To make sure the DNS is setup correctly, use a testing site such as http://mxtoolbox.com/ to look up the MAIL_DOMAIN you configured, and make sure it’s pointing to where you expect.

Note: outbound email providers like mailgun may ask you to add MX records pointing to their servers. You want to remove these so the MX records for your forum only point to your forum’s domain name. SPF and DKIM records must still point to your outbound email provider servers so you can send email.

Discourse Configuration

Now e-mail is being fed into Discourse, it’s time to explain to Discourse what to do with the e-mail it receives.

  • Log into your Discourse forum as Admin and navigate to the Admin panel’s Site Settings, then click the Email tab. (forum.example.com/admin/site_settings/category/email)
  • Change the following settings:
    • Enable the reply by email setting
    • In the reply_by_email_address field, enter replies+%{reply_key}@forum.example.com
    • Enable the manual polling setting

You can automatically, without any further setup, use any address @forum.example.com as an address for category or group e-mails.

Troubleshooting

Nothing ever goes according to plan. Here’s how to figure out what went wrong.

  1. OCI runtime create failed error running ./launcher start mail-receiver? Your hostname might be too long. Rename it using these instructions and choose a shorter name, then rebuild.
  2. Did the e-mail even make it to mail-receiver? Run ./launcher logs mail-receiver, and look for log entries that mentions the address that the e-mail was sent from and to. If there’s none of those, then the message never even made it, and the problem is upstream. Check MX records, sending mail server logs, and firewall permissions (SMTP port 25).
  3. Is the message stuck in the queue? Run ./launcher enter mail-receiver, then run mailq. It should report, “Mail queue is empty”. If there’s any messages in there, you’ll get the to/from addresses listed. Messages only sit around in the queue if there’s a problem delivering to Discourse itself, so exit out of the container and then check…
  4. Did mail-receiver error out somehow? Run ./launcher logs mail-receiver | grep receive-mail and look for anything that looks like a stack trace, or basically anything other than “Recipient: <something>@forum.example.com”. Those error messages, whilst not necessarily self-explanatory, should go an awfully long way to explaining what went wrong. Look for typos in your yml file. In particular, check that DISCOURSE_MAIL_ENDPOINT URL matches your site URL, usually starting with https://.

Integrating with External nginx

If you are an advanced user and have configured external nginx such as for Add an offline page to display when Discourse is rebuilding or starting up you will find that the combination of mail-receiver and HTTPS being handled in external nginx requires slightly different handling to enable SSL for email over TLS. Here are example containers/mail-receiver.yml snippets that work with the recommended configuration for external nginx with letsencrypt certificates:

  POSTCONF_smtpd_tls_key_file:  /letsencrypt/live/=DOMAIN=/privkey.pem
  POSTCONF_smtpd_tls_cert_file:  /letsencrypt/live/=DOMAIN=/fullchain.pem

volumes:
  - volume:
      host: /var/discourse/shared/mail-receiver/postfix-spool
      guest: /var/spool/postfix
# uncomment to support TLS
  - volume:
      host: /etc/letsencrypt/
      guest: /letsencrypt

Note that you can’t export as a volume only /etc/letsencrypt/live because the actual files are symlinks into ../../archive/... and those won’t resolve if you are more specific in the volume specification.

Prevent outgoing host email from interfering (Postfix)

If you have (or want) automated messages from your host server (via Postfix), the mail-receiver will conflict because it needs port 25 to operate. One solution is to disable the host Postfix from listening on port 25:

nano /etc/postfix/master.cf

and comment out the line that looks like this:

smtp inet n - y - - smtpd

Then service postfix reload. You may also need to restart the mail-receiver container.

With both the host Postfix and the mail-receiver running, do netstat -tulpn | grep :25 to confirm that docker-proxy is using port 25.

Block unwanted domains from sending to you

To stop email from unwanted domains from even reaching your Discourse, your mail-receiver.yml should look something like this:

  DISCOURSE_API_USERNAME: system

  POSTCONF_smtpd_sender_restrictions: 'texthash:/etc/postfix/shared/sender_access'

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
# uncomment to support TLS
#  - volume:
#      host: /var/discourse/shared/standalone/letsencrypt
#      guest: /letsencrypt

Then create /var/discourse/shared/mail-receiver/etc path, and within it create a sender_access file containing the domains to reject, like this:

qq.com REJECT
163.com REJECT

Rebuild and you’re golden!

DMARC support

DMARC support has been enabled by default in the discourse/mail-receiver:release image to more strongly validate incoming email. This is enabled since the timestamped image discourse/mail-receiver:20240720054629.

This functionality can be toggled via the INCLUDE_DMARC docker environment variable. If a more permissive incoming mail server configuration is preferred, set that environment variable to false and rebuild the image.

The last version without DMARC support is discourse/mail-receiver:20211208001915.

Further Reading

Last edited by @kelv 2024-07-22T03:53:51Z

Check documentPerform check on document:
95 إعجابًا

تم تقسيم 7 مشاركات إلى موضوع جديد: هل يعمل مستقبل البريد مع arm؟

يبدو أن هذه الحاوية تقوم بتشفير البريد الإلكتروني في معلمة تسمى email:

يبدو أن هذا قد تم إيقافه، وفقًا لـ /logs:

إشعار إيقاف: تحذير: المعلمة email تم إيقافها. يجب إرسال جميع طلبات POST إلى هذا المسار مع معلمة email_encoded مشفرة بـ base64 صارمة بدلاً من ذلك. تم استلام البريد الإلكتروني وهو في قائمة الانتظار للمعالجة (سيتم إزالته في Discourse 3.3.0)

هل يمكنك تحديث هذا قبل إزالة المعلمة التي تم إيقافها؟ :innocent:

6 إعجابات

بعض الملاحظات من إعداد هذا:

  • تأكد من تأمين ملف تهيئة الحاوية الجديد باستخدام: chmod o-rwx containers/mail-receiver.yml. إذا لم تفعل ذلك، فسيتم مطالبتك بذلك عند تهيئة الحاوية.
  • عند إنشاء مفتاح API، اخترت نطاق “All Users” و “Global”. لا أعرف ما إذا كان مفتاح مقيد أكثر سيعمل.
  • يحتوي ملف mail-receiver.yml النموذجي على إعدادات TLS مختلفة تمامًا، لذا سترغب في استخدام التعليمات هنا بدلاً من محاولة تعديل العينة.
  • يتضمن أيضًا إعداد smtpd_tls_security_level الذي قمت بإلغاء التعليق عليه. لم أجرِ أي بحث لمعرفة ما إذا كان ضروريًا أو ما إذا كان من الأفضل استخدام إعداد مختلف بدلاً من “may”.
  • إذا كنت ترغب في إعداد بريد إلكتروني لفئة معينة، فيمكن القيام بذلك في /c/{category-name}/edit/settings. (هذا مفيد إذا كنت ترغب في إنشاء فئة قائمة بريدية). بالنسبة لمجموعة، يمكنك إعداد عنوان بريد إلكتروني في /g/{group-name}/manage/interaction.

لا أعرف ما إذا كان أي من هذا سيساعد الآخرين، ولكنه كان سيساعدني. :wink:

4 إعجابات

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

مستوى المستخدم: جميع المستخدمين
النطاق: مفصل
email—استلام رسائل البريد الإلكتروني

4 إعجابات

حسب ما أفهم، إعداداتي صحيحة، ولكن لا يوجد سجل لأي من رسائل البريد الإلكتروني في Discourse.

تظهر رسائل البريد الإلكتروني في السجل على النحو التالي:

Mar 18 17:20:41 [myserver]-mail-receiver postfix/smtpd[122]: NOQUEUE: reject: RCPT from [XXX].google.com[XXX.XX.XXX.XXX]: 554 5.7.1 <test004@www.[mysite].com>: Recipient address rejected: Mail to this address is not accepted. Check the address and try to send again?; from=<[sender]@gmail.com> to=<test004@www.[mysite].com> proto=ESMTP helo=<[XXX].google.com>
Mar 18 17:20:42 [myserver]-mail-receiver postfix/smtpd[122]: disconnect from [XXX].google.com[XXX.XX.XXX.XXX] ehlo=2 starttls=1 mail=1 rcpt=0/1 bdat=0/1 quit=1 commands=5/7

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

أي اقتراحات؟

يشير الخطأ إلى أن MAIL_DOMAIN غير مضبوط على www.[mysite].com، أو أنه لا توجد فئة أو مجموعة تم تكوينها لاستقبال البريد الإلكتروني المرسل إلى test004@www.[mysite].com.

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

شكراً لردك. لقد تحققت من MAIL_DOMAIN بكل الطرق التي يمكنني تخيلها، وجربت كل تركيبة من قيمة MAIL_DOMAIN وعنوان البريد الإلكتروني الوجهة. ما هي القيمة في إعدادات Discourse التي يتم التحقق منها مقابلها، على سبيل المثال DISCOURSE_HOSTNAME، DISCOURSE_SMTP_DOMAIN، شيء آخر؟

أنا مرتبك بعض الشيء بسبب اقتراحك الثاني بالنظر إلى هذا السطر في المنشور الأصلي:

ألا يجب أن تظهر عمليات الرفض حتى قبل أن يتم إعداد Discourse للقيام بأي شيء بها؟ لا تظهر عمليات الارتداد أيضًا، لقد اختبرت باستخدام الطريقة الموصى بها هنا: Configure VERP to handle bouncing e-mails. لا يوجد أي أثر لأي شيء on admin/email.

هل يوجد سجل في أي من الحاويات يظهر (أو يمكن تكوينه لإظهار) مزيدًا من المعلومات حول التفاعل بين mail-receiver و app؟

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

هناك نوعان رئيسيان من عمليات الرفض، وهما تلك التي تحدث مبكرًا وتحدد ما إذا كان يجب تمرير البريد الإلكتروني إلى EmailReceiver الخاص بـ Discourse أم لا، وتلك التي تحدث أثناء معالجة Discourse للبريد الإلكتروني.

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

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

إذا أرسلت بريدًا إلكترونيًا إلى test-reject@[my-instance]، أتلقى إشعار رفض عام من مزود البريد الإلكتروني الخاص بي (وليس mail-receiver / Discourse) يخبرني بأن عنوان المستلم قد تم رفضه. هذا لأن mail-receiver يرفضه أثناء تفاعل SMTP.

عمليات الارتداد و VERP تتعلق بالرسائل الإلكترونية التي يرسلها مثيل Discourse الخاص بك بدلاً من استقبالها، على سبيل المثال، لإيقاف إرسال رسائل الإشعارات تلقائيًا إلى عنوان يرتد باستمرار. لا تتعلق هذه بـ mail-receiver.


شكّي هو أن اقتباسك من الدليل قد أربكك وأن كل شيء ربما يعمل بشكل صحيح في الواقع. إرسال بريد إلكتروني إلى some-random-address@MAIL_DOMAIN لن يتم قبوله ولن يظهر في عمليات الرفض، لذا فهذا ليس اختبارًا مفيدًا بحد ذاته (بخلاف التأكد من أن mail-receiver يستقبل رسائل البريد الإلكتروني، وهو ما رأيت أنه يفعله).

انتقل إلى فئة موجودة أو أنشئ فئة جديدة، افتح إعداداتها وانتقل إلى علامة التبويب “الإعدادات”. بالقرب من الأسفل ستجد custom incoming email address. قم بتعيين هذا إلى something@MAIL_DOMAIN، على سبيل المثال، عنوان test004 الذي جربته سابقًا، احفظ ثم حاول الإرسال إلى هذا العنوان.

يجب أن يتجاوز هذا mail-receiver، لذا يجب أن ترى إما منشورًا جديدًا تم إنشاؤه في الفئة أو رفضًا في Discourse.

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

شكراً لك، هذا توضيح مفيد جداً، سأقوم بإعداده واختباره لأرى.

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

إذن، حتى مع هذا الإعداد، وحتى لو قمت بإزالة سجلات MX الخاصة بـ Mailgun، هل ما زلت بحاجة إلى تكوين VERP على هذا الجانب لالتقاط الارتدادات وما إلى ذلك؟ حسناً، كنت أعتقد أن التسليم المباشر (direct-delivery) كان حلاً لمشاكلي مع خطافات الويب (webhooks) الخاصة بـ Mailgun، يبدو أنني سأحتاج إلى البدء في استكشاف الأخطاء وإصلاحها مرة أخرى.

إعجابَين (2)

أوه، أعتذر، أنت على حق في أنه يقول أنه يمكنك استخدام mail-receiver للارتدادات، أنا لست على دراية بكيفية عمل ذلك.

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

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

نعم، أنا متأكد تمامًا من أن هذا لم يعد دقيقًا، نظرًا لأنه تم تطبيق الرفض السريع في… (يتحقق من git log) مايو 2017.

بدون رؤية التكوين الفعلي الخاص بك، بما في ذلك تكوين مجموعة/فئة Discourse، من الصعب حقًا تحديد الخطأ. في 80٪ على الأقل من الحالات، يكون هناك خطأ مطبعي في مكان ما؛ اطلب من زميل (لا يحتاج إلى أن يكون شخصًا تقنيًا للغاية) إلقاء نظرة عليه، ومن المحتمل أن يكتشف أين وضعت حرف l بدلاً من i في حوالي خمس ثوانٍ. زوجتي تفعل ذلك لي بانتظام.

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

3 إعجابات

أنا متأكد من أن هذا ما حدث لي مع هذه المشكلة بالضبط الأسبوع الماضي. لقد نسخت أخيرًا ملف YML آخر من مكان آخر وعمل.

لقد بدا الأمر غريبًا، يا مات. نظرت في ملفات postfix وبدت صحيحة أيضًا، لكنها قالت إن اسم المضيف لم يتطابق. أقسم أنني نسختها ولصقتها، ولكن ربما ارتكبت خطأ التفكير في أنني أستطيع الكتابة.

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

من الجيد أن التعرف على الصوت بالذكاء الاصطناعي سيصلح كل ذلك لنا في أي يوم الآن. :troll:

3 إعجابات

[quote=“Simon Manning, post:476, topic:49487, username:Simon_Manning”]
أنا أشك في أن اقتباسك من الدليل قد أربكك وأن كل شيء يعمل بشكل صحيح في الواقع.
[/quote]لقد كنت على حق، فقد تم إعداد البريد الإلكتروني لفئة وإرسال البريد الإلكتروني إلى هناك كما هو متوقع، لذلك كنت أضرب رأسي في الحائط لأن عمليات الرفض كانت صامتة.

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

[quote=“Matt Palmer, post:479, topic:49487, username:mpalmer”]
إنه كذلك. مع التسليم المباشر، لا يحتاج مزود البريد الصادر لديك إلى المشاركة على الإطلاق في البريد الوارد. يجب أن يذهب كل شيء، سواء كان موضوعًا جديدًا أو ردًا أو ارتدادًا، مباشرة إلى mail-receiver (ومن ثم إلى Discourse للمعالجة).
[/quote]لا يزال هذا لا يعمل كما هو متوقع. لقد نجحت في تشغيل خطافات الويب، لذا يمكنني رؤية العديد من الارتدادات، لكنني أعرف أنها من خطافات الويب الخاصة بـ Mailgun لأن لديها المشكلة الموصوفة هنا: “خطأ Discourse::NotFound” عند النقر على حقل “نوع البريد الإلكتروني” في admin/email/bounced

أنا لا أفهم حقًا كيف يحصل Mailgun على الارتدادات في المقام الأول، نظرًا لعدم وجود سجلات MX تشير إلى خوادمهم، أفترض أنهم يقومون بتعيين مسار إرجاع أثناء إرسال البريد الصادر؟

وأرى الارتدادات في سجلات mail-receiver، لكنها لا تصل إلى app. يبدو أنها تُرفض بصمت. إليك سطر في السجلات يمكنني ربطه بارتداد تم استلامه عبر خطافات الويب:

NOQUEUE: reject: RCPT from mail-[id1].outbound.protection.outlook.com[XX.XX.XX.XX]: 450 4.7.1 <bounce+[id2]-[email]=[address].com@www.[mydomain].com>: Recipient address rejected: Internal error, API request failed; from=<> to=<bounce+[id#]-[email]=[address].com@www.[mydomain].com> proto=ESMTP helo=<[id3].outbound.protection.outlook.com>

هل أحتاج إلى إضافة bounce+{%something}@www.mydomain.com كعنوان مدرج في القائمة البيضاء في مكان ما حتى يتم تمريرها؟

إعجابَين (2)

نعم، من المحتمل أنهم يعيدون كتابة مسار الإرجاع (المعروف أيضًا باسم “envelope from”) عندما يمر البريد الإلكتروني الصادر عبر خوادمهم. من المحتمل أن يكون هناك إعداد في مكان ما لإيقاف ذلك، لكنني لم أستخدم Mailgun، لذلك لا يمكنني التأكيد (أو معرفة مكان هذا الإعداد).

حسنًا، هذا خطأ بين mail-receiver و Discourse. يجب أن يكون هناك سطر في السجلات قريبًا قبل ذلك يبدأ بـ “Failed to GET smtp_should_reject answer” والذي سيخبرك بالمزيد حول ما فشل ولماذا، ويجب أن يتوافق ذلك مع رسالة خطأ ما في سجلات Discourse.

إعجابَين (2)

Mar 21 17:02:21 discourse-smtp-fast-rejection[1149]: فشل في الحصول على إجابة smtp_should_reject من https://www.mydomain.com/admin/email/smtp_should_reject.json: 400

هل يمكن أن يكون ذلك متعلقًا بالمرسل الفارغ، from=\u003c\u003e؟ لا أرى شيئًا في السجلات حول هذا الموضوع. هل يشير الـ 400 إلى أن smtp_should_reject.json غير موجود؟

إعجابَين (2)

إذا لم يكن مورد HTTP هذا موجودًا، فسيكون 404، وليس 400. لا أعتقد أن مرسلًا فارغًا يجب أن يمثل مشكلة، لأن هذه هي الطريقة التي سيتم بها تسليم جميع عمليات الارتداد. يجب أن تُرجع مفتاح واجهة برمجة تطبيقات غير صحيح (أعتقد) 403، ولكن لا يمكنني التأكيد على ذلك بشكل مطلق من الذاكرة، لذا ربما يستحق ذلك التحقق على الأقل، فقط في حالة. إذا لم تقدم سجلات Discourse أي مؤشرات حول سبب كون الطلب سيئًا، أخشى أنك ستخوض جلسة تصحيح أخطاء مؤلمة - ليس لدي نظام ممكّن لـ mail-receiver للعب به بسهولة في الوقت الحالي. سيكون منصب استشاري بالنسبة لي للوصول إلى جوهر ما يحدث وإصلاحه لك، أخشى ذلك.

3 إعجابات

في الوقت الحالي، لا يبدو أن هذا يسبب أي مشاكل، فقد نجحت في تشغيل الارتدادات باستخدام خطافات الويب (webhooks) ومعظم الارتدادات لا تنشئ بريدًا إلكترونيًا (موضوع آخر ذكر هذا الرد في Stack Overflow، وهو يطابق ما أراه). كما أن الرد عبر البريد الإلكتروني يعمل كما هو متوقع أيضًا. مهما كان سبب الفشل، فهو نادر ولا يعطل الوظيفة العادية.

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

إعجابَين (2)

@JammyDodger هل يمكن إعادة تسمية هذا الشيء للسماح بالبحث عن “mail-receiver” للعثور عليه؟ لم أتمكن في الغالب من العثور على هذا الموضوع دون عدة محاولات منذ ثلاث سنوات عندما تمت إزالة “straightforward” من العنوان.

4 إعجابات