KCAS
11 نوفمبر 2023، 10:24م
1
مرحباً،
لقد بدأت في استخدام SendGrid webhook مع مفتاح التحقق. الآن نحصل على الكثير من هذه الأخطاء. لقد أرسلت دعوة جماعية باستخدام SendGrid.
app/controllers/webhooks_controller.rb:29:in `block in sendgrid'
app/controllers/webhooks_controller.rb:24:in `each'
app/controllers/webhooks_controller.rb:24:in `sendgrid'
actionpack (7.0.7) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (7.0.7) lib/abstract_controller/base.rb:215:in `process_action'
actionpack (7.0.7) lib/action_controller/metal/rendering.rb:165:in `process_action'
actionpack (7.0.7) lib/abstract_controller/callbacks.rb:234:in `block in process_action'
activesupport (7.0.7) lib/active_support/callbacks.rb:107:in `run_callbacks'
actionpack (7.0.7) lib/abstract_controller/callbacks.rb:233:in `process_action'
actionpack (7.0.7) lib/action_controller/metal/rescue.rb:23:in `process_action'
actionpack (7.0.7) lib/action_controller/metal/instrumentation.rb:67:in `block in process_action'
activesupport (7.0.7) lib/active_support/notifications.rb:206:in `block in instrument'
activesupport (7.0.7) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (7.0.7) lib/active_support/notifications.rb:206:in `instrument'
actionpack (7.0.7) lib/action_controller/metal/instrumentation.rb:66:in `process_action'
actionpack (7.0.7) lib/action_controller/metal/params_wrapper.rb:259:in `process_action'
activerecord (7.0.7) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (7.0.7) lib/abstract_controller/base.rb:151:in `process'
actionview (7.0.7) lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler (3.1.1) lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
actionpack (7.0.7) lib/action_controller/metal.rb:188:in `dispatch'
actionpack (7.0.7) lib/action_controller/metal.rb:251:in `dispatch'
actionpack (7.0.7) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
actionpack (7.0.7) lib/action_dispatch/routing/route_set.rb:32:in `serve'
actionpack (7.0.7) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (7.0.7) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (7.0.7) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (7.0.7) lib/action_dispatch/routing/route_set.rb:852:in `call'
lib/middleware/omniauth_bypass_middleware.rb:64:in `call'
rack (2.2.8) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.8) lib/rack/conditional_get.rb:40:in `call'
rack (2.2.8) lib/rack/head.rb:12:in `call'
actionpack (7.0.7) lib/action_dispatch/http/permissions_policy.rb:38:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:389:in `call'
lib/middleware/gtm_script_nonce_injector.rb:10:in `call'
rack (2.2.8) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.8) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (7.0.7) lib/action_dispatch/middleware/cookies.rb:704:in `call'
actionpack (7.0.7) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (7.0.7) lib/active_support/callbacks.rb:99:in `run_callbacks'
actionpack (7.0.7) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (7.0.7) lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call'
actionpack (7.0.7) lib/action_dispatch/middleware/show_exceptions.rb:29:in `call'
logster (2.13.1) lib/logster/middleware/reporter.rb:40:in `call'
railties (7.0.7) lib/rails/rack/logger.rb:40:in `call_app'
railties (7.0.7) lib/rails/rack/logger.rb:27:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
actionpack (7.0.7) lib/action_dispatch/middleware/remote_ip.rb:93:in `call'
actionpack (7.0.7) lib/action_dispatch/middleware/request_id.rb:26:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
rack (2.2.8) lib/rack/method_override.rb:24:in `call'
actionpack (7.0.7) lib/action_dispatch/middleware/executor.rb:14:in `call'
rack (2.2.8) lib/rack/sendfile.rb:110:in `call'
actionpack (7.0.7) lib/action_dispatch/middleware/host_authorization.rb:131:in `call'
rack-mini-profiler (3.1.1) lib/mini_profiler.rb:260:in `call'
message_bus (4.3.8) lib/message_bus/rack/middleware.rb:60:in `call'
lib/middleware/request_tracker.rb:233:in `call'
railties (7.0.7) lib/rails/engine.rb:530:in `call'
railties (7.0.7) lib/rails/railtie.rb:226:in `public_send'
railties (7.0.7) lib/rails/railtie.rb:226:in `method_missing'
rack (2.2.8) lib/rack/urlmap.rb:74:in `block in call'
rack (2.2.8) lib/rack/urlmap.rb:58:in `each'
rack (2.2.8) lib/rack/urlmap.rb:58:in `call'
unicorn (6.1.0) lib/unicorn/http_server.rb:634:in `process_client'
unicorn (6.1.0) lib/unicorn/http_server.rb:739:in `worker_loop'
unicorn (6.1.0) lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn (6.1.0) lib/unicorn/http_server.rb:143:in `start'
unicorn (6.1.0) bin/unicorn:128:in `<top (required)>'
vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `load'
vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `<main>'
ENV
|REQUEST_URI|/webhooks/sendgrid|
|REQUEST_METHOD|POST|
|HTTP_USER_AGENT|SendGrid Event API|
يبدو أن هذا هو نفس المشكلة التي تم إصلاحها منذ فترة: Sendgrid error: NoMethodError (undefined method `[]' for nil:NilClass) - #3 by Terrapop
pfaffman
(Jay Pfaffman)
12 نوفمبر 2023، 1:34م
2
هل تم إنشاؤها لعمليات الارتداد من قائمتك التي ليست مستخدمي discourse؟
KCAS
12 نوفمبر 2023، 3:59م
3
لست متأكدًا مما إذا كانت هذه ارتدادات، كيف يمكننا التحقق؟ من المرجح أن يكون ذلك حول الوقت الذي قمنا فيه بدعوة جماعية للمستخدمين غير المسجلين في ديسكورس.
selase
(Selase Krakani)
13 نوفمبر 2023، 11:21ص
4
قد يكون هناك خطأ ما في حمولة الحدث التي يتم تلقيها من Sendgrid. يبدو أن status لم يتم تعيينه في أحداث bounce كما هو متوقع.
بافتراض أنك حصلت على تتبع الخلفية من logster على \u003cYOUR_SITE\u003e/logs، يجب أن تحتوي علامة التبويب env على تفاصيل الطلب. هل يمكنك تقديم نسخة منقاة من الحمولة من هناك؟
KCAS
13 نوفمبر 2023، 12:35م
5
لا يوجد الكثير من المعلومات هناك، معظمها وضعته هنا.
للإشارة الكاملة، وضعتها أدناه كما هو مطلوب
hostname
serverhostname
process_id
248749
application_version
a8d6dc4d3a5c3d937ff0bb162c93ec628428cda1
HTTP_HOST
forum.URL.co.uk
REQUEST_URI
/webhooks/sendgrid
REQUEST_METHOD
POST
HTTP_USER_AGENT
SendGrid Event API
HTTP_X_FORWARDED_FOR
IPADDRESS
HTTP_X_REAL_IP
IPADDRESS
time
Su 5:54 pm
selase
(Selase Krakani)
13 نوفمبر 2023، 1:23م
6
أنا آسف، كان يجب أن أكون أكثر تحديدًا. يحتوي نص الطلب على الأدلة اللازمة. يجب أن تكون قادرًا على العثور على هذا بعد صف time. قد تحتاج إلى التمرير لأعلى أو توسيع اللوحة لرؤية هذا.
KCAS
13 نوفمبر 2023، 1:58م
7
مرحباً،
لا توجد معلومات إضافية بعد صف الوقت، لقد تحققت من جميع الأخطاء الـ 34. يبدو الأمر غريباً ولكنه غير مدرج؟
selase
(Selase Krakani)
14 نوفمبر 2023، 12:02م
8
نعم، هذا غريب. هل يمكنك استرداد الحمولة من لوحة تحكم SendGrid بدلاً من ذلك؟
وفقًا لأحدث وثائق SendGrid webhooks، يجب أن يعمل نقطة النهاية الحالية في Discourse دون مشاكل ولكن الخطأ يشير إلى مشكلة في حمولة الطلب لذا ستكون العينة رائعة.
cultiv
(Sebastiaan Janssen)
23 فبراير 2025، 8:48ص
9
هل توصلت إلى حل لهذه المشكلة؟ لدي نفس الخطأ، في نفس السطر من التعليمات البرمجية:
end
def sendgrid
if SiteSetting.sendgrid_verification_key.present?
return signature_failure if !valid_sendgrid_signature?
else
Rails.logger.warn(
"Received a Sendgrid webhook, but no verification key has been configured. This is unsafe behaviour and will be disallowed in the future.",
)
end
events = params["_json"] || [params]
events.each do |event|
message_id = Email::MessageIdService.message_id_clean((event["smtp-id"] || ""))
to_address = event["email"]
error_code = event["status"]
if event["event"] == "bounce"
# Sendgrid does not provide status field for emails that can't be delivered due to the recipient's server not existing
# so we set the error code to 5.1.2 which translates to permanent failure bad destination system address.
error_code = "5.1.2" if !error_code && event["type"] == "blocked"
أنا لست على دراية بلغة Ruby، ولكن يبدو أنها قادرة على تحليل JSON بشكل جيد حتى محاولة تحليل رمز الخطأ، Email::SMTP_STATUS_TRANSIENT_FAILURE يشير إلى:
لقد تحققت في Webhook.site مما ترسله Sendgrid فعليًا عندما أختبر الـ webhook، ويبدو أنه كالتالي للارتداد:
[
{
"email": "example@test.com",
"timestamp": 1740136261,
"smtp-id": "<14c5d75ce93.dfd.64b469@ismtpd-555>",
"event": "bounce",
"category": [
"cat facts"
],
"sg_event_id": "ovGQ2rRo8ytNezHPDq-7Ig==",
"sg_message_id": "14c5d75ce93.dfd.64b469.filter0001.16648.5515E0B88.0",
"reason": "500 unknown recipient",
"status": "5.0.0"
}
]
يبدو أنه يجب أن يعمل!
cultiv
(Sebastiaan Janssen)
23 فبراير 2025، 9:02ص
10
آها.. أجيب على سؤالي بنفسي، زر “اختبار التكامل” الخاص بـ Webhook يخدعك..
هذه هي الحمولة الفعلية إذا أرسلت بريدًا إلكترونيًا فعليًا إلى عنوان بريد إلكتروني غير موجود:
[
{
"bounce_classification": "Unclassified",
"email": "noemail@this.does.not.exist.tld",
"event": "bounce",
"reason": "unable to get mx info: failed to get IPs from PTR record: lookup <nil>: unrecognized address",
"sg_event_id": "Ym91bmNlLTQtNTA0ODUxOTUtZXVvMmlLeGRTYXlQRjRZRTQtLUk3QS0w",
"sg_message_id": "euo2iKxdSayPF4YE4--I7A.recvd-5f54b5d587-pczjm-1-67BADEEA-6.0",
"smtp-id": "<870b3a2a-160c-4fc8-bc9a-bd0d5b943b81@forum.umbraco.com>",
"timestamp": 1740300320,
"tls": 0,
"type": "blocked"
}
]
وهنا لدينا: لا يوجد حقل status.
هذا عندما أستخدم عن قصد نطاقًا غير موجود، أشعر أن هذا يجب معالجته، ربما يمكن أن يكون "type": "blocked" هو المؤشر الذي يبحث عنه Discourse.
كمحاولة مختلفة، وضعت شيئًا غير منطقي أمام outlook.com وهذا يعطيني حمولة عاملة:
[
{
"bounce_classification": "Invalid Address",
"email": "oeihoiwehitwiohtriuweruiwerwierhwuerguiwerg@outlook.com",
"event": "bounce",
"ip": "149.72.1.78",
"reason": "550 5.5.0 Requested action not taken: mailbox unavailable (S2017062302). [HK3PEPF0000021E.apcprd03.prod.outlook.com 2025-02-23T08:54:35.950Z 08DD502499E1A0AA]",
"sg_event_id": "Ym91bmNlLTAtNTA0ODUxOTUtQWJFZ2pVejZUUFd3MnJNTnJabDg4Zy0w",
"sg_message_id": "AbEgjUz6TPWw2rMNrZl88g.recvd-786d47b7ff-tsp86-1-67BAE249-D.0",
"smtp-id": "<d8dc253e-6e9a-4418-8478-60780eb4898c@forum.umbraco.com>",
"status": "5.5.0",
"timestamp": 1740300876,
"tls": 1,
"type": "bounce"
}
]
tgxworld
(Alan Tan)
25 فبراير 2025، 5:17ص
12
@cultiv شكراً لك على التعمق في المشكلة هنا وأخذ الوقت لتقديم طلب سحب. لقد استخدمت طلب السحب الخاص بك كأساس ودمجت إصلاحًا للمشكلة في FIX: No method error in `WebhooksController#sendgrid` (#31495) · discourse/discourse@209d289 · GitHub .
إعجابَين (2)
cultiv
(Sebastiaan Janssen)
25 فبراير 2025، 2:08م
13
رائع، لقد كان ذلك مفيدًا جدًا. لم أكن لأتمكن من فعل كل ذلك بمفردي
شكرًا، لقد قمت بالتحديث ويقوم الاختبار اليدوي الآن بالأشياء بشكل صحيح، وسجل الأخطاء نظيف ويمكنني رؤية البريد المرتد في سجل البريد
إعجاب واحد (1)