KCAS
11 Novembre 2023, 10:24pm
1
Ciao,
Ho iniziato a usare il webhook di SendGrid con la chiave di verifica. Ora ricevo molti di questi errori. Ho inviato un invito di massa con 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|
Sembra essere lo stesso di qui, che era un problema risolto tempo fa: Sendgrid error: NoMethodError (undefined method `[]' for nil:NilClass) - #3 by Terrapop
pfaffman
(Jay Pfaffman)
12 Novembre 2023, 1:34pm
2
Quelli generati per i rimbalzi dalla tua lista che non sono utenti di discourse?
KCAS
12 Novembre 2023, 3:59pm
3
Non sono sicuro che siano rimbalzi, come potremmo verificarlo? È molto probabile che sia successo nel momento in cui abbiamo effettuato un invito di massa a utenti non-discourse.
selase
(Selase Krakani)
13 Novembre 2023, 11:21am
4
Potrebbe esserci un problema con il payload dell’evento ricevuto da Sendgrid. Sembra che status non venga impostato sugli eventi bounce come previsto.
Supponendo che tu abbia ottenuto il backtrace da logster su \u003cYOUR_SITE\u003e/logs, la scheda env dovrebbe contenere i dettagli della richiesta. Potresti fornire una copia sanificata del payload da lì?
KCAS
13 Novembre 2023, 12:35pm
5
Non ci sono molte informazioni lì, la maggior parte l’ho inserita qui.
Per il riferimento completo, l’ho inserito qui sotto come richiesto
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
Dom 17:54
selase
(Selase Krakani)
13 Novembre 2023, 1:23pm
6
Mi dispiace, avrei dovuto essere più specifico. Il corpo della richiesta contiene gli indizi necessari. Dovresti essere in grado di trovarlo dopo la riga time. Potrebbe essere necessario scorrere verso l’alto o espandere il pannello per vederlo.
KCAS
13 Novembre 2023, 1:58pm
7
Ciao,
Non ci sono ulteriori informazioni dopo la riga Time, ho controllato tutti i 34 errori. Sembra strano, tuttavia non è incluso?
selase
(Selase Krakani)
14 Novembre 2023, 12:02pm
8
Sì, è strano. Potresti recuperare il payload dalla dashboard di SendGrid invece?
Secondo la documentazione più recente dei webhook di SendGrid, l’endpoint corrente in Discourse dovrebbe funzionare senza problemi, ma l’errore indica un problema con il payload della richiesta, quindi un campione sarebbe ottimo.
cultiv
(Sebastiaan Janssen)
23 Febbraio 2025, 8:48am
9
Hai mai risolto questo problema? Ho lo stesso errore, sulla stessa riga di codice:
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"
Non ho familiarità con Ruby, ma sembra che possa analizzare il JSON senza problemi fino al tentativo di analizzare il codice di errore, Email::SMTP_STATUS_TRANSIENT_FAILURE punta a:
Ho controllato su Webhook.site cosa invia effettivamente Sendgrid quando testo il webhook e per un rimbalzo sembra così:
[
{
"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"
}
]
Sembra che dovrebbe funzionare!
cultiv
(Sebastiaan Janssen)
23 Febbraio 2025, 9:02am
10
Aha.. mi rispondo da solo, il pulsante “Test integration” del Webhook ti dice il falso..
Ecco il payload effettivo se invio effettivamente un’email a un indirizzo email inesistente:
[
{
"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"
}
]
Ed ecco qua: nessun campo status.
Questo accade quando uso volutamente un dominio che non esiste, penso che questo dovrebbe essere gestito, forse \"type\": \"blocked\" può essere l’indicatore che Discourse cerca.
Come tentativo diverso ho messo qualcosa di senza senso davanti a outlook.com e questo mi dà un payload funzionante:
[
{
"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 Febbraio 2025, 5:17am
12
@cultiv Grazie per aver approfondito il problema e per aver dedicato del tempo all’invio di una PR. Ho utilizzato la tua PR come base e ho unito una correzione per il problema in FIX: No method error in `WebhooksController#sendgrid` (#31495) · discourse/discourse@209d289 · GitHub .
2 Mi Piace
cultiv
(Sebastiaan Janssen)
25 Febbraio 2025, 2:08pm
13
Fantastico, è stato molto utile. Non sarei stato in grado di fare tutto questo da solo
Grazie, ho aggiornato e un test manuale ora fa le cose correttamente, il registro degli errori è pulito e posso vedere che l’email è rimbalzata nel registro di posta
1 Mi Piace