<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: SendFleet</title>
    <description>The latest articles on DEV Community by SendFleet (@sendfleet).</description>
    <link>https://dev.to/sendfleet</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3930499%2F8fd56927-b741-4db9-a80f-bf380838ef26.png</url>
      <title>DEV Community: SendFleet</title>
      <link>https://dev.to/sendfleet</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sendfleet"/>
    <language>en</language>
    <item>
      <title>Amazon SES without the AWS homework: how SendFleet runs your email in your own account</title>
      <dc:creator>SendFleet</dc:creator>
      <pubDate>Wed, 28 Oct 2026 06:11:56 +0000</pubDate>
      <link>https://dev.to/sendfleet/amazon-ses-without-the-aws-homework-how-sendfleet-runs-your-email-in-your-own-account-39p1</link>
      <guid>https://dev.to/sendfleet/amazon-ses-without-the-aws-homework-how-sendfleet-runs-your-email-in-your-own-account-39p1</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2getym25ykup8vul0rf3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2getym25ykup8vul0rf3.png" alt="One Click Account Setup" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Amazon SES is cheap, fast and reliable, and your sending reputation is your own. Most teams that choose it then spend days on everything around sending. This post walks through that work, and how SendFleet automates it inside the customer's own AWS account.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Getting access without holding keys
&lt;/h2&gt;

&lt;p&gt;SendFleet never stores AWS keys. The customer launches a CloudFormation template that creates one IAM role, &lt;code&gt;SendFleet-BYOC-Role&lt;/code&gt;. Its trust policy allows exactly two SendFleet roles, and only with an ExternalId generated for that customer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"Condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"StringEquals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"sts:ExternalId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;your ExternalId&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ArnEquals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"aws:PrincipalArn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:iam::&amp;lt;sendfleet&amp;gt;:role/SendFleetByocRelay"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:iam::&amp;lt;sendfleet&amp;gt;:role/SendFleetByocControl"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The ExternalId prevents the confused-deputy problem. The &lt;code&gt;PrincipalArn&lt;/code&gt; condition means even SendFleet's own web servers cannot assume the role. All management calls go through one control&lt;br&gt;
Lambda in an isolated AWS account.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The region problem
&lt;/h2&gt;

&lt;p&gt;SES production access is granted &lt;strong&gt;per region&lt;/strong&gt;. An account can be live in Ireland and sandboxed in Singapore. SendFleet reads SES in every supported region with one role session, in parallel, and picks the region with production access and the biggest quota. If there is none, it prefers a region where AWS is already reviewing a request. Choosing a region by hand stays available, for data residency.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Tracking that heals itself, but never fights you
&lt;/h2&gt;

&lt;p&gt;SendFleet creates a configuration set (&lt;code&gt;sendfleet-tracking&lt;/code&gt;) and an SNS topic (&lt;code&gt;sendfleet-events&lt;/code&gt;) in the customer's account, and subscribes its own queue to the topic. Fixed names make every step idempotent: a repair re-creates the same set, so messages already queued with that name still work.&lt;/p&gt;

&lt;p&gt;A daily sweep checks the set, topic and subscription. If something drifted, it repairs it, unless:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the customer turned automatic repair off: it only reports the drift;&lt;/li&gt;
&lt;li&gt;the same resources were removed again within 24 hours of a repair: it assumes the customer meant it, stops, and asks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every write to the configuration row is fenced on a generation counter, so a stale worker can never overwrite a newer decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Paying only for the events you need
&lt;/h2&gt;

&lt;p&gt;SNS bills the customer per published event. Bounces, complaints and rejections are always published: protection depends on them, and they are rare. Deliveries, which are about one event per recipient, are optional.&lt;/p&gt;

&lt;p&gt;"Sent" is never published at all. The relay already knows when SES accepted a message, so it reports that itself, signed with a secret only SendFleet holds.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Protection before AWS steps in
&lt;/h2&gt;

&lt;p&gt;AWS reviews accounts at a 5% bounce rate or 0.1% complaint rate. SendFleet evaluates the customer's own traffic over 24 hours and 7 days against a profile they choose. It warns first, then pauses sending with a clear API error until the customer reviews and resumes. Addresses skipped by SES Auto Validation are counted as suppressed, not bounced, matching how AWS measures it.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Logs without content
&lt;/h2&gt;

