-- Thanks to https://raw.githubusercontent.com/fatalbanana local lua_maps = require 'lua_maps' local rspamd_regexp = require 'rspamd_regexp' local rspamd_util = require 'rspamd_util' local ivm_sendgrid_ids = lua_maps.map_add_from_ucl( 'https://www.invaluement.com/spdata/sendgrid-id-dnsbl.txt', 'set', 'Invaluement Service Provider DNSBL: Sendgrid IDs' ) local ivm_sendgrid_envfromdomains = lua_maps.map_add_from_ucl( 'https://www.invaluement.com/spdata/sendgrid-envelopefromdomain-dnsbl.txt', 'set', 'Invaluement Service Provider DNSBL: Sendgrid envelope domains' ) local cb_id = rspamd_config:register_symbol({ name = 'IVM_SENDGRID', callback = function(task) -- Is it Sendgrid? local sg_hdr = task:get_header('X-SG-EID') if not sg_hdr then return end -- Get original envelope from local env_from = task:get_from{'smtp', 'orig'} if not env_from then return end -- Check normalised domain in domains list if ivm_sendgrid_envfromdomains and ivm_sendgrid_envfromdomains:get_key(rspamd_util.get_tld(env_from[1].domain)) then task:insert_result('IVM_SENDGRID_DOMAIN', 1.0) end -- Check ID in ID list local lp_re = rspamd_regexp.create_cached([[^bounces\+(\d+)-]]) local res = lp_re:search(env_from[1].user, true, true) if not res then return end if ivm_sendgrid_ids and ivm_sendgrid_ids:get_key(res[1][2]) then task:insert_result('IVM_SENDGRID_ID', 1.0) end end, description = 'Invaluement Service Provider DNSBL: Sendgrid', type = 'callback', }) rspamd_config:register_symbol({ name = 'IVM_SENDGRID_DOMAIN', parent = cb_id, group = 'ivmspdnsbl', score = 8.0, type = 'virtual', }) rspamd_config:register_symbol({ name = 'IVM_SENDGRID_ID', parent = cb_id, group = 'ivmspdnsbl', score = 8.0, type = 'virtual', })