<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>zSender blog</title>
  <link href="https://zsender.io/blog"/>
  <link rel="self" href="https://zsender.io/blog/feed.xml"/>
  <id>https://zsender.io/blog</id>
  <updated>2026-10-05T00:00:00Z</updated>
  <author><name>zSender</name></author>
  <entry>
    <title>@fastify/cors v11 blocks browser DELETE and PATCH</title>
    <link href="https://zsender.io/blog/fastify-cors-v11-default-methods"/>
    <id>https://zsender.io/blog/fastify-cors-v11-default-methods</id>
    <updated>2026-10-05T00:00:00Z</updated>
    <summary>A major bump of @fastify/cors narrowed its default methods to GET, HEAD and POST. Browsers stopped sending DELETE and PATCH, and our server logged no error.</summary>
  </entry>
  <entry>
    <title>pino logs your Error as {} unless the key is err</title>
    <link href="https://zsender.io/blog/pino-error-key-err"/>
    <id>https://zsender.io/blog/pino-error-key-err</id>
    <updated>2026-10-05T00:00:00Z</updated>
    <summary>pino runs its error serializer on the key err only. Under any other key an Error goes through JSON.stringify and is logged as an empty object.</summary>
  </entry>
  <entry>
    <title>SpamAssassin DNSBLs go quiet on shared DNS</title>
    <link href="https://zsender.io/blog/spamassassin-dnsbl-shared-resolver"/>
    <id>https://zsender.io/blog/spamassassin-dnsbl-shared-resolver</id>
    <updated>2026-10-05T00:00:00Z</updated>
    <summary>Blocklists refuse queries that arrive through a shared DNS resolver. SpamAssassin scores the refusal at 0.001, and the spam score still looks normal.</summary>
  </entry>
</feed>