&lt;p&gt;With email logs on, each send appears in the log as "Queued" the moment the API accepts it, moves to sent, delivered or bounced as events arrive, and turns "Failed" with a plain reason if it never reaches SES. Bodies are never stored, and subjects can be switched off.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;SendFleet is free for 3,000 emails a month and $5 a month after that, with 20,000 emails included emails included, then $0.10 per 1,000.&lt;br&gt;
You pay AWS for SES directly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sendfleet.net" rel="noopener noreferrer"&gt;https://sendfleet.net&lt;/a&gt; · Docs: &lt;a href="https://docs.sendfleet.net/byoc" rel="noopener noreferrer"&gt;https://docs.sendfleet.net/byoc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I would love feedback, especially from anyone running SES at scale.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>email</category>
      <category>serverless</category>
      <category>devops</category>
    </item>
    <item>
      <title>SendFleet now has a WordPress plugin. Try it and tell me what breaks</title>
      <dc:creator>SendFleet</dc:creator>
      <pubDate>Tue, 20 Oct 2026 17:17:11 +0000</pubDate>
      <link>https://dev.to/sendfleet/sendfleet-now-has-a-wordpress-plugin-try-it-and-tell-me-what-breaks-1pnd</link>
      <guid>https://dev.to/sendfleet/sendfleet-now-has-a-wordpress-plugin-try-it-and-tell-me-what-breaks-1pnd</guid>
      <description>&lt;p&gt;SendFleet now has a plugin on WordPress.org.&lt;/p&gt;

&lt;p&gt;SendFleet is a transactional email API. The plugin connects it to WordPress, so the emails your site sends (WooCommerce orders, contact forms, password resets) go through SendFleet instead of PHP mail(). You can use your own AWS SES account or SendFleet's.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Install the plugin: &lt;a href="https://wordpress.org/plugins/sendfleet" rel="noopener noreferrer"&gt;https://wordpress.org/plugins/sendfleet&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Create a free SendFleet account and copy your API key&lt;/li&gt;
&lt;li&gt;Paste the key in the plugin settings&lt;/li&gt;
&lt;li&gt;Send a test email&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On the free plan, test emails only go to your own address. Sending to other people needs the paid plan or your own SES account.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I need from you
&lt;/h2&gt;

&lt;p&gt;This is the first version, so I want to hear what breaks. A confusing setup step, a bug, a missing feature, anything. Write it in the comments and I will read every one.&lt;/p&gt;

&lt;p&gt;If you don't run WordPress, you can still help. If you know someone who does, send them the link.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe2cgnxbrisem3wxvcvh4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe2cgnxbrisem3wxvcvh4.png" alt=" " width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>wordpress</category>
      <category>php</category>
      <category>webdev</category>
    </item>
    <item>
      <title>DNS records every developer sending email must understand (SPF, DKIM, DMARC explained)</title>
      <dc:creator>SendFleet</dc:creator>
      <pubDate>Wed, 20 May 2026 12:02:37 +0000</pubDate>
      <link>https://dev.to/sendfleet/dns-records-every-developer-sending-email-must-understand-spf-dkim-dmarc-explained-316o</link>
      <guid>https://dev.to/sendfleet/dns-records-every-developer-sending-email-must-understand-spf-dkim-dmarc-explained-316o</guid>
      <description>&lt;p&gt;Adding DNS records to send email is one of those tasks where most developers do exactly what the dashboard tells them without understanding why. That works until it doesn't — and when deliverability breaks, debugging without understanding the underlying mechanisms is genuinely painful.&lt;/p&gt;

&lt;p&gt;This post covers the five DNS record types involved in email authentication, what each one actually does, which ones are required, and how to verify your setup is correct.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why email authentication exists
&lt;/h2&gt;

&lt;p&gt;Email was designed in an era of trust. The original protocols have no mechanism for verifying that the server claiming to send mail from acme.com actually has permission to do so. Anyone can configure a mail server to say it is sending from your domain. This is why spam and phishing exist at industrial scale.&lt;/p&gt;

&lt;p&gt;SPF, DKIM, and DMARC are the three authentication layers built on top of the original protocols to address this. Mailbox providers at Google, Microsoft, Apple, and others evaluate all three when deciding whether to deliver your mail, send it to spam, or reject it outright.&lt;/p&gt;

&lt;h2&gt;
  
  
  SPF: who is allowed to send for your domain
&lt;/h2&gt;

&lt;p&gt;SPF (Sender Policy Framework) is a TXT record on your root domain that lists the IP addresses and services authorized to send email on your behalf. A receiving mail server checks this record when it receives a message claiming to be from your domain.&lt;/p&gt;

