<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Pedro Paiva</title>
  <subtitle>Pedro Paiva (vsppedro) is a software engineer working on email systems and AI agents for email processing and software development, using Ruby on Rails, Python, and AWS SES.</subtitle>
  <link href="https://vsppedro.github.io/feed.xml" rel="self" type="application/atom+xml"/>
  <link href="https://vsppedro.github.io/" rel="alternate"/>
  <id>https://vsppedro.github.io/feed.xml</id>
  <updated>2026-11-02T12:15:05-03:00</updated>
  <author><name>Pedro Paiva</name><uri>https://vsppedro.github.io/#about</uri></author>
  
  <entry>
    <title>An email lab: experiments for understanding delivery</title>
    <link href="https://vsppedro.github.io/blog/an-email-lab-experiments-for-understanding-delivery/" rel="alternate"/>
    <id>https://vsppedro.github.io/blog/an-email-lab-experiments-for-understanding-delivery/</id>
    <published>2026-10-13T12:00:00-03:00</published>
    <updated>2026-10-13T12:00:00-03:00</updated>
    <summary type="text">Run five controlled investigations and record what each observation actually establishes.</summary>
  </entry>
  
  <entry>
    <title>Building reliable email workflows in an application</title>
    <link href="https://vsppedro.github.io/blog/building-reliable-email-workflows/" rel="alternate"/>
    <id>https://vsppedro.github.io/blog/building-reliable-email-workflows/</id>
    <published>2026-10-12T12:00:00-03:00</published>
    <updated>2026-10-12T12:00:00-03:00</updated>
    <summary type="text">Use durable email intents, explicit send attempts, and authenticated events to recover from failures.</summary>
  </entry>
  
  <entry>
    <title>Email transport security: what TLS protects</title>
    <link href="https://vsppedro.github.io/blog/email-transport-security-what-tls-protects/" rel="alternate"/>
    <id>https://vsppedro.github.io/blog/email-transport-security-what-tls-protects/</id>
    <published>2026-10-11T12:00:00-03:00</published>
    <updated>2026-10-11T12:00:00-03:00</updated>
    <summary type="text">Distinguish individual encrypted hops, validated submission, and policies for server-to-server TLS.</summary>
  </entry>
  
  <entry>
    <title>DMARC: connecting authentication to the visible sender</title>
    <link href="https://vsppedro.github.io/blog/dmarc-connecting-authentication-to-the-visible-sender/" rel="alternate"/>
    <id>https://vsppedro.github.io/blog/dmarc-connecting-authentication-to-the-visible-sender/</id>
    <published>2026-10-10T12:00:00-03:00</published>
    <updated>2026-10-10T12:00:00-03:00</updated>
    <summary type="text">Apply the updated DMARC standard to alignment, policies, reports, and a careful rollout.</summary>
  </entry>
  
  <entry>
    <title>DKIM: how an email carries a verifiable signature</title>
    <link href="https://vsppedro.github.io/blog/dkim-how-email-carries-a-verifiable-signature/" rel="alternate"/>
    <id>https://vsppedro.github.io/blog/dkim-how-email-carries-a-verifiable-signature/</id>
    <published>2026-10-09T12:00:00-03:00</published>
    <updated>2026-10-09T12:00:00-03:00</updated>
    <summary type="text">Read a DKIM signature, find its public key, and understand what verification proves.</summary>
  </entry>
  
  <entry>
    <title>SPF: which servers are allowed to send for a domain?</title>
    <link href="https://vsppedro.github.io/blog/spf-which-servers-can-send-for-a-domain/" rel="alternate"/>
    <id>https://vsppedro.github.io/blog/spf-which-servers-can-send-for-a-domain/</id>
    <published>2026-10-08T12:00:00-03:00</published>
    <updated>2026-10-08T12:00:00-03:00</updated>
    <summary type="text">Evaluate SPF identities, mechanisms, forwarding failures, and lookup limits.</summary>
  </entry>
  
  <entry>
    <title>Accepted, delayed, bounced: understanding email delivery outcomes</title>
    <link href="https://vsppedro.github.io/blog/accepted-delayed-bounced-email-delivery-outcomes/" rel="alternate"/>
    <id>https://vsppedro.github.io/blog/accepted-delayed-bounced-email-delivery-outcomes/</id>
    <published>2026-10-07T12:00:00-03:00</published>
    <updated>2026-10-07T12:00:00-03:00</updated>
    <summary type="text">Use delivery timelines and status codes to distinguish acceptance, retry, and permanent failure.</summary>
  </entry>
  
  <entry>
    <title>Inside an email: MIME, HTML, attachments, and encoding</title>
    <link href="https://vsppedro.github.io/blog/inside-an-email-mime-html-attachments-and-encoding/" rel="alternate"/>
    <id>https://vsppedro.github.io/blog/inside-an-email-mime-html-attachments-and-encoding/</id>
    <published>2026-10-06T12:00:00-03:00</published>
    <updated>2026-10-06T12:00:00-03:00</updated>
    <summary type="text">Inspect MIME alternatives, attachments, inline images, and encodings in a saved message.</summary>
  </entry>
  
  <entry>
    <title>How DNS tells email servers where to deliver a message</title>
    <link href="https://vsppedro.github.io/blog/how-dns-routes-email/" rel="alternate"/>
    <id>https://vsppedro.github.io/blog/how-dns-routes-email/</id>
    <published>2026-10-05T12:00:00-03:00</published>
    <updated>2026-10-05T12:00:00-03:00</updated>
    <summary type="text">Read MX preferences, address lookups, null MX, and DNS failures without guessing mailbox validity.</summary>
  </entry>
  
  <entry>
    <title>Email envelopes and headers: why there is more than one sender</title>
    <link href="https://vsppedro.github.io/blog/email-envelopes-and-headers/" rel="alternate"/>
    <id>https://vsppedro.github.io/blog/email-envelopes-and-headers/</id>
    <published>2026-10-04T12:00:00-03:00</published>
    <updated>2026-10-04T12:00:00-03:00</updated>
    <summary type="text">Separate the displayed sender, reply destination, and delivery-failure address.</summary>
  </entry>
  
  <entry>
    <title>An SMTP conversation, step by step</title>
    <link href="https://vsppedro.github.io/blog/an-smtp-conversation-step-by-step/" rel="alternate"/>
    <id>https://vsppedro.github.io/blog/an-smtp-conversation-step-by-step/</id>
    <published>2026-10-03T12:00:00-03:00</published>
    <updated>2026-10-11T15:41:40-03:00</updated>
    <summary type="text">Follow a welcome email through the conversation between mail servers, from the first greeting to final acceptance.</summary>
  </entry>
  
  <entry>
    <title>How email works: the components behind a message</title>
    <link href="https://vsppedro.github.io/blog/how-email-works-the-components-behind-a-message/" rel="alternate"/>
    <id>https://vsppedro.github.io/blog/how-email-works-the-components-behind-a-message/</id>
    <published>2026-10-02T12:00:00-03:00</published>
    <updated>2026-10-11T09:16:17-03:00</updated>
    <summary type="text">Meet the clients, servers, and mailboxes behind a welcome email.</summary>
  </entry>
  
  <entry>
    <title>What happens after my application sends an email through AWS SES?</title>
    <link href="https://vsppedro.github.io/blog/what-happens-after-my-application-sends-an-email-through-aws-ses/" rel="alternate"/>
    <id>https://vsppedro.github.io/blog/what-happens-after-my-application-sends-an-email-through-aws-ses/</id>
    <published>2026-10-01T12:00:00-03:00</published>
    <updated>2026-10-10T19:47:28-03:00</updated>
    <summary type="text">Follow a welcome email through SES, from the first API response to the receiving server and the delivery events our application needs.</summary>
  </entry>
  
</feed>