&lt;h2&gt;
  
  
  A minimal SPF record looks like this:
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;v=spf1 include:amazonses.com ~all&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This says: servers listed in Amazon SES's SPF record are authorized to send for this domain. The ~all at the end is a soft fail — messages from unauthorized servers are flagged but not rejected. -all is a hard fail — reject them. ~all is the recommended starting point.&lt;/p&gt;

&lt;p&gt;The include: mechanism is how you authorize third-party senders. Every service you send email through needs to be listed. If you use multiple services, you chain them: v=spf1 include:amazonses.com include:sendgrid.net ~all.&lt;/p&gt;

&lt;p&gt;SPF has a 10-lookup limit. If your include chain requires more than 10 DNS lookups to resolve, SPF evaluation fails. This is a real problem for organizations using many email services simultaneously.&lt;/p&gt;

&lt;h2&gt;
  
  
  DKIM: cryptographic signing for your messages
&lt;/h2&gt;

&lt;p&gt;DKIM (DomainKeys Identified Mail) lets the sending server cryptographically sign outgoing messages. The receiving server retrieves your public key from DNS, verifies the signature, and confirms the message was not modified in transit.&lt;/p&gt;

&lt;p&gt;The DNS record is a CNAME or TXT record published at a selector subdomain. SES uses three CNAME records, each pointing to SES-managed keys:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;selector1._domainkey.acme.com → selector1._domainkey.REGION.dkim.amazonses.com&lt;br&gt;
selector2._domainkey.acme.com → selector2._domainkey.REGION.dkim.amazonses.com&lt;br&gt;
selector3._domainkey.acme.com → selector3._domainkey.REGION.dkim.amazonses.com&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
  All three must be present and resolving correctly. The private key lives in SES; you publish only the public key via CNAME. Key rotation is handled automatically by SES when you use the CNAME delegation approach — no manual intervention required.&lt;/p&gt;

&lt;p&gt;DKIM is the most important of the three from a deliverability perspective. Gmail, for example, heavily weights DKIM alignment when scoring inbound mail. It is also the only record required by SendFleet before you can send — without DKIM, your domain identity is not fully verified.&lt;/p&gt;

&lt;h2&gt;
  
  
  DMARC: policy and reporting
&lt;/h2&gt;

&lt;p&gt;DMARC (Domain-based Message Authentication, Reporting and Conformance) sits on top of SPF and DKIM and adds two things: a policy telling receivers what to do with mail that fails authentication, and a reporting mechanism that sends you data about what is happening to your email.&lt;/p&gt;

&lt;h2&gt;
  
  
  The record lives at _dmarc.yourdomain.com and looks like this:
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;v=DMARC1; p=none; rua=mailto:dmarc@acme.com&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The p= field is the policy:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;p=none: do nothing, just send reports. This is monitoring mode - the right place to start.&lt;/li&gt;
&lt;li&gt;p=quarantine: send failing mail to spam&lt;/li&gt;
&lt;li&gt;p=reject: reject failing mail entirely&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Start with p=none and review the aggregate reports (rua) for at least a few weeks before moving to quarantine. The reports show you every source sending mail claiming to be from your domain — including misconfigured legitimate senders you might not know about.&lt;/p&gt;

&lt;h2&gt;
  
  
  MAIL FROM subdomain: proper bounce routing
&lt;/h2&gt;

&lt;p&gt;The MAIL FROM subdomain (also called the envelope from or return path) is a subdomain you configure — typically send.yourdomain.com — that SES uses as the bounce address for your emails.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two records are required:
&lt;/h2&gt;

&lt;p&gt;An MX record on the subdomain pointing to SES's feedback servers:&lt;br&gt;
  send.acme.com MX 10 feedback-smtp.us-east-1.amazonses.com.&lt;/p&gt;

&lt;p&gt;And a separate SPF TXT record on the subdomain:&lt;br&gt;
  send.acme.com TXT "v=spf1 include:amazonses.com ~all"&lt;/p&gt;

&lt;p&gt;Without a custom MAIL FROM, SES uses its own domain as the return path, which can cause SPF alignment failures under DMARC. With a custom MAIL FROM on your subdomain, the return path is under your domain and SPF alignment passes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Domain ownership TXT record
&lt;/h2&gt;

&lt;p&gt;This is the simplest of the five: a TXT record on your root domain that proves to SES (and through it, to SendFleet) that you control the domain. It looks like this:&lt;/p&gt;

&lt;p&gt;_amazonses.acme.com TXT "some-verification-token"&lt;/p&gt;

&lt;p&gt;This must be verified before any other verification can proceed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is required versus what is recommended
&lt;/h2&gt;

&lt;p&gt;Required to send with SendFleet: domain ownership TXT and all three DKIM CNAMEs.&lt;/p&gt;

&lt;p&gt;Strongly recommended: SPF, MAIL FROM subdomain, DMARC in p=none mode.&lt;/p&gt;

&lt;p&gt;Without SPF and MAIL FROM, some mailbox providers will mark your mail as suspicious. Without DMARC, you have no visibility into authentication failures and cannot protect your domain from spoofing at the policy level.&lt;/p&gt;

&lt;p&gt;SendFleet's domain dashboard shows per-record verification status with individual verify buttons. Use these to confirm propagation - the dashboard checks DNS directly.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>email</category>
    </item>
    <item>
      <title>Quickstart BYOC - SendFleet</title>
      <dc:creator>SendFleet</dc:creator>
      <pubDate>Thu, 14 May 2026 05:48:04 +0000</pubDate>
      <link>https://dev.to/sendfleet/quickstart-byoc-sendfleet-53j8</link>
      <guid>https://dev.to/sendfleet/quickstart-byoc-sendfleet-53j8</guid>
      <description>&lt;p&gt;For the BYOC path you need:&lt;br&gt;
→ An AWS account with SES approved for&lt;br&gt;
production access&lt;br&gt;
(out of sandbox mode)&lt;br&gt;
→ A domain you control (to add DNS records)&lt;br&gt;
→ Access to create IAM roles in your AWS account&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Create a SendFleet account&lt;br&gt;
Register at &lt;a href="https://sendfleet.net/register/" rel="noopener noreferrer"&gt;sendfleet.net/register&lt;/a&gt;. Email verification is required before you can send. The Starter plan is free with 50 BYOC emails/month - no credit card needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create an IAM role in AWS&lt;br&gt;
In your AWS console, go to IAM → Roles → Create role. Choose Custom trust policy and paste the trust policy shown in your account settings → BYOC section. It will include your unique ExternalId automatically. Attach the required SES permissions (also listed in settings). See the full guide in BYOC Setup →&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Connect your IAM role&lt;br&gt;
Go to Dashboard → Settings. Paste your IAM Role ARN and select your SES region. Click Validate &amp;amp; save. We'll verify that we can assume the role and that your SES account is out of sandbox mode.&lt;br&gt;
Example Role ARN&lt;br&gt;
arn:aws:iam::123456789012:role/SendFleet-BYOC-Role&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add and verify a sending domain&lt;br&gt;
Go to Dashboard → Domains → Add BYOC domain. Enter your root domain (e.g. acme.com). We'll register the identity in your SES and show you the DNS records to add. Once the TXT ownership record propagates, click Verify ownership - then Verify DKIM. DKIM verification is required before any email can be sent.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generate an API key&lt;br&gt;
Go to Dashboard → API Keys → New key. Give it a name (e.g. "Production"). The full secret key is shown exactly once - copy it and store it in your environment variables or secrets manager.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Send your first email&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;curl -X POST &lt;a href="https://sendfleet.net/api/send/" rel="noopener noreferrer"&gt;https://sendfleet.net/api/send/&lt;/a&gt; \&lt;br&gt;
  -H "X-API-Key: YOUR_API_KEY" \&lt;br&gt;
  -H "Content-Type: application/json" \&lt;br&gt;
  -d '{&lt;br&gt;
    "to": "&lt;a href="mailto:user@example.com"&gt;user@example.com&lt;/a&gt;",&lt;br&gt;
    "from_email": "&lt;a href="mailto:hello@acme.com"&gt;hello@acme.com&lt;/a&gt;",&lt;br&gt;
    "from_name": "Acme",&lt;br&gt;
    "subject": "Welcome aboard",&lt;br&gt;
    "message": "Thanks for signing up!"&lt;br&gt;
  }'&lt;/p&gt;

&lt;p&gt;A 200 OK means your email has been accepted and queued. Delivery happens asynchronously.&lt;/p&gt;

&lt;p&gt;200 OK&lt;br&gt;
{&lt;br&gt;
  "success":    true,&lt;br&gt;
  "message":    "Email queued for delivery via your SES account.",&lt;br&gt;
  "message_id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",&lt;br&gt;
  "mode":       "byoc"&lt;br&gt;
}&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>infrastructure</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
