New Upstream Snapshot - rss2email

Ready changes

Summary

Merged new upstream version: 3.14+git20221025.2.7c1a2e1 (was: 3.14+git20221025.1.7c1a2e1).

Resulting package

Built on 2022-12-19T02:57 (took 3m31s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-snapshots rss2email

Lintian Result

Diff

diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml
deleted file mode 100644
index eb43cb9..0000000
--- a/.github/workflows/python-package.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-# This workflow will install Python dependencies and run tests.
-# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
-
-name: Python package
-
-on:
-  push:
-    branches: [ master ]
-  pull_request:
-
-jobs:
-  build:
-    runs-on: ${{ matrix.os }}
-    strategy:
-      matrix:
-        os: [ubuntu-latest]
-        python-version: [3.6, 3.7, 3.8]
-    steps:
-    - uses: actions/checkout@v2
-    - name: Set up Python ${{ matrix.python-version }}
-      uses: actions/setup-python@v2
-      with:
-        python-version: ${{ matrix.python-version }}
-    - name: Install dependencies
-      run: |
-        python -m pip install --upgrade pip
-        pip install poetry
-        poetry install
-    - name: Test
-      run: |
-        poetry run ./test/test.py -v
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 9111bfd..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-__pycache__
-build
-dist
-MANIFEST
diff --git a/.mailmap b/.mailmap
deleted file mode 100644
index d7ec724..0000000
--- a/.mailmap
+++ /dev/null
@@ -1,2 +0,0 @@
-Lindsey Smith <lindsey.smith@gmail.com> <lindsey@allthingsrss.com>
-Lindsey Smith <lindsey.smith@gmail.com> <lindsey.smith@gmail.com>
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index ee46b14..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,34 +0,0 @@
-language: "nix"
-
-nix: "2.2.1"
-
-os: "linux"
-
-script: |
-  set -e
-
-  # build rss2email against every python version we support
-  nix-build -A pythonVersions ./nix/release.nix
-
-  # build the list of the transitive closure of dependencies
-  nix-store --query --requisites --include-outputs \
-    $(nix-instantiate -A pythonVersions ./nix/release.nix) \
-    > nix-dependencies
-
-
-# using the snippets from https://nixos.wiki/wiki/Nix_on_Travis
-
-before_cache:
-- mkdir -p $HOME/nix.store
-# this copies the closure of all dependencies to the cache
-- nix copy --to file://$HOME/nix.store $(cat ./nix-dependencies)
-
-cache:
-  directories:
-  - $HOME/nix.store
-
-before_install:
-- sudo mkdir -p /etc/nix
-- echo "substituters = https://cache.nixos.org/ file://$HOME/nix.store" | sudo tee -a /etc/nix/nix.conf > /dev/null
-- echo 'require-sigs = false' | sudo tee -a /etc/nix/nix.conf > /dev/null
-- echo 'sandbox = true' | sudo tee -a /etc/nix/nix.conf > /dev/null
diff --git a/.update-copyright.conf b/.update-copyright.conf
deleted file mode 100644
index 1f580ce..0000000
--- a/.update-copyright.conf
+++ /dev/null
@@ -1,58 +0,0 @@
-[project]
-name: rss2email
-vcs: Git
-
-[files]
-authors: yes
-files: yes
-ignored: AUTHORS | COPYING | README | README.rst | .update-copyright.conf |
-  .git* | *.atom | *.rss | __pycache__
-
-[aliases]
-Aaron Swartz: Aaron Swartz <me@aaronsw.com>
-Jeff Backus <jeff@jsbackus.com>: Jeff Backus <jeff.backus@gmail.com>
-Yannik Sembritzki <yannik@sembritzki.me>: Yannik <yannik@sembritzki.me>
-
-[author-hacks]
-rss2email/config.py: Aaron Swartz |
-  Brian Lalor |
-  Dean Jackson |
-  Erik Hetzner |
-  Joey Hess |
-  Lindsey Smith <lindsey.smith@gmail.com> |
-  Marcel Ackermann | 
-  Martin 'Joey' Schulze |
-  Matej Cepl
-rss2email/feed.py: Aaron Swartz |
-  Brian Lalor |
-  Dean Jackson |
-  Erik Hetzner |
-  Joey Hess |
-  Lindsey Smith <lindsey.smith@gmail.com> |
-  Marcel Ackermann | 
-  Martin 'Joey' Schulze |
-  Matej Cepl
-rss2email/feeds.py: Aaron Swartz |
-  Brian Lalor |
-  Dean Jackson |
-  Erik Hetzner |
-  Joey Hess |
-  Lindsey Smith <lindsey.smith@gmail.com> |
-  Marcel Ackermann | 
-  Martin 'Joey' Schulze |
-  Matej Cepl
-  
-[year-hacks]
-rss2email/config.py: 2004
-rss2email/feed.py: 2004
-rss2email/feeds.py: 2004
-
-[copyright]
-short: {project} comes with ABSOLUTELY NO WARRANTY and is licensed under the GNU General Public License.
-long: This file is part of {project}.
-
-  {project} is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) version 3 of the License.
-
-  {project} is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License along with {project}.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/AUTHORS b/AUTHORS
index 5eafe26..475ae2f 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -2,7 +2,6 @@ rss2email was written by:
 Aaron Swartz
 Adam Mokhtari <2553423+uutari@users.noreply.github.com>
 Alyssa Ross <hi@alyssa.is>
-Amir Yalon <105565+amiryal@users.noreply.github.com>
 Amir Yalon <git@please.nospammail.net>
 Anders Damsgaard <anders@adamsgaard.dk>
 Andrey Zelenchuk <azelenchuk@parallels.com>
@@ -17,9 +16,11 @@ Dennis Keitzel <github@pinshot.net>
 Dmitry Bogatov <KAction@gnu.org>
 Doron Behar <doron.behar@gmail.com>
 Eelis van der Weegen <eelis@eelis.net>
+Ellen Wang <squeakbat@users.noreply.github.com>
 Emil Oppeln-Bronikowski <emil@fuse.pl>
 Erik Hetzner
 Etienne Millon <me@emillon.org>
+Faye Duxovni <duxovni@duxovni.org>
 François Boulogne <fboulogne sciunto org>
 George Saunders <georgesaunders@gmail.com>
 Gregory Soutade <gregory@soutade.fr>
@@ -28,8 +29,11 @@ J. Lewis Muir <jlmuir@imca-cat.org>
 Jakub Wilk <jwilk@jwilk.net>
 Jan Palus <jpalus@fastmail.com>
 Jeff Backus <jeff@jsbackus.com>
+Jochen Sprickerhof <github@jochen.sprickerhof.de>
 Joey Hess
 Jonathan Kamens <jik@kamens.us>
+Josh Wainwright <git@jawainwright.co.uk>
+Julien Palard <julien@palard.fr>
 Kaashif Hymabaccus <kaashif@kaashif.co.uk>
 Kaashif Hymabaccus <kaashif@users.noreply.github.com>
 Karthikeyan Singaravelan <tir.karthi@gmail.com>
@@ -46,18 +50,21 @@ Martin Monperrus <monperrus@users.noreply.github.com>
 Martin Vietz <git@martin.vietz.eu>
 Matej Cepl
 Mátyás Jani <jzombi@gmail.com>
+Nathan Aclander <nathan.aclander@gmail.com>
 Nicolas KAROLAK <nicolas@karolak.fr>
 Notkea <pacien@users.noreply.github.com>
+Paul O'Leary McCann <polm@dampfkraft.com>
 Profpatsch <mail@profpatsch.de>
 Puneeth Chaganti <punchagan@muse-amuse.in>
 Raphaël Droz <raphael.droz+floss@gmail.com>
 Simon Rozet <me@simonrozet.com>
+Steve Mokris <smokris@softpixel.com>
 Steven Siloti <ssiloti@gmail.com>
 Thiago Coutinho <root@thiagoc.net>
 Thibaut Girka <thib@sitedethib.com>
+Timendum <timedum@gmail.com>
 W. Trevor King <wking@tremily.us>
 Yannik Sembritzki <yannik@sembritzki.me>
-auouymous <5005204+auouymous@users.noreply.github.com>
 auouymous <au@qzx.com>
 boyska <piuttosto@logorroici.org>
 ryneeverett <ryneeverett@gmail.com>
diff --git a/CHANGELOG b/CHANGELOG
index 6393624..d7e129a 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,16 @@
 UNRELEASED
 
+v3.14 (2022-08-26)
+    * New `digest-type` configuration adds optional more widely supported `multipart/mixed` format
+    * New argument `--only-new` on the `add` command to ignore entries in feed
+      when added, so only new entries will be sent.
+    * Fix exception when parsing a feed with a linebreak in its title
+    * Add a new `subject-format` setting, customise the subject line
+    * Removed '$' interpolation in config file to allow URLs containing dollar signs. Interpolation was not fully supported, and the placeholder would not survive a second save. Config files with ${...} placeholders will need to be manually edited after upgrading, or a save forced by adding and removing a fake feed before upgrading.
+    * Fix default HTTP User-Agent to use `rss2email` instead of `feedparser`, and fix `user-agent` setting to consistently apply to both outgoing emails and HTTP requests. This introduces a couple of potentially breaking changes:
+       o Configurations that came to rely on the `feedparser` UA string should adjust to the updated UA string going forward.
+       o Configurations that came to rely on the unintended behaviour, that configuring the User-Agent header in emails does not affect HTTP requests, should use a custom `post-process` hook instead.
+
 v3.13.1 (2021-05-15)
     * Fix crash on html-mail entries with no URL
 
diff --git a/HACKING.md b/HACKING.md
deleted file mode 100644
index 29e2eca..0000000
--- a/HACKING.md
+++ /dev/null
@@ -1,56 +0,0 @@
-# Hacking on `rss2email`
-
-This document is still TODO. Please contribute to it and file issues
-if you have a question (or something is not described sufficiently).
-
-
-## Cutting a new release
-
-- `nix-shell`
-- `update-copyright.py`
-- Prepare `CHANGELOG`
-- Fix `__version__` in `rss2email/__init__.py`
-- `git commit`
-- `exit`
-
-- `rm -Rf dist rss2email.egg-info`
-- `nix-shell -p python37Packages.{setuptools,wheel,twine}`
-- `SOURCE_DATE_EPOCH=315532800 python3 setup.py sdist bdist_wheel`
-- `twine upload --repository-url https://test.pypi.org/legacy/ dist/*`
-- Check it actually work on test-pypi (NixOS test, run on dev machines…)
-
-- Add git tag, git branch if need be, push it to repository
-- `twine upload dist/*`
-
-
-## Using nix support
-
-`rss2email` has a few nix definitions in order to simplify development.
-In order to use them you need to install the [nix package
-manager](https://nixos.org/nix) version 2 or later on your system.
-
-### Open a shell with all dependencies
-
-Run `nix-shell` in the top directory. It will open a bash with all
-dependencies (python and system) required for working on `rss2email`.
-This uses the [`shell.nix`](./shell.nix) file.
-
-### Test `rss2email` against multiple python versions
-
-`nix/release.nix` contains an expression to build and test rss2email
-against multiple python versions.
-
-You can build each one of them like this:
-
-```
-nix-build -A pythonVersions.rss2email-python_3_6 nix/release.nix
-nix-build -A pythonVersions.rss2email-python_3_7 nix/release.nix
-nix-build -A pythonVersions.rss2email-python_3_8 nix/release.nix
-…
-```
-
-and all at once with
-
-```
-nix-build -A pythonVersions nix/release.nix
-```
diff --git a/README.rst b/PKG-INFO
similarity index 85%
rename from README.rst
rename to PKG-INFO
index c8c4967..0c092e1 100644
--- a/README.rst
+++ b/PKG-INFO
@@ -1,16 +1,44 @@
+Metadata-Version: 2.1
+Name: rss2email
+Version: 3.14
+Summary: A python script that converts RSS/Atom newsfeeds to email
+Home-page: https://github.com/rss2email/rss2email
+Download-URL: https://github.com/rss2email/rss2email/archive/v3.14.tar.gz
+Maintainer: The rss2email maintainers
+Maintainer-email: rss2email@tremily.us
+License: GNU General Public License (GPL)
+Platform: all
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Environment :: Console
+Classifier: Intended Audience :: End Users/Desktop
+Classifier: Operating System :: OS Independent
+Classifier: License :: OSI Approved :: GNU General Public License (GPL)
+Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2)
+Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Topic :: Communications :: Email
+Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Provides: rss2email
+License-File: COPYING
+License-File: AUTHORS
+
 .. -*- coding: utf-8 -*-
 
-.. image:: https://pypip.in/download/rss2email/badge.png
+.. image:: https://img.shields.io/pypi/dm/rss2email
     :target: https://pypi.python.org/pypi/rss2email/
-    :alt: Downloads
+    :alt: Monthly Downloads
 
-.. image:: https://pypip.in/version/rss2email/badge.png
+.. image:: https://badge.fury.io/py/rss2email.svg
     :target: https://pypi.python.org/pypi/rss2email/
     :alt: Latest Version
 
-.. image:: https://pypip.in/license/rss2email/badge.png
+.. image:: https://img.shields.io/badge/License-GPL_v2-blue.svg
     :target: https://pypi.python.org/pypi/rss2email/
-    :alt: License
+    :alt: GPL v2.0 License
 
 ==============================
 Getting Started With rss2email
@@ -252,7 +280,7 @@ to post bug reports, feature requests, comments, and patches. If you do
 not have a GitHub account and do not wish to acquire one, please come
 chat in the IRC channel.
 
-There is a developer chat on the `freenode IRC server`_, in the
+There is a developer chat on the `Libera IRC server`_, in the
 ``rss2email`` channel. Feel free to idle.
 
 Tips and tricks
@@ -289,4 +317,4 @@ checking it in.
 .. _STARTTLS: http://en.wikipedia.org/wiki/STARTTLS
 .. _windows scheduler: http://www.iopus.com/guides/winscheduler.htm
 .. _cron: http://en.wikipedia.org/wiki/Cron
-.. _freenode IRC server: https://freenode.net
+.. _Libera IRC server: https://libera.chat/
diff --git a/debian/changelog b/debian/changelog
index a52f7d4..84ebbf0 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+rss2email (1:3.14+git20221025.2.7c1a2e1-1) UNRELEASED; urgency=low
+
+  * New upstream snapshot.
+  * Drop patch 0001-Fix-formatting-error-in-manpage.patch, present upstream.
+  * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Mon, 19 Dec 2022 02:54:59 -0000
+
 rss2email (1:3.13.1-3) unstable; urgency=medium
 
   [ Debian Janitor ]
diff --git a/debian/patches/0001-Fix-formatting-error-in-manpage.patch b/debian/patches/0001-Fix-formatting-error-in-manpage.patch
deleted file mode 100644
index bb8519d..0000000
--- a/debian/patches/0001-Fix-formatting-error-in-manpage.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From: Jochen Sprickerhof <jspricke@debian.org>
-Date: Wed, 3 Nov 2021 08:46:39 +0100
-Subject: Fix formatting error in manpage
-
-A ' at the beginning of a line is interpreted as Groff command.
----
- r2e.1 | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/r2e.1 b/r2e.1
-index 564d4e1..94708de 100644
---- a/r2e.1
-+++ b/r2e.1
-@@ -167,8 +167,8 @@ False: Just use the 'from' email instead.
- .IP name-format
- If empty, only use the feed email address rather than
- friendly name plus email address.  Available attributes may
--include 'feed', 'feed-name', 'feed-url', 'feed-title', 'author', and
--'publisher', but only 'feed', 'feed-name', and 'feed-url' are guaranteed.
-+include 'feed', 'feed-name', 'feed-url', 'feed-title', 'author', and 'publisher',
-+but only 'feed', 'feed-name', and 'feed-url' are guaranteed.
- .IP to
- Set this to default To email addresses.
- .RE
diff --git a/debian/patches/series b/debian/patches/series
index 7f2d824..e69de29 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +0,0 @@
-0001-Fix-formatting-error-in-manpage.patch
diff --git a/developer-certificate-of-origin b/developer-certificate-of-origin
deleted file mode 100644
index a6bbb98..0000000
--- a/developer-certificate-of-origin
+++ /dev/null
@@ -1,35 +0,0 @@
-Developer Certificate of Origin
-Version 1.1
-
-Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
-660 York Street, Suite 102,
-San Francisco, CA 94110 USA
-
-Everyone is permitted to copy and distribute verbatim copies of this
-license document, but changing it is not allowed.
-
-Developer's Certificate of Origin 1.1
-
-By making a contribution to this project, I certify that:
-
-(a) The contribution was created in whole or in part by me and I
-    have the right to submit it under the open source license
-    indicated in the file; or
-
-(b) The contribution is based upon previous work that, to the best
-    of my knowledge, is covered under an appropriate open source
-    license and I have the right under that license to submit that
-    work with modifications, whether created in whole or in part
-    by me, under the same open source license (unless I am
-    permitted to submit under a different license), as indicated
-    in the file; or
-
-(c) The contribution was provided directly to me by some other
-    person who certified (a), (b) or (c) and I have not modified
-    it.
-
-(d) I understand and agree that this project and the contribution
-    are public and that a record of the contribution (including all
-    personal information I submit with it, including my sign-off) is
-    maintained indefinitely and may be redistributed consistent with
-    this project or the open source license(s) involved.
diff --git a/nix/nixpkgs.nix b/nix/nixpkgs.nix
deleted file mode 100644
index e24631d..0000000
--- a/nix/nixpkgs.nix
+++ /dev/null
@@ -1,5 +0,0 @@
-builtins.fetchTarball {
-  # nixos-unstable 2021-04-04
-  url = "https://github.com/NixOS/nixpkgs/archive/04a2b269d8921505a2969fc9ec25c1f517f2b307.tar.gz";
-  sha256 = "15hgx2i71pqgvzv56jwzfs8rkhjbm35wk1i6mxrqbq6wd0y10isv";
-}
diff --git a/nix/release.nix b/nix/release.nix
deleted file mode 100644
index 7e8ae5f..0000000
--- a/nix/release.nix
+++ /dev/null
@@ -1,46 +0,0 @@
-{ nixpkgs ? import ./nixpkgs.nix }:
-let
-  pkgs = import nixpkgs {};
-
-  supportedPackageSets = [
-    { version = "3_6"; set = pkgs.python36Packages; }
-    { version = "3_7"; set = pkgs.python37Packages; }
-    { version = "3_8"; set = pkgs.python38Packages; }
-  ];
-  latestSupportedPackageSet = pkgs.lib.last supportedPackageSets;
-
-  src = pkgs.lib.cleanSource ../.;
-
-  mkName = version: "rss2email-python_${version}";
-
-  buildWith = pkgSet: pkgSet.set.buildPythonApplication {
-    name = mkName pkgSet.version;
-    version = "develop";
-
-    inherit src;
-    propagatedBuildInputs = with pkgSet.set; [
-      feedparser
-      html2text
-    ];
-
-    doCheck = true;
-    checkPhase = ''
-      cd ./test && \
-      python3 -m unittest --verbose
-    '';
-  };
-
-  # { "rss2email-python_3_6" = <rss2email package>; … }
-  rss2emailVersions =
-    (pkgs.lib.listToAttrs
-      (map
-        (pkgSet: pkgs.lib.nameValuePair
-          (mkName pkgSet.version)
-          (buildWith pkgSet))
-        supportedPackageSets));
-
-in {
-  rss2email = buildWith latestSupportedPackageSet;
-
-  pythonVersions = rss2emailVersions;
-}
diff --git a/poetry.lock b/poetry.lock
deleted file mode 100644
index 9315252..0000000
--- a/poetry.lock
+++ /dev/null
@@ -1,55 +0,0 @@
-[[package]]
-name = "feedparser"
-version = "6.0.2"
-description = "Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds"
-category = "main"
-optional = false
-python-versions = ">=3.6"
-
-[package.dependencies]
-sgmllib3k = "*"
-
-[[package]]
-name = "html2text"
-version = "2020.1.16"
-description = "Turn HTML into equivalent Markdown-structured text."
-category = "main"
-optional = false
-python-versions = ">=3.5"
-
-[[package]]
-name = "sgmllib3k"
-version = "1.0.0"
-description = "Py3k port of sgmllib."
-category = "main"
-optional = false
-python-versions = "*"
-
-[[package]]
-name = "update-copyright"
-version = "0.6.2"
-description = "Automatically update copyright blurbs in versioned source."
-category = "dev"
-optional = false
-python-versions = "*"
-
-[metadata]
-lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "9886ddfe85969df311e501044b12156082b2a58a9aa1db74b9effa92952bfdc1"
-
-[metadata.files]
-feedparser = [
-    {file = "feedparser-6.0.2-py3-none-any.whl", hash = "sha256:f596c4b34fb3e2dc7e6ac3a8191603841e8d5d267210064e94d4238737452ddd"},
-    {file = "feedparser-6.0.2.tar.gz", hash = "sha256:1b00a105425f492f3954fd346e5b524ca9cef3a4bbf95b8809470e9857aa1074"},
-]
-html2text = [
-    {file = "html2text-2020.1.16-py3-none-any.whl", hash = "sha256:c7c629882da0cf377d66f073329ccf34a12ed2adf0169b9285ae4e63ef54c82b"},
-    {file = "html2text-2020.1.16.tar.gz", hash = "sha256:e296318e16b059ddb97f7a8a1d6a5c1d7af4544049a01e261731d2d5cc277bbb"},
-]
-sgmllib3k = [
-    {file = "sgmllib3k-1.0.0.tar.gz", hash = "sha256:7868fb1c8bfa764c1ac563d3cf369c381d1325d36124933a726f29fcdaa812e9"},
-]
-update-copyright = [
-    {file = "update-copyright-0.6.2.tar.gz", hash = "sha256:ffccb6eb762afcbd7e91d0e1901a3af7fba0d90ede4da21ac45e18d6d66bcb9f"},
-]
diff --git a/pyproject.toml b/pyproject.toml
index 2f56bbb..b670947 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -7,15 +7,15 @@ license = "GPL-2.0-only"
 
 [tool.poetry.dependencies]
 python = "^3.6"
-feedparser = ">=6.0.0"
+feedparser = ">=6.0.5"
 html2text = ">=2020.1.16"
 
 [tool.poetry.dev-dependencies]
 update-copyright = ">=0.6.2"
 
 [build-system]
-requires = ["poetry>=0.12"]
-build-backend = "poetry.masonry.api"
+requires = ["poetry-core>=1.0.0"]
+build-backend = "poetry.core.masonry.api"
 
 [tool.poetry.scripts]
 r2e = "rss2email.main:run"
diff --git a/r2e.1 b/r2e.1
index 564d4e1..444f751 100644
--- a/r2e.1
+++ b/r2e.1
@@ -60,12 +60,20 @@ sets the default email address that mails are sent to.
 .B email \fR[\fI<email>\fR]
 Update the default target email address to \fI<email>\fR.
 .TP
-.B add \fI<name>\fR \fI<url>\fR [\fI<email>\fR]
+.B add \fR[\fI\-\-only-new\fR] \fI<name>\fR \fI<url>\fR [\fI<email>\fR]
 Subscribe to a feed. The \fI<name>\fR argument gives the feed a name
 for future manipulation. \fI<url>\fR is the URL of the feed.  The
 optional \fI<email>\fR argument is the email address to send new items
 to, overriding the default address for this particular feed.  Repeat
 for each feed you want to subscribe to.
+.P
+.RS 4
+The \-\-only-new option fetches the feed at addition time without
+sending the entries, making subsequent \fBrun\fR execution consider
+them as already having been sent. It should be used when one is only
+interested in entries that are not yet in the feed at the time of
+running \fBadd\fR.
+.RE
 .TP
 .B run \fR[\fI\-\-no-send\fR] \fR[\fI\-\-clean\fR] \fR[\fI<index>\fR [\fI<index>\fR ...]]
 Scan the feeds and send emails for new items. This can be run in a cron
@@ -167,8 +175,8 @@ False: Just use the 'from' email instead.
 .IP name-format
 If empty, only use the feed email address rather than
 friendly name plus email address.  Available attributes may
-include 'feed', 'feed-name', 'feed-url', 'feed-title', 'author', and
-'publisher', but only 'feed', 'feed-name', and 'feed-url' are guaranteed.
+include 'feed', 'feed-name', 'feed-url', 'feed-title', 'author', and 'publisher',
+but only 'feed', 'feed-name', and 'feed-url' are guaranteed.
 .IP to
 Set this to default To email addresses.
 .RE
@@ -177,6 +185,8 @@ Set this to default To email addresses.
 Set an HTTP proxy (e.g. 'http://your.proxy.here:8080/')
 .IP feed-timeout
 Set the timeout (in seconds) for feed server response
+.IP same-server-fetch-interval
+Set the sleep interval (in seconds) between consecutive fetches from the same server
 .RE
 .SS Processing
 .IP active
@@ -185,6 +195,10 @@ False: Don't fetch, process, or email feeds
 .IP digest
 True: Send a single, multi-entry email per feed per rss2email run.
 False: Send a single email per entry.
+.IP digest-type
+Message content-type for digests.  Valid values are 'multipart/digest'
+and 'multipart/mixed'.  The former is the default, but many mail user agents
+do not support it.
 .IP date-header
 True: Generate Date header based on item's date, when possible.
 False: Generate Date header based on time sent.
@@ -218,6 +232,9 @@ enabled, the usual 'post-process' hook gets to message the
 per-entry messages, but this hook is called with the full
 digest message before it is mailed.
 Example: digest-post-process = 'rss2email.post_process.downcase downcase_message'
+.IP subject-format
+The format for the Subject line.  Available attributes
+are 'feed', 'feed-name', 'feed-url', 'feed-title'.
 .RE
 .SS HTML conversion
 .IP html-mail
@@ -246,9 +263,6 @@ Wrap long lines at position. Any negative value for no wrapping, 0 for 78 width
 Select protocol from: sendmail, smtp, imap, maildir
 .IP sendmail
 Path to sendmail (or compatible)
-.IP user-agent
-String to use as User-Agent in outgoing emails. If present, __VERSION__ and
-__URL__ are replaced with rss2email version number and webpage
 .RE
 .SS SMTP configuration
 .IP smtp-auth
@@ -285,6 +299,10 @@ Path of maildir to write messages into
 Mailbox within maildir-path to write messages into
 .RE
 .SS Miscellaneous
+.IP user-agent
+String to use as HTTP User-Agent in web requests and as the User-Agent header in
+outgoing emails. If present, __VERSION__ and __URL__ are replaced with rss2email
+version number and webpage.
 .IP verbose
 Verbosity (one of 'error', 'warning', 'info', or 'debug').
 .RE
diff --git a/rss2email.egg-info/PKG-INFO b/rss2email.egg-info/PKG-INFO
new file mode 100644
index 0000000..0c092e1
--- /dev/null
+++ b/rss2email.egg-info/PKG-INFO
@@ -0,0 +1,320 @@
+Metadata-Version: 2.1
+Name: rss2email
+Version: 3.14
+Summary: A python script that converts RSS/Atom newsfeeds to email
+Home-page: https://github.com/rss2email/rss2email
+Download-URL: https://github.com/rss2email/rss2email/archive/v3.14.tar.gz
+Maintainer: The rss2email maintainers
+Maintainer-email: rss2email@tremily.us
+License: GNU General Public License (GPL)
+Platform: all
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Environment :: Console
+Classifier: Intended Audience :: End Users/Desktop
+Classifier: Operating System :: OS Independent
+Classifier: License :: OSI Approved :: GNU General Public License (GPL)
+Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2)
+Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Topic :: Communications :: Email
+Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Provides: rss2email
+License-File: COPYING
+License-File: AUTHORS
+
+.. -*- coding: utf-8 -*-
+
+.. image:: https://img.shields.io/pypi/dm/rss2email
+    :target: https://pypi.python.org/pypi/rss2email/
+    :alt: Monthly Downloads
+
+.. image:: https://badge.fury.io/py/rss2email.svg
+    :target: https://pypi.python.org/pypi/rss2email/
+    :alt: Latest Version
+
+.. image:: https://img.shields.io/badge/License-GPL_v2-blue.svg
+    :target: https://pypi.python.org/pypi/rss2email/
+    :alt: GPL v2.0 License
+
+==============================
+Getting Started With rss2email
+==============================
+
+We highly recommend that you watch the rss2email project on GitHub
+so you can keep up to date with the latest version, bugfixes and
+features:
+
+  https://github.com/rss2email/rss2email
+
+.. contents::
+
+Installing rss2email
+====================
+
+Packages
+--------
+
+A quick way to get rss2email going is using pre-made packages. There are
+releases for Debian__, Fedora__, Gentoo__, NetBSD__, NixOS__, OpenBSD__,
+openSUSE__, and Ubuntu__.
+
+__ `Debian package`_
+__ `Fedora package`_
+__ `Gentoo package`_
+__ `NetBSD package`_
+__ `NixOS package`_
+__ `OpenBSD package`_
+__ `openSUSE package`_
+__ `Ubuntu package`_
+
+Installing by hand
+------------------
+
+Requirements
+~~~~~~~~~~~~
+
+Before you install rss2email, you'll need to make sure that a few
+things are in place.
+
+1. Ensure that a version of Python_ ≥3.6 is installed.
+2. Install the required Python packages.
+
+   * feedparser_
+   * html2text_
+
+3. Figure out how you are going to send outgoing email.  You have two
+   options here: either use an SMTP server or a local sendmail
+   program.  So,
+
+   * determine your outgoing email server's SMTP address, or
+   * install sendmail (or a compatible replacement like postfix).
+
+Download
+~~~~~~~~
+
+Download the latest rss2email source and unpack it.  You can choose
+from several equivalent formats.
+
+1. A ``.zip`` file (suggested for Microsoft Windows users)
+   or ``.tar.gz`` file (suggested for everyone else)::
+
+    * Navigate to https://github.com/rss2email/rss2email/releases
+    * Click either the ``zip`` or ``tar.gz`` icon for the latest release
+    * Download and extract the archive
+
+3. A Git_ checkout (suggested for developers)::
+
+    $ git clone git://github.com/rss2email/rss2email.git
+
+Install
+~~~~~~~
+
+From the unpacked directory, run::
+
+  $ python setup.py install
+
+You can pass all the usual options to the ``install`` command,
+including ``--user``.  If you don't want to install rss2email, you can
+also run ``r2e`` directly from the source directory.
+
+Upgrading to a new version
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Just repeat the installation procedure for the new source package.  If
+your config file and data file were in the old source directory, move
+them over to the new source directory.  If the config and data files
+were in another directory (e.g. ``~/.config`` and ``~/.local/share``),
+there is no need to move them.
+
+Using rss2email
+===============
+
+Create a new feed database to send updates to your email address::
+
+  $ r2e new you@yourdomain.com
+
+This command will create a configuration file
+(``$XDG_CONFIG_HOME/rss2email.cfg`` by default) and a feed database
+(``$XDG_DATA_HOME/rss2email.json`` by default).  If you'd rather those
+files were stored in other locations, use the ``--config`` and
+``--data`` options.  ``XDG_CONFIG_HOME`` defaults to ``$HOME/.config``
+and ``XDG_DATA_HOME`` defaults to ``$HOME/.local/share``.
+
+You should edit the default configuration file now to adjust rss2email
+for your local system.  Unless you've installed a local
+sendmail-equivalent, you'll need to edit the SMTP_ options.
+
+Subscribe to some feeds::
+
+  $ r2e add eff https://www.eff.org/rss/updates.xml
+
+That will cause rss2email to notify you when there is a new announcement from
+the Electronic Frontier Foundation. Repeat this for each feed you want to
+subscribe to.
+
+When you run rss2email, it emails you about every story it hasn't seen
+before. But the first time you run it, that will be every story. To
+avoid this, you can ask rss2email not to send you any stories the
+first time you run it::
+
+  r2e run --no-send
+
+Then later, you can ask it to email you new stories::
+
+  r2e run
+
+When a run is made, rss2email stores the list of already seen items for each feed in `$HOME/.local/share/rss2email.json`.
+
+Customizing rss2email
+=====================
+
+There are a number of options, described in full in
+``rss2email/config.py``, to customize the way rss2email behaves. If
+you want to change something, edit the configuration file that was
+created by ``r2e new``.
+
+For example, if you want to receive HTML mail, instead of having
+entries converted to plain text::
+
+  html-mail = True
+
+To be notified every time a post changes, instead of just when it's
+first posted (see also ``trust-link`` and ``reply-changes``, described in
+``rss2email/config.py``)::
+
+  trust-guid = True
+
+And to make the emails look as if they were sent when the item was
+posted::
+
+  date-header = True
+
+If you get an error message ``Sender domain must exist``, add the
+following to your configuration file::
+
+  from = rss2email@yoursite.com
+  force-from = True
+
+You can make the email address whatever you want, but your mail server
+requires that the ``yoursite.com`` part actually exists.
+
+
+SMTP
+----
+
+By default, rss2email uses sendmail (or an equivalent) to send
+outgoing email.  If you don't have such a program installed, or simply
+prefer to use SMTP__ directly, edit the configuration file and fill in
+your outgoing email server's details::
+
+  [DEFAULT]
+  ...
+  email-protocol = smtp
+  smtp-server = smtp.example.net:587
+  smtp-auth = False
+  ...
+
+If your server requires you to login, change ``smtp-auth = False`` to
+``smtp-auth = True`` and enter your email username and password::
+
+  smtp-auth = True
+  smtp-username = username
+  smtp-password = password
+
+If your server requires an `TLS/SSL`_ connection (SMTPS), change
+``smtp-ssl = False`` to ``smtp-ssl = True``.  If your server does
+not require a SMTPS connection but you request authentication,
+rss2email will use STARTTLS_ to encrypt the connection before sending
+your login credentials to the server.
+
+__ `Simple Mail Transport Protocol`_
+
+Post-processing
+---------------
+
+rss2email has a mechanism to post-process entries. A post-processor can be used to change the content of each entry
+before rss2email sends the email out. A hook is added by defining the variable ``post-process`` in the
+config file. It takes two arguments, the module and the function to call. For example:
+
+  post-process = rss2email.post_process.prettify process
+
+Examples of built-in post-processors:
+
+* ``prettify.py`` prettifies the HTML content with BeautifulSoup.
+* ``redirect.py`` remove redirects on the post URL for privacy or durability.
+
+
+Automating rss2email
+====================
+
+More than likely you will want rss2email to run automatically at a
+regular interval. Under Windows this is can be easily accomplished
+using the Windows Task Scheduler. This site has a
+nice tutorial__ on it. Just select ``r2e.bat`` as the program to run. Once
+you've created the task, double click on it in the task list and
+change the Run entry so that ``run`` comes
+after ``r2e.bat``. For example, if you installed rss2email in
+the ``C:\rss2email`` directory, then you would change the Run
+entry from ``C:\rss2email\r2e.bat``
+to ``C:\rss2email\r2e.bat run``.
+
+__ `windows scheduler`_
+
+On Unix/Linux systems, you should add a cron_ job that runs ``r2e``.
+For example, run ``r2e`` every night (at 1:23 am) with::
+
+  23 1 * * * r2e run
+
+Development
+===========
+
+Community
+---------
+
+User discussion and development take place on GitHub. Please feel free
+to post bug reports, feature requests, comments, and patches. If you do
+not have a GitHub account and do not wish to acquire one, please come
+chat in the IRC channel.
+
+There is a developer chat on the `Libera IRC server`_, in the
+``rss2email`` channel. Feel free to idle.
+
+Tips and tricks
+---------------
+
+When adding a new test case, it is possible to just add the new input
+files, and then run the test suite with ``FORCE_TESTDATA_CREATION=1``,
+and the test suite will automatically generate the output file. Just
+make sure to check that the output file does match what is wanted before
+checking it in.
+
+.. _Debian package:
+  http://packages.qa.debian.org/r/rss2email.html
+.. _Fedora package:
+  https://src.fedoraproject.org/rpms/rss2email
+.. _Gentoo package:
+  http://gpo.zugaina.org/net-mail/rss2email
+.. _NetBSD package:
+  http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/mail/rss2email/README.html
+.. _NixOS package:
+  https://search.nixos.org/packages?channel=unstable&from=0&size=50&sort=relevance&query=rss2email
+.. _OpenBSD package:
+  http://openports.se/mail/rss2email
+.. _openSUSE package:
+  https://build.opensuse.org/package/show/openSUSE:Factory/rss2email
+.. _Ubuntu package:
+  https://launchpad.net/ubuntu/+source/rss2email
+.. _Python: http://www.python.org
+.. _feedparser: http://pypi.python.org/pypi/feedparser
+.. _html2text: http://pypi.python.org/pypi/html2text
+.. _Git: http://git-scm.com/
+.. _Simple Mail Transport Protocol: http://en.wikipedia.org/wiki/Simple_Mail_Transport_Protocol
+.. _TLS/SSL: http://en.wikipedia.org/wiki/Transport_Layer_Security
+.. _STARTTLS: http://en.wikipedia.org/wiki/STARTTLS
+.. _windows scheduler: http://www.iopus.com/guides/winscheduler.htm
+.. _cron: http://en.wikipedia.org/wiki/Cron
+.. _Libera IRC server: https://libera.chat/
diff --git a/rss2email.egg-info/SOURCES.txt b/rss2email.egg-info/SOURCES.txt
new file mode 100644
index 0000000..467df3f
--- /dev/null
+++ b/rss2email.egg-info/SOURCES.txt
@@ -0,0 +1,97 @@
+AUTHORS
+CHANGELOG
+COPYING
+MANIFEST.in
+README.rst
+pyproject.toml
+r2e
+r2e.1
+r2e.bat
+setup.py
+completion/r2e.zsh
+rss2email/__init__.py
+rss2email/command.py
+rss2email/config.py
+rss2email/email.py
+rss2email/error.py
+rss2email/feed.py
+rss2email/feeds.py
+rss2email/main.py
+rss2email/util.py
+rss2email/version.py
+rss2email.egg-info/PKG-INFO
+rss2email.egg-info/SOURCES.txt
+rss2email.egg-info/dependency_links.txt
+rss2email.egg-info/requires.txt
+rss2email.egg-info/top_level.txt
+rss2email/post_process/__init__.py
+rss2email/post_process/downcase.py
+rss2email/post_process/prettify.py
+rss2email/post_process/redirect.py
+test/README
+test/test.py
+test/test_reply_changes.py
+test/data/allthingsrss/1.config
+test/data/allthingsrss/1.expected
+test/data/allthingsrss/2.config
+test/data/allthingsrss/2.expected
+test/data/allthingsrss/3.config
+test/data/allthingsrss/3.expected
+test/data/allthingsrss/4.config
+test/data/allthingsrss/4.expected
+test/data/allthingsrss/5.config
+test/data/allthingsrss/5.expected
+test/data/allthingsrss/6.config
+test/data/allthingsrss/6.expected
+test/data/allthingsrss/7.config
+test/data/allthingsrss/7.expected
+test/data/allthingsrss/README
+test/data/allthingsrss/feed.atom
+test/data/bbc-chinese/1.config
+test/data/bbc-chinese/1.expected
+test/data/bbc-chinese/2.config
+test/data/bbc-chinese/2.expected
+test/data/bbc-chinese/3.config
+test/data/bbc-chinese/3.expected
+test/data/bbc-chinese/README
+test/data/bbc-chinese/feed.atom
+test/data/disqus/1.config
+test/data/disqus/1.expected
+test/data/disqus/README
+test/data/disqus/feed.rss
+test/data/fastmailstatus/1.config
+test/data/fastmailstatus/1.expected
+test/data/fastmailstatus/README
+test/data/fastmailstatus/feed.rss
+test/data/gmane/1.config
+test/data/gmane/1.expected
+test/data/gmane/2.config
+test/data/gmane/2.expected
+test/data/gmane/3.config
+test/data/gmane/3.expected
+test/data/gmane/4.config
+test/data/gmane/4.expected
+test/data/gmane/5.config
+test/data/gmane/5.expected
+test/data/gmane/README
+test/data/gmane/feed.rss
+test/data/nodejs/feed1.xml
+test/data/nodejs/feed2.xml
+test/data/nodejs/feed3.xml
+test/data/quiltville/1.config
+test/data/quiltville/1.expected
+test/data/quiltville/README
+test/data/quiltville/feed.atom
+test/data/tails/1.config
+test/data/tails/1.expected
+test/data/tails/2.config
+test/data/tails/2.expected
+test/data/tails/README
+test/data/tails/feed.rss
+test/data/tumblr/1.config
+test/data/tumblr/1.expected
+test/data/tumblr/README
+test/data/tumblr/feed.rss
+test/util/execcontext.py
+test/util/tempmaildir.py
+test/util/tempsendmail.py
\ No newline at end of file
diff --git a/rss2email.egg-info/dependency_links.txt b/rss2email.egg-info/dependency_links.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/rss2email.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/rss2email.egg-info/requires.txt b/rss2email.egg-info/requires.txt
new file mode 100644
index 0000000..c75b5a2
--- /dev/null
+++ b/rss2email.egg-info/requires.txt
@@ -0,0 +1,2 @@
+feedparser>=6.0.5
+html2text>=2020.1.16
diff --git a/rss2email.egg-info/top_level.txt b/rss2email.egg-info/top_level.txt
new file mode 100644
index 0000000..b424388
--- /dev/null
+++ b/rss2email.egg-info/top_level.txt
@@ -0,0 +1 @@
+rss2email
diff --git a/rss2email/__init__.py b/rss2email/__init__.py
index eab5b16..fd3ece3 100644
--- a/rss2email/__init__.py
+++ b/rss2email/__init__.py
@@ -1,4 +1,5 @@
-# Copyright (C) 2012-2021 Adam Mokhtari <2553423+uutari@users.noreply.github.com>
+# Copyright (C) 2012-2022 Adam Mokhtari <2553423+uutari@users.noreply.github.com>
+#                         Amir Yalon <git@please.nospammail.net>
 #                         Andrey Zelenchuk <azelenchuk@plesk.com>
 #                         François Boulogne <fboulogne sciunto org>
 #                         Léo Gaspard <leo@gaspard.io>
@@ -26,7 +27,7 @@ import logging as _logging
 import sys as _sys
 
 
-__version__ = '3.13.1'
+__version__ = '3.14'
 __url__ = 'https://github.com/rss2email/rss2email'
 __author__ = 'The rss2email maintainers'
 __email__ = 'rss2email@tremily.us'
diff --git a/rss2email/command.py b/rss2email/command.py
index 7f0ab24..8947e2f 100644
--- a/rss2email/command.py
+++ b/rss2email/command.py
@@ -1,4 +1,6 @@
-# Copyright (C) 2012-2021 Etienne Millon <me@emillon.org>
+# Copyright (C) 2012-2022 Amir Yalon <git@please.nospammail.net>
+#                         Etienne Millon <me@emillon.org>
+#                         Faye Duxovni <duxovni@duxovni.org>
 #                         Gregory Soutade <gregory@soutade.fr>
 #                         Kaashif Hymabaccus <kaashif@kaashif.co.uk>
 #                         Karthikeyan Singaravelan <tir.karthi@gmail.com>
@@ -6,8 +8,9 @@
 #                         Martin Monperrus <monperrus@users.noreply.github.com>
 #                         Nicolas KAROLAK <nicolas@karolak.fr>
 #                         Profpatsch <mail@profpatsch.de>
+#                         Timendum <timedum@gmail.com>
 #                         W. Trevor King <wking@tremily.us>
-#                         auouymous <5005204+auouymous@users.noreply.github.com>
+#                         auouymous <au@qzx.com>
 #
 # This file is part of rss2email.
 #
@@ -44,7 +47,7 @@ def new(feeds, args):
         feeds.config['DEFAULT']['to'] = args.email
     if _os.path.exists(feeds.configfiles[-1]):
         raise _error.ConfigAlreadyExistsError(feeds=feeds)
-    feeds.save()
+    feeds.save_config()
 
 def email(feeds, args):
     "Update the default target email address"
@@ -53,7 +56,7 @@ def email(feeds, args):
     else:
         _LOG.info('set the default target email to {}'.format(args.email))
     feeds.config['DEFAULT']['to'] = args.email
-    feeds.save()
+    feeds.save_config()
 
 def add(feeds, args):
     "Add a new feed to the database"
@@ -61,7 +64,10 @@ def add(feeds, args):
     _LOG.info('add new feed {}'.format(feed))
     if not feed.to:
         raise _error.NoToEmailAddress(feed=feed, feeds=feeds)
-    feeds.save()
+    if args.only_new:
+        feed.run(send=False, clean=False)
+    feeds.save_config()
+    feeds.save_feeds()
 
 def run(feeds, args):
     "Fetch feeds and send entry emails."
@@ -93,7 +99,7 @@ def run(feeds, args):
                     e.log()
                 last_server = current_server
     finally:
-        feeds.save()
+        feeds.save_feeds()
 
 def list(feeds, args):
     "List all the feeds in the database"
@@ -116,7 +122,7 @@ def _set_active(feeds, args, active=True):
         feed = feeds.index(index)
         _LOG.info('{} feed {}'.format(action, feed))
         feed.active = active
-    feeds.save()
+    feeds.save_config()
 
 def pause(feeds, args):
     "Pause a feed (disable fetching)"
@@ -135,7 +141,8 @@ def delete(feeds, args):
     for feed in to_remove:
         _LOG.info('deleting feed {}'.format(feed))
         feeds.remove(feed)
-    feeds.save()
+    feeds.save_config()
+    feeds.save_feeds()
 
 def reset(feeds, args):
     "Forget dynamic feed data (e.g. to re-send old entries)"
@@ -145,7 +152,7 @@ def reset(feeds, args):
         feed = feeds.index(index)
         _LOG.info('resetting feed {}'.format(feed))
         feed.reset()
-    feeds.save()
+    feeds.save_feeds()
 
 def opmlimport(feeds, args):
     "Import configuration from OPML."
@@ -173,7 +180,8 @@ def opmlimport(feeds, args):
                     name = name_slug_regexp.sub('-', text)
             feed = feeds.new_feed(name=name, url=url)
             _LOG.info('add new feed {}'.format(feed))
-    feeds.save()
+    feeds.save_config()
+    feeds.save_feeds()
 
 def opmlexport(feeds, args):
     "Export configuration to OPML."
diff --git a/rss2email/config.py b/rss2email/config.py
index 91ea05a..79a711f 100644
--- a/rss2email/config.py
+++ b/rss2email/config.py
@@ -1,17 +1,20 @@
-# Copyright (C) 2004-2021 Aaron Swartz
+# Copyright (C) 2004-2022 Aaron Swartz
 #                         Alyssa Ross <hi@alyssa.is>
+#                         Amir Yalon <git@please.nospammail.net>
 #                         Anders Damsgaard <anders@adamsgaard.dk>
 #                         Andrey Zelenchuk <azelenchuk@parallels.com>
 #                         Andrey Zelenchuk <azelenchuk@plesk.com>
 #                         Brian Lalor
 #                         Dean Jackson
 #                         Dmitry Bogatov <KAction@gnu.org>
+#                         Ellen Wang <squeakbat@users.noreply.github.com>
 #                         Erik Hetzner
 #                         Etienne Millon <me@emillon.org>
 #                         François Boulogne <fboulogne sciunto org>
 #                         George Saunders <georgesaunders@gmail.com>
 #                         Jakub Wilk <jwilk@jwilk.net>
 #                         Joey Hess
+#                         Josh Wainwright <git@jawainwright.co.uk>
 #                         Kaashif Hymabaccus <kaashif@kaashif.co.uk>
 #                         Lindsey Smith <lindsey.smith@gmail.com>
 #                         Léo Gaspard <leo@gaspard.io>
@@ -24,7 +27,6 @@
 #                         Thibaut Girka <thib@sitedethib.com>
 #                         W. Trevor King <wking@tremily.us>
 #                         Yannik Sembritzki <yannik@sembritzki.me>
-#                         auouymous <5005204+auouymous@users.noreply.github.com>
 #                         auouymous <au@qzx.com>
 #                         boyska <piuttosto@logorroici.org>
 #                         ryneeverett <ryneeverett@gmail.com>
@@ -53,7 +55,7 @@ import html2text as _html2text
 
 class Config (_configparser.ConfigParser):
     def __init__(self, dict_type=_collections.OrderedDict,
-                 interpolation=_configparser.ExtendedInterpolation(),
+                 interpolation=None,
                  **kwargs):
         super(Config, self).__init__(
             dict_type=dict_type, interpolation=interpolation, **kwargs)
@@ -110,7 +112,7 @@ CONFIG['DEFAULT'] = _collections.OrderedDict((
         ('proxy', ''),
         # Set the timeout (in seconds) for feed server response
         ('feed-timeout', str(60)),
-        # Set the time (in seconds) to sleep between fetches from the same server
+        # Set the sleep interval (in seconds) between consecutive fetches from the same server
         ('same-server-fetch-interval', str(0)),
 
         ### Processing
@@ -120,6 +122,9 @@ CONFIG['DEFAULT'] = _collections.OrderedDict((
         # True: Send a single, multi-entry email per feed per rss2email run.
         # False: Send a single email per entry.
         ('digest', str(False)),
+        # multipart/digest: use Content-type: multipart/digest
+        # multipart/mixed: use Content-type: multipart/mixed
+        ('digest-type', 'multipart/digest'),
         # True: Generate Date header based on item's date, when possible.
         # False: Generate Date header based on time sent.
         ('date-header', str(False)),
@@ -156,6 +161,10 @@ CONFIG['DEFAULT'] = _collections.OrderedDict((
         # digest message before it is mailed.
         # Example: digest-post-process = 'rss2email.post_process.downcase downcase_message'
         ('digest-post-process', ''),
+        # The format for the Subject line.  Available attributes are
+        # 'feed', 'feed-name', 'feed-url', 'feed-title'.
+        ('subject-format', '{feed-title}'),
+
         ## HTML conversion
         # True: Send text/html messages when possible.
         # False: Convert HTML to plain text.
@@ -195,10 +204,10 @@ CONFIG['DEFAULT'] = _collections.OrderedDict((
                 '  padding: 5px;\n'
                 '  margin-bottom: 0px;\n'
                 '}\n'
-                '#entry {\n'
+                '.entry {\n'
                 '  border: solid 4px #c3d9ff;\n'
                 '}\n'
-                '#body {\n'
+                '.body {\n'
                 '  margin-left: 5px;\n'
                 '  margin-right: 5px;\n'
                 '}\n')),
diff --git a/rss2email/email.py b/rss2email/email.py
index d13a3f6..fe8b769 100644
--- a/rss2email/email.py
+++ b/rss2email/email.py
@@ -1,6 +1,6 @@
 # -*- encoding: utf-8 -*-
 #
-# Copyright (C) 2012-2021 Amir Yalon <git@please.nospammail.net>
+# Copyright (C) 2012-2022 Amir Yalon <git@please.nospammail.net>
 #                         Arun Persaud <apersaud@lbl.gov>
 #                         Dmitry Bogatov <KAction@gnu.org>
 #                         George Saunders <georgesaunders@gmail.com>
@@ -12,7 +12,6 @@
 #                         Thibaut Girka <thib@sitedethib.com>
 #                         W. Trevor King <wking@tremily.us>
 #                         Yannik Sembritzki <yannik@sembritzki.me>
-#                         auouymous <5005204+auouymous@users.noreply.github.com>
 #                         auouymous <au@qzx.com>
 #                         boyska <piuttosto@logorroici.org>
 #                         ryneeverett <ryneeverett@gmail.com>
diff --git a/rss2email/error.py b/rss2email/error.py
index 26806c9..1c6f1f1 100644
--- a/rss2email/error.py
+++ b/rss2email/error.py
@@ -1,8 +1,11 @@
-# Copyright (C) 2012-2021 Etienne Millon <me@emillon.org>
+# Copyright (C) 2012-2022 Amir Yalon <git@please.nospammail.net>
+#                         Ellen Wang <squeakbat@users.noreply.github.com>
+#                         Etienne Millon <me@emillon.org>
+#                         Julien Palard <julien@palard.fr>
 #                         Léo Gaspard <leo@gaspard.io>
 #                         Profpatsch <mail@profpatsch.de>
 #                         W. Trevor King <wking@tremily.us>
-#                         auouymous <5005204+auouymous@users.noreply.github.com>
+#                         auouymous <au@qzx.com>
 #                         ryneeverett <ryneeverett@gmail.com>
 #
 # This file is part of rss2email.
@@ -218,13 +221,13 @@ class DataFileError (FeedsError):
     def __init__(self, feeds, message=None):
         if message is None:
             message = 'problem with the feed data file {}'.format(
-                feeds.datafile)
+                feeds.datafile_path)
         super(DataFileError, self).__init__(feeds=feeds, message=message)
 
 
 class NoDataFile (DataFileError):
     def __init__(self, feeds):
-        message = 'feed data file {} does not exist'.format(feeds.datafile)
+        message = 'feed data file {} does not exist'.format(feeds.datafile_path)
         super(NoDataFile, self).__init__(feeds=feeds, message=message)
 
     def log(self):
@@ -266,3 +269,8 @@ class ConfigAlreadyExistsError (FeedsError):
     def __init__(self, feeds=None):
         message = 'configuration file already exists'
         super().__init__(feeds=feeds, message=message)
+
+class InvalidDigestType (RSS2EmailError):
+    def __init__(self, value):
+        message = "invalid digest-type value '{value}'".format(value=value)
+        super(InvalidDigestType, self).__init__(message=message)
diff --git a/rss2email/feed.py b/rss2email/feed.py
index fbf2e5a..790c499 100644
--- a/rss2email/feed.py
+++ b/rss2email/feed.py
@@ -1,6 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2004-2021 Aaron Swartz
-#                         Amir Yalon <105565+amiryal@users.noreply.github.com>
+# Copyright (C) 2004-2022 Aaron Swartz
 #                         Amir Yalon <git@please.nospammail.net>
 #                         Anders Damsgaard <anders@adamsgaard.dk>
 #                         Andrey Zelenchuk <azelenchuk@parallels.com>
@@ -8,6 +7,7 @@
 #                         Brian Lalor
 #                         Dean Jackson
 #                         Dennis Keitzel <github@pinshot.net>
+#                         Ellen Wang <squeakbat@users.noreply.github.com>
 #                         Emil Oppeln-Bronikowski <emil@fuse.pl>
 #                         Erik Hetzner
 #                         Etienne Millon <me@emillon.org>
@@ -17,6 +17,7 @@
 #                         Jakub Wilk <jwilk@jwilk.net>
 #                         Joey Hess
 #                         Jonathan Kamens <jik@kamens.us>
+#                         Josh Wainwright <git@jawainwright.co.uk>
 #                         Kaashif Hymabaccus <kaashif@kaashif.co.uk>
 #                         Karthikeyan Singaravelan <tir.karthi@gmail.com>
 #                         Lindsey Smith <lindsey.smith@gmail.com>
@@ -28,8 +29,8 @@
 #                         Matej Cepl
 #                         Notkea <pacien@users.noreply.github.com>
 #                         Profpatsch <mail@profpatsch.de>
+#                         Steve Mokris <smokris@softpixel.com>
 #                         W. Trevor King <wking@tremily.us>
-#                         auouymous <5005204+auouymous@users.noreply.github.com>
 #                         auouymous <au@qzx.com>
 #                         shan3141 <xpoh434@users.noreply.github.com>
 #
@@ -384,7 +385,7 @@ class Feed (object):
                 _urllib_request.ProxyHandler({ 'http': proxy, 'https': proxy })
             ]
         f = _util.TimeLimitedFunction('feed {}'.format(self.name), timeout, _feedparser.parse)
-        return f(self.url, self.etag, modified=self.modified, **kwargs)
+        return f(self.url, self.etag, modified=self.modified, agent=self.user_agent, **kwargs)
 
     def _process(self, parsed):
         _LOG.info('process {}'.format(self))
@@ -509,7 +510,7 @@ class Feed (object):
         new_state['hash'] = new_hash
 
         sender = self._get_entry_email(parsed=parsed, entry=entry)
-        subject = self._get_entry_title(entry)
+        subject = self._get_entry_subject(entry=entry)
 
         message_id = '<{0}@{1}>'.format(_uuid.uuid4(), platform.node())
         in_reply_to = old_state.get('message_id') if old_state is not None else None
@@ -668,6 +669,17 @@ class Feed (object):
         if 'name' in feed.get('publisher_detail', []):
             data['publisher'] = feed.publisher_detail.name
         name = self.name_format.format(**data)
+        name = name.replace('\n', ' ').strip()
+        return _html.unescape(name)
+
+    def _get_entry_subject(self, entry):
+        data = {
+            'feed': self,
+            'feed-name': self.name,
+            'feed-url': self.url,
+            'feed-title': self._get_entry_title(entry),
+            }
+        name = self.subject_format.format(**data)
         return _html.unescape(name)
 
     def _validate_email(self, email, default=None):
@@ -813,14 +825,19 @@ class Feed (object):
                         _saxutils.escape(self.css),
                         '    </style>',
                         ])
+            # For backward compatibility, specify "body" and "entry"
+            # as both class and id.  Unlike the other elements
+            # (header, footer) they were used as ids, not classes,
+            # which was inconsistent as well as problemmatic
+            # in the config file (# is a comment character).
             lines.extend([
                     '</head>',
                     '<body dir="auto">',
-                    '<div id="entry">',
+                    '<div class="entry" id="entry">',
                     '<h1 class="header"><a href="{}">{}</a></h1>'.format(
                         _saxutils.escape(link) if link else '',
                         _saxutils.escape(subject)),
-                    '<div id="body">',
+                    '<div class="body" id="body">',
                     ])
             if content['type'] in ('text/html', 'application/xhtml+xml'):
                 lines.append(content['value'].strip())
@@ -915,6 +932,9 @@ class Feed (object):
                 self.seen[guid]['old'] = True
 
         if self.digest:
+            type = self.digest_type
+            if type not in ['multipart/digest', 'multipart/mixed']:
+                raise _error.InvalidDigestType(type)
             digest = self._new_digest()
             seen = []
             for (guid, state, sender, message) in self._process(parsed):
@@ -972,7 +992,10 @@ class Feed (object):
                     old = old - 1
 
     def _new_digest(self):
-        digest = _MIMEMultipart('digest')
+        if self.digest_type == 'multipart/digest':
+            digest = _MIMEMultipart('digest')
+        else:
+            digest = _MIMEMultipart('mixed')
         digest['To'] = _formataddr(_parseaddr(self.to))  # Encodes with utf-8 as necessary
         digest['Subject'] = 'digest for {}'.format(self.name)
         digest['Message-ID'] = '<{0}@{1}>'.format(_uuid.uuid4(), platform.node())
@@ -983,9 +1006,13 @@ class Feed (object):
         return digest
 
     def _append_to_digest(self, digest, message):
-        part = _MIMEMessage(message)
-        part.add_header('Content-Disposition', 'attachment')
-        digest.attach(part)
+        if self.digest_type == 'multipart/digest':
+            part = _MIMEMessage(message)
+            part.add_header('Content-Disposition', 'attachment')
+            digest.attach(part)
+        else:
+            # multipart/mixed
+            digest.attach(message)
 
     def _send_digest(self, digest, sender):
         """Send a digest message
@@ -995,8 +1022,12 @@ class Feed (object):
         any messages in the digest, don't call this function.
         """
         digest['From'] = sender
-        last_part = digest.get_payload()[-1]
-        last_message = last_part.get_payload()[0]
+        if self.digest_type == 'multipart/digest':
+            last_part = digest.get_payload()[-1]
+            last_message = last_part.get_payload()[0]
+        else:
+            # multipart/mixed
+            last_message = digest.get_payload()[-1]
         digest['Date'] = last_message['Date']
         self._send(sender=sender, message=digest)
 
diff --git a/rss2email/feeds.py b/rss2email/feeds.py
index 14f3d2f..d1fcbd6 100644
--- a/rss2email/feeds.py
+++ b/rss2email/feeds.py
@@ -1,10 +1,12 @@
-# Copyright (C) 2004-2021 Aaron Swartz
+# Copyright (C) 2004-2022 Aaron Swartz
+#                         Amir Yalon <git@please.nospammail.net>
 #                         Andrey Zelenchuk <azelenchuk@parallels.com>
 #                         Andrey Zelenchuk <azelenchuk@plesk.com>
 #                         Brian Lalor
 #                         Dean Jackson
 #                         Erik Hetzner
 #                         Etienne Millon <me@emillon.org>
+#                         Faye Duxovni <duxovni@duxovni.org>
 #                         Joey Hess
 #                         Kaashif Hymabaccus <kaashif@kaashif.co.uk>
 #                         Lindsey Smith <lindsey.smith@gmail.com>
@@ -15,6 +17,7 @@
 #                         Profpatsch <mail@profpatsch.de>
 #                         Raphaël Droz <raphael.droz+floss@gmail.com>
 #                         W. Trevor King <wking@tremily.us>
+#                         auouymous <au@qzx.com>
 #                         ryneeverett <ryneeverett@gmail.com>
 #
 # This file is part of rss2email.
@@ -110,7 +113,7 @@ class Feeds (list):
     Tweak the feed configuration and save.
 
     >>> feeds[0].to = None
-    >>> feeds.save()
+    >>> feeds.save_config()
     >>> print(open(configfile, 'r').read().rstrip('\\n'))
     ... # doctest: +REPORT_UDIFF, +ELLIPSIS
     [DEFAULT]
@@ -298,6 +301,11 @@ class Feeds (list):
             return order[feed.name]
         self.sort(key=key)
 
+    def close(self):
+        if self.datafile is not None:
+            self.datafile.close()
+            self.datafile = None
+
     def _load_pickled_data(self, stream):
         _LOG.info('try and load data file using Pickle')
         with open(self.datafile_path, 'rb') as f:
@@ -319,7 +327,7 @@ class Feeds (list):
             'cannot convert data file from version {} to {}'.format(
                 version, self.datafile_version))
 
-    def save(self):
+    def save_config(self):
         dst_config_file = _os.path.realpath(self.configfiles[-1])
         _LOG.debug('save feed configuration to {}'.format(dst_config_file))
         for feed in self:
@@ -333,9 +341,8 @@ class Feeds (list):
             f.flush()
             _os.fsync(f.fileno())
         _os.replace(tmpfile, dst_config_file)
-        self._save_feeds()
 
-    def _save_feeds(self):
+    def save_feeds(self):
         _LOG.debug('save feed data to {}'.format(self.datafile_path))
         dirname = _os.path.dirname(self.datafile_path)
         if dirname and not _os.path.isdir(dirname):
@@ -348,14 +355,10 @@ class Feeds (list):
         if UNIX:
             # Replace the file, then release the lock by closing the old one.
             _os.replace(tmpfile, self.datafile_path)
-            if self.datafile is not None:
-                self.datafile.close()  # release the lock
-                self.datafile = None
+            self.close()  # release the lock
         else:
             # On Windows we cannot replace the file while it is opened. And we have no lock.
-            if self.datafile is not None:
-                self.datafile.close()
-                self.datafile = None
+            self.close()
             _os.replace(tmpfile, self.datafile_path)
 
     def _save_feed_states(self, feeds, stream):
diff --git a/rss2email/main.py b/rss2email/main.py
index 65ff8b5..e83cb67 100644
--- a/rss2email/main.py
+++ b/rss2email/main.py
@@ -1,12 +1,14 @@
-# Copyright (C) 2012-2021 Andrey Zelenchuk <azelenchuk@parallels.com>
+# Copyright (C) 2012-2022 Amir Yalon <git@please.nospammail.net>
+#                         Andrey Zelenchuk <azelenchuk@parallels.com>
 #                         Andrey Zelenchuk <azelenchuk@plesk.com>
 #                         Gregory Soutade <gregory@soutade.fr>
 #                         Kaashif Hymabaccus <kaashif@kaashif.co.uk>
 #                         Lucas <lucas@sexy.is>
 #                         Léo Gaspard <leo@gaspard.io>
 #                         Profpatsch <mail@profpatsch.de>
+#                         Timendum <timedum@gmail.com>
 #                         W. Trevor King <wking@tremily.us>
-#                         auouymous <5005204+auouymous@users.noreply.github.com>
+#                         auouymous <au@qzx.com>
 #                         ryneeverett <ryneeverett@gmail.com>
 #
 # This file is part of rss2email.
@@ -98,6 +100,9 @@ def run(*args, **kwargs):
     add_parser.add_argument(
         'email', nargs='?',
         help='target email for the new feed')
+    add_parser.add_argument(
+        '--only-new', action='store_true',
+        help="entries in the feed now will not be sent")
 
     run_parser = subparsers.add_parser(
         'run', help=_command.run.__doc__.splitlines()[0])
@@ -203,6 +208,8 @@ def run(*args, **kwargs):
             raise  # don't mask the traceback
         _sys.exit(1)
     finally:
+        if feeds is not None:
+            feeds.close()
         if lockfile is not None:
             lockfile.close()
 
diff --git a/rss2email/post_process/prettify.py b/rss2email/post_process/prettify.py
index 20aa5a3..4ce0cb3 100644
--- a/rss2email/post_process/prettify.py
+++ b/rss2email/post_process/prettify.py
@@ -1,8 +1,10 @@
-# Copyright (C) 2013-2020 Arun Persaud <apersaud@lbl.gov>
+# Copyright (C) 2013-2022 Amir Yalon <git@please.nospammail.net>
+#                         Arun Persaud <apersaud@lbl.gov>
 #                         Etienne Millon <me@emillon.org>
 #                         Léo Gaspard <leo@gaspard.io>
 #                         Profpatsch <mail@profpatsch.de>
 #                         W. Trevor King <wking@tremily.us>
+#                         auouymous <au@qzx.com>
 #
 # This file is part of rss2email.
 #
@@ -44,7 +46,7 @@ then you can use::
 
 This means that your hook can live in any package in your
 ``PYTHONPATH``, in a package in your per-user site-packages
-(:pep:`307`), etc
+(:pep:`370`), etc
 
 The hook function itself has 5 arguments: ``feed``, ``parsed``,
 ``entry``, ``guid``, ``message`` and needs to return a ``message`` or
diff --git a/rss2email/util.py b/rss2email/util.py
index 1b975dd..2156cf4 100644
--- a/rss2email/util.py
+++ b/rss2email/util.py
@@ -1,9 +1,10 @@
-# Copyright (C) 2012-2021 Dennis Keitzel <github@pinshot.net>
+# Copyright (C) 2012-2022 Amir Yalon <git@please.nospammail.net>
+#                         Dennis Keitzel <github@pinshot.net>
 #                         Karthikeyan Singaravelan <tir.karthi@gmail.com>
 #                         Léo Gaspard <leo@gaspard.io>
 #                         Profpatsch <mail@profpatsch.de>
 #                         W. Trevor King <wking@tremily.us>
-#                         auouymous <5005204+auouymous@users.noreply.github.com>
+#                         auouymous <au@qzx.com>
 #
 # This file is part of rss2email.
 #
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000..8bfd5a1
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,4 @@
+[egg_info]
+tag_build = 
+tag_date = 0
+
diff --git a/setup.py b/setup.py
index 2233b5f..08e209f 100644
--- a/setup.py
+++ b/setup.py
@@ -1,4 +1,5 @@
-# Copyright (C) 2012-2021 Adam Mokhtari <2553423+uutari@users.noreply.github.com>
+# Copyright (C) 2012-2022 Adam Mokhtari <2553423+uutari@users.noreply.github.com>
+#                         Amir Yalon <git@please.nospammail.net>
 #                         Andrey Zelenchuk <azelenchuk@plesk.com>
 #                         Arun Persaud <apersaud@lbl.gov>
 #                         Léo Gaspard <leo@gaspard.io>
@@ -6,7 +7,6 @@
 #                         Profpatsch <mail@profpatsch.de>
 #                         Steven Siloti <ssiloti@gmail.com>
 #                         W. Trevor King <wking@tremily.us>
-#                         auouymous <5005204+auouymous@users.noreply.github.com>
 #                         auouymous <au@qzx.com>
 #
 # This file is part of rss2email.
@@ -66,7 +66,7 @@ setuptools.setup(
     scripts=['r2e'],
     provides=['rss2email'],
     install_requires=[
-        'feedparser>=6.0.0',
+        'feedparser>=6.0.5',
         'html2text>=2020.1.16',
         ],
     )
diff --git a/shell.nix b/shell.nix
deleted file mode 100644
index ddc183d..0000000
--- a/shell.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-{ nixpkgs ? import ./nix/nixpkgs.nix }:
-let
-  pkgs = import nixpkgs {};
-  pythonEnv = pkgs.poetry2nix.mkPoetryEnv {
-    projectDir = ./.;
-  };
-in pkgs.mkShell {
-  buildInputs = with pkgs; [
-    poetry
-    pythonEnv
-    git
-  ];
-}
diff --git a/test/data/allthingsrss/7.config b/test/data/allthingsrss/7.config
new file mode 100644
index 0000000..57526df
--- /dev/null
+++ b/test/data/allthingsrss/7.config
@@ -0,0 +1,4 @@
+[DEFAULT]
+to = a@b.com
+date-header = True
+subject-format = 123 {feed-name} -> {feed-title}
diff --git a/test/data/allthingsrss/7.expected b/test/data/allthingsrss/7.expected
new file mode 100644
index 0000000..a559a2a
--- /dev/null
+++ b/test/data/allthingsrss/7.expected
@@ -0,0 +1,110 @@
+SENT BY: "rss2email: Lindsey Smith" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "rss2email: Lindsey Smith" <user@rss2email.invalid>
+To: a@b.com
+Subject: 123 test -> Version 2.67 Released
+Date: Tue, 21 Sep 2010 16:55:07 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/allthingsrss/feed.atom
+X-RSS-ID: http://www.allthingsrss.com/rss2email/?p=62
+X-RSS-URL: http://feedproxy.google.com/~r/allthingsrss/hJBr/~3/aGbf5Gefkmc/
+X-RSS-TAGS: Uncategorized
+
+Version 2.67 of rss2email is now available for both
+[Linux](http://www.allthingsrss.com/rss2email/rss2email-2.67.tar.gz) and
+[Windows](http://www.allthingsrss.com/rss2email/rss2email-2.67.zip), which
+includes the latest development version of feedparser. Changes from the
+previous version:
+
+  * Fixed entries that include an id which is blank (i.e., an empty string) were being resent
+  * Fixed some entries not being sent by email because they had bad From headers
+  * Fixed From headers with HTML entities encoded twice
+  * Compatibility changes to support most recent development versions of feedparser
+  * Compatibility changes to support Google Reader feeds
+
+Complete list in the official
+[CHANGELOG](http://www.allthingsrss.com/rss2email/changelog).
+
+[![](http://feedads.g.doubleclick.net/~a/Sjq8v-Lq2dNKzkelsypiC4fjPLM/0/di)](http://feedads.g.doubleclick.net/~a/Sjq8v-Lq2dNKzkelsypiC4fjPLM/0/da)  
+[![](http://feedads.g.doubleclick.net/~a/Sjq8v-Lq2dNKzkelsypiC4fjPLM/1/di)](http://feedads.g.doubleclick.net/~a/Sjq8v-Lq2dNKzkelsypiC4fjPLM/1/da)
+
+![](http://feeds.feedburner.com/~r/allthingsrss/hJBr/~4/aGbf5Gefkmc)
+
+
+
+URL: http://feedproxy.google.com/~r/allthingsrss/hJBr/~3/aGbf5Gefkmc/
+
+SENT BY: "rss2email: Lindsey Smith" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "rss2email: Lindsey Smith" <user@rss2email.invalid>
+To: a@b.com
+Subject: 123 test -> Version 2.68 Released with Actual New Features
+Date: Fri, 01 Oct 2010 18:21:26 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/allthingsrss/feed.atom
+X-RSS-ID: http://www.allthingsrss.com/rss2email/?p=72
+X-RSS-URL: http://feedproxy.google.com/~r/allthingsrss/hJBr/~3/bT-I0iH2vw8/
+X-RSS-TAGS: Uncategorized
+
+Unlike the last few versions of rss2email that have trickled out, I finally
+got around to adding a few new oft-requested features! Version 2.68 of
+rss2email is now available for both
+[Linux](http://www.allthingsrss.com/rss2email/rss2email-2.68.tar.gz) and
+[Windows](http://www.allthingsrss.com/rss2email/rss2email-2.68.zip).
+
+Changes from the previous version:
+
+  * Added ability to pause/resume checking of individual feeds through pause and unpause commands
+  * Added ability to import and export OPML feed lists through importopml and exportopml commands
+
+Complete list in the official
+[CHANGELOG](http://www.allthingsrss.com/rss2email/changelog).
+
+**Pause/Unpause**
+
+Through `r2e pause _n_` where _n_ is a feed number, you can temporarily
+suspend checking that feed for new content. To start checking it again, simply
+run `r2e unpause _n_`. When you `r2e list`, an asterisk indicates that the
+feed is currently unpaused and active.
+
+[![](http://feedads.g.doubleclick.net/~a/nYgTsIUsS9pmvRZ6092XGGHnNKg/0/di)](http://feedads.g.doubleclick.net/~a/nYgTsIUsS9pmvRZ6092XGGHnNKg/0/da)  
+[![](http://feedads.g.doubleclick.net/~a/nYgTsIUsS9pmvRZ6092XGGHnNKg/1/di)](http://feedads.g.doubleclick.net/~a/nYgTsIUsS9pmvRZ6092XGGHnNKg/1/da)
+
+![](http://feeds.feedburner.com/~r/allthingsrss/hJBr/~4/bT-I0iH2vw8)
+
+
+
+URL: http://feedproxy.google.com/~r/allthingsrss/hJBr/~3/bT-I0iH2vw8/
+
+SENT BY: "rss2email: Lindsey Smith" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "rss2email: Lindsey Smith" <user@rss2email.invalid>
+To: a@b.com
+Subject: 123 test -> How to Read RSS Feeds in Emacs
+Date: Fri, 05 Nov 2010 17:36:14 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/allthingsrss/feed.atom
+X-RSS-ID: http://www.allthingsrss.com/rss2email/?p=79
+X-RSS-URL: http://feedproxy.google.com/~r/allthingsrss/hJBr/~3/JryfOLe_q6c/
+X-RSS-TAGS: Uncategorized
+
+something something irrelevant
+
+
+
+URL: http://feedproxy.google.com/~r/allthingsrss/hJBr/~3/JryfOLe_q6c/
diff --git a/test/data/fastmailstatus/1.expected b/test/data/fastmailstatus/1.expected
index e5b96ce..40a9d01 100644
--- a/test/data/fastmailstatus/1.expected
+++ b/test/data/fastmailstatus/1.expected
@@ -18,9 +18,9 @@ X-RSS-ID: 3BBE2C00-6005-11EB-9AA1-A5E048FE9AF7
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="">General availability - Warning</a></h1>
-<div id="body">
+<div class="body" id="body">
 A small segment of customers are experiencing interrupted access to Fastmail services. We're looking into it.
 </div>
 <div class="footer">
@@ -50,9 +50,9 @@ X-RSS-ID: A3AE9CEC-6018-11EB-9AA1-A5E048FE9AF7
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="">General availability - Up</a></h1>
-<div id="body">
+<div class="body" id="body">
 We've resolved the issue and access has been restored. No mail has been lost.
 </div>
 <div class="footer">
@@ -82,9 +82,9 @@ X-RSS-ID: DDE8438E-808B-11EB-A9D6-823F50FE9AF7
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="">Support System - Warning</a></h1>
-<div id="body">
+<div class="body" id="body">
 Our customer support system is currently performing a scheduled upgrade expected to last two to three hours. During this time, our support team will not be responding to requests. Tickets emailed to support@fastmail.com will be delayed, but not lost.
 </div>
 <div class="footer">
@@ -114,9 +114,9 @@ X-RSS-ID: A73D84DE-8095-11EB-A9D6-823F50FE9AF7
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="">Support System - Up</a></h1>
-<div id="body">
+<div class="body" id="body">
 The scheduled upgrade to our customer support system is complete. No tickets were lost. Thanks for your patience!
 </div>
 <div class="footer">
@@ -146,9 +146,9 @@ X-RSS-ID: 63DB21E8-8855-11EB-A9D6-823F50FE9AF7
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="">Support System - Down</a></h1>
-<div id="body">
+<div class="body" id="body">
 Our customer support system will experience a brief downtime expected to last 10 to 30 minutes. During this time, our support team will not be responding to requests.  Tickets emailed to support@fastmail.com will be delayed, but not lost.
 </div>
 <div class="footer">
@@ -178,9 +178,9 @@ X-RSS-ID: 1C464866-885B-11EB-A9D6-823F50FE9AF7
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="">Support System - Up</a></h1>
-<div id="body">
+<div class="body" id="body">
 Access to the customer support system has been restored, and we're ready to assist you!
 </div>
 <div class="footer">
@@ -210,9 +210,9 @@ X-RSS-ID: 4ADB3D56-88EE-11EB-A9D6-823F50FE9AF7
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="">Support System - Down</a></h1>
-<div id="body">
+<div class="body" id="body">
 Our customer support system will experience a brief downtime expected to last 10 to 30 minutes. During this time, our support team will not be responding to requests. Tickets emailed to support@fastmail.com will be delayed, but not lost.
 </div>
 <div class="footer">
@@ -242,9 +242,9 @@ X-RSS-ID: E017F5EA-88F2-11EB-A9D6-823F50FE9AF7
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="">Support System - Up</a></h1>
-<div id="body">
+<div class="body" id="body">
 Access to the customer support system has been restored, and we're ready to assist you!
 </div>
 <div class="footer">
@@ -274,9 +274,9 @@ X-RSS-ID: FE688B1E-A179-11EB-8CC4-B51653FE9AF7
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="">Login &amp; sessions - Warning</a></h1>
-<div id="body">
+<div class="body" id="body">
 Customers are currently unable to log out. We've isolated the cause and expect it will be resolved within an hour.
 </div>
 <div class="footer">
@@ -306,9 +306,9 @@ X-RSS-ID: 2EC9D062-A182-11EB-8CC4-B51653FE9AF7
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="">Login &amp; sessions - Up</a></h1>
-<div id="body">
+<div class="body" id="body">
 We've resolved the issue and the ability to log out has been restored. No mail has been lost.
 </div>
 <div class="footer">
diff --git a/test/data/gmane/3.expected b/test/data/gmane/3.expected
index 6d7459e..e5baa76 100644
--- a/test/data/gmane/3.expected
+++ b/test/data/gmane/3.expected
@@ -19,9 +19,9 @@ X-RSS-URL: http://permalink.gmane.org/gmane.mail.rss2email/1
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="http://permalink.gmane.org/gmane.mail.rss2email/1">Re: new maintainer and mailing list for rss2email</a></h1>
-<div id="body">
+<div class="body" id="body">
 <pre>Alrighty, this is the first email on the list and also my first
 production mlmmj list, so I've CCed you both directly.  Etienne, let
 me know if you get the direct email but not the list email, in which
@@ -82,9 +82,9 @@ X-RSS-URL: http://permalink.gmane.org/gmane.mail.rss2email/2
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="http://permalink.gmane.org/gmane.mail.rss2email/2">Re: new maintainer and mailing list for rss2email</a></h1>
-<div id="body">
+<div class="body" id="body">
 <pre>* W. Trevor King &lt;wking-vJI2gpByivqcqzYg7KEe8g&lt; at &gt;public.gmane.org&gt; [121112 23:18]:
 
 It seems to work, though it may have been grouped together with my
@@ -135,9 +135,9 @@ X-RSS-URL: http://permalink.gmane.org/gmane.mail.rss2email/3
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="http://permalink.gmane.org/gmane.mail.rss2email/3">Re: new maintainer and mailing list for rss2email</a></h1>
-<div id="body">
+<div class="body" id="body">
 <pre>
 send-email style, although I'll accept anything ;).
 
@@ -172,9 +172,9 @@ X-RSS-URL: http://permalink.gmane.org/gmane.mail.rss2email/4
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="http://permalink.gmane.org/gmane.mail.rss2email/4">Re: new maintainer and mailing list for rss2email</a></h1>
-<div id="body">
+<div class="body" id="body">
 <pre>* W. Trevor King &lt;wking-vJI2gpByivqcqzYg7KEe8g&lt; at &gt;public.gmane.org&gt; [121113 13:21]:
 
 Ack.
@@ -212,9 +212,9 @@ X-RSS-URL: http://permalink.gmane.org/gmane.mail.rss2email/5
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="http://permalink.gmane.org/gmane.mail.rss2email/5">split massive package into modules</a></h1>
-<div id="body">
+<div class="body" id="body">
 <pre>I just split the 1769-line rss2email.py module into a more manageable
 package with sub-modules:
 
diff --git a/test/data/gmane/4.expected b/test/data/gmane/4.expected
index 3e35b3c..6cf8cc4 100644
--- a/test/data/gmane/4.expected
+++ b/test/data/gmane/4.expected
@@ -24,9 +24,9 @@ Content-Transfer-Encoding: 7bit
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="http://permalink.gmane.org/gmane.mail.rss2email/1">Re: new maintainer and mailing list for rss2email</a></h1>
-<div id="body">
+<div class="body" id="body">
 <pre>Alrighty, this is the first email on the list and also my first
 production mlmmj list, so I've CCed you both directly.  Etienne, let
 me know if you get the direct email but not the list email, in which
@@ -138,9 +138,9 @@ Content-Transfer-Encoding: 7bit
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="http://permalink.gmane.org/gmane.mail.rss2email/2">Re: new maintainer and mailing list for rss2email</a></h1>
-<div id="body">
+<div class="body" id="body">
 <pre>* W. Trevor King &lt;wking-vJI2gpByivqcqzYg7KEe8g&lt; at &gt;public.gmane.org&gt; [121112 23:18]:
 
 It seems to work, though it may have been grouped together with my
@@ -232,9 +232,9 @@ Content-Transfer-Encoding: 7bit
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="http://permalink.gmane.org/gmane.mail.rss2email/3">Re: new maintainer and mailing list for rss2email</a></h1>
-<div id="body">
+<div class="body" id="body">
 <pre>
 send-email style, although I'll accept anything ;).
 
@@ -293,9 +293,9 @@ Content-Transfer-Encoding: 7bit
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="http://permalink.gmane.org/gmane.mail.rss2email/4">Re: new maintainer and mailing list for rss2email</a></h1>
-<div id="body">
+<div class="body" id="body">
 <pre>* W. Trevor King &lt;wking-vJI2gpByivqcqzYg7KEe8g&lt; at &gt;public.gmane.org&gt; [121113 13:21]:
 
 Ack.
@@ -361,9 +361,9 @@ Content-Transfer-Encoding: 7bit
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="http://permalink.gmane.org/gmane.mail.rss2email/5">split massive package into modules</a></h1>
-<div id="body">
+<div class="body" id="body">
 <pre>I just split the 1769-line rss2email.py module into a more manageable
 package with sub-modules:
 
diff --git a/test/data/gmane/5.config b/test/data/gmane/5.config
new file mode 100644
index 0000000..9921e4e
--- /dev/null
+++ b/test/data/gmane/5.config
@@ -0,0 +1,6 @@
+[DEFAULT]
+to = a@b.com
+date-header = True
+digest = True
+digest-type = multipart/mixed
+digest-post-process = rss2email.post_process.downcase downcase_message
diff --git a/test/data/gmane/5.expected b/test/data/gmane/5.expected
new file mode 100644
index 0000000..f6b4370
--- /dev/null
+++ b/test/data/gmane/5.expected
@@ -0,0 +1,186 @@
+SENT BY: "gmane.mail.rss2email: W. Trevor King" <user@rss2email.invalid>
+Content-Type: multipart/mixed; boundary="===============...=="
+MIME-Version: 1.0
+To: a@b.com
+Subject: digest for test
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/gmane/feed.rss
+From: "gmane.mail.rss2email: W. Trevor King" <user@rss2email.invalid>
+Date: Tue, 13 Nov 2012 14:36:22 -0000
+
+--===============...==
+MIME-Version: 1.0
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "gmane.mail.rss2email: W. Trevor King" <user@rss2email.invalid>
+To: a@b.com
+Subject: Re: new maintainer and mailing list for rss2email
+Date: Mon, 12 Nov 2012 21:20:22 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/gmane/feed.rss
+X-RSS-ID: http://permalink.gmane.org/gmane.mail.rss2email/1
+X-RSS-URL: http://permalink.gmane.org/gmane.mail.rss2email/1
+
+
+    alrighty, this is the first email on the list and also my first
+    production mlmmj list, so i've cced you both directly.  etienne, let
+    me know if you get the direct email but not the list email, in which
+    case i'll try and figure out what i've miss-configured ;).  lindsey,
+    i'll direct future rss2email stuff to my new list, so subscribe if
+    you're interested.
+    
+    on mon, nov 12, 2012 at 06:17:50pm +0100, etienne millon wrote:
+    
+    wonderful.  let me know if you come up with anything during a
+    test-drive, and i'll get it in before the 3.0 release.
+    
+    
+    the 2.x config format is pure python, which means the users can do
+    whatever they want there (including monkey-patching urllib2, changing
+    the rss2email version number, etc.).  it's hard to imagine a robust
+    way to migrate everything a user may have done in there.
+    
+    
+    if you want to take a stab at it, i'll be happy to add it to a contrib
+    directory :).
+    
+    
+    great :).
+    
+    on mon, nov 12, 2012 at 01:48:13pm -0500, w. trevor king wrote:
+    
+    done: https://github.com/rss2email/rss2email
+    
+    
+
+
+
+url: http://permalink.gmane.org/gmane.mail.rss2email/1
+--===============...==
+MIME-Version: 1.0
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "gmane.mail.rss2email: Etienne Millon" <user@rss2email.invalid>
+To: a@b.com
+Subject: Re: new maintainer and mailing list for rss2email
+Date: Tue, 13 Nov 2012 10:48:07 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/gmane/feed.rss
+X-RSS-ID: http://permalink.gmane.org/gmane.mail.rss2email/2
+X-RSS-URL: http://permalink.gmane.org/gmane.mail.rss2email/2
+
+
+    * w. trevor king <wking-vji2gpbyivqcqzyg7kee8g< at >public.gmane.org> [121112 23:18]:
+    
+    it seems to work, though it may have been grouped together with my
+    mda. i'll tell you if i don't receive a mail where i'm not cced.
+    
+    
+    we're finalizing a release atm, so it will be the perfect time to try
+    a new rss2email release in a couple of months.
+    
+    
+    the idea is more to migrate the low hanging fruits (maybe 95% of
+    users) so that they don't lose their config. i was thinking to just
+    eval() the config file and output the relevant variables to the new
+    format. we'll see how it turns out :)
+    
+    
+    do you prefer taking pull requests there or as a discussion on the
+    mailing list (git send-email style) ?
+    
+    
+
+
+
+url: http://permalink.gmane.org/gmane.mail.rss2email/2
+--===============...==
+MIME-Version: 1.0
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "gmane.mail.rss2email: W. Trevor King" <user@rss2email.invalid>
+To: a@b.com
+Subject: Re: new maintainer and mailing list for rss2email
+Date: Tue, 13 Nov 2012 12:20:20 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/gmane/feed.rss
+X-RSS-ID: http://permalink.gmane.org/gmane.mail.rss2email/3
+X-RSS-URL: http://permalink.gmane.org/gmane.mail.rss2email/3
+
+
+    send-email style, although i'll accept anything ;).
+    
+    
+
+
+
+url: http://permalink.gmane.org/gmane.mail.rss2email/3
+--===============...==
+MIME-Version: 1.0
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "gmane.mail.rss2email: Etienne Millon" <user@rss2email.invalid>
+To: a@b.com
+Subject: Re: new maintainer and mailing list for rss2email
+Date: Tue, 13 Nov 2012 12:42:13 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/gmane/feed.rss
+X-RSS-ID: http://permalink.gmane.org/gmane.mail.rss2email/4
+X-RSS-URL: http://permalink.gmane.org/gmane.mail.rss2email/4
+
+
+    * w. trevor king <wking-vji2gpbyivqcqzyg7kee8g< at >public.gmane.org> [121113 13:21]:
+    
+    ack.
+    
+    also, confirming that the mailing list works.
+    
+    
+
+
+
+url: http://permalink.gmane.org/gmane.mail.rss2email/4
+--===============...==
+MIME-Version: 1.0
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "gmane.mail.rss2email: W. Trevor King" <user@rss2email.invalid>
+To: a@b.com
+Subject: split massive package into modules
+Date: Tue, 13 Nov 2012 14:36:22 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/gmane/feed.rss
+X-RSS-ID: http://permalink.gmane.org/gmane.mail.rss2email/5
+X-RSS-URL: http://permalink.gmane.org/gmane.mail.rss2email/5
+
+
+    i just split the 1769-line rss2email.py module into a more manageable
+    package with sub-modules:
+    
+    https://github.com/rss2email/rss2email/commit/066602efa088b4a89d67e23011613b4459db3c92
+    
+    
+
+
+
+url: http://permalink.gmane.org/gmane.mail.rss2email/5
+--===============...==--
+
diff --git a/test/data/quiltville/1.expected b/test/data/quiltville/1.expected
index d1b7063..8f38ebe 100644
--- a/test/data/quiltville/1.expected
+++ b/test/data/quiltville/1.expected
@@ -19,10 +19,10 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/02/projects-in-holding-pattern.h
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/02/pro=
 jects-in-holding-pattern.html">Projects in a Holding Pattern -</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-ZEOCIgL9BWE/YDeg4z8CnuI/AAAAAAAJKHQ/4yOcWKKf=
 VuIy9JN9GQYdyKaQddvJW846gCLcBGAsYHQ/s1024/20210224_114620.jpg" style=3D"mar=
@@ -104,10 +104,10 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/02/speaking-of-labels-and-more.h
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/02/spe=
 aking-of-labels-and-more.html">Speaking of Labels and More....</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-m7SfuH16Zf0/YDj0HthvL6I/AAAAAAAJKQc/EYUhS_Jm=
 Fe4tLlC5s6fRnzSwbvc-34GHwCLcBGAsYHQ/s1024/20210226_080050.jpg" style=3D"mar=
@@ -181,10 +181,10 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/02/into-rainy-weekend.html
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/02/int=
 o-rainy-weekend.html">Into a Rainy Weekend -</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-jQ471Nf6QiQ/YDpBhAre6vI/AAAAAAAJKWs/einaMFxy=
 d0YSmexbgk3898kwvgK_9jK1QCLcBGAsYHQ/s1024/20210227_074320.jpg" style=3D"mar=
@@ -255,10 +255,10 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/rough-tumble-into-march.html
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/03/rou=
 gh-tumble-into-march.html">Rough &amp; Tumble into March!</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-Qf0TLs3X7HU/YDzl41jX10I/AAAAAAAJKc4/jxJ67Oqx=
 sTUNHEfUfOjG934KmY1PYv6tgCLcBGAsYHQ/s2048/20210224_071400cr_fb.jpg" style=
@@ -314,10 +314,10 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/more-blue-in-studio.html
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/03/mor=
 e-blue-in-studio.html">MORE Blue in the Studio!</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-fd55pjfYX0Q/YD5GbJCOLgI/AAAAAAAJKi4/ssO-FN6G=
 7qgBoQf-YF5EvUYj6X2tsmacACLcBGAsYHQ/s1024/20210228_102504.jpg" style=3D"mar=
@@ -383,11 +383,11 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/small-studio-changes-big-stud
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/03/sma=
 ll-studio-changes-big-studio-impact.html">Small Studio Changes, Big Studio =
 Impact!</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><span s=
 tyle=3D"font-family: inherit; font-size: medium;"><br /></span></div><div c=
 lass=3D"separator" style=3D"clear: both; text-align: center;"><a href=3D"ht=
@@ -464,10 +464,10 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/monas-in-studio.html
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/03/mon=
 as-in-studio.html">Mona's in the Studio!</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-Gbu_gO06MVo/YEDVp0GLqcI/AAAAAAAJLJE/DBKYpcIe=
 dFQFGKfTFuu0Z2iPyNcle9FVgCLcBGAsYHQ/s1024/20210303_154357.jpg" style=3D"mar=
@@ -537,11 +537,11 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/quilting-from-sunrise-to-suns
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/03/qui=
 lting-from-sunrise-to-sunset.html">Quilting from Sunrise to Sunset -</a></h=
 1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-epbIKfK_9hQ/YEInGv5rBmI/AAAAAAAJLNg/uAFnF_Rq=
 ILYp6R6BYoyKPMnR1QTol3CLwCLcBGAsYHQ/s1024/20210304_102017.jpg" style=3D"mar=
@@ -625,10 +625,10 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/goodbye-hello.html
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/03/goo=
 dbye-hello.html">Goodbye, Hello!</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-CeEqYykL3L8/YEN87vLL8vI/AAAAAAAJLUE/nmI3dvgv=
 oQ4Mwb35XdRs_lDk3SfZxhhYQCLcBGAsYHQ/s1024/20210305_093220.jpg" style=3D"mar=
@@ -703,10 +703,10 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/diamond-tiles-on-day-three.ht
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/03/dia=
 mond-tiles-on-day-three.html">Diamond Tiles on Day Three!</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-d-r9CazYoRg/YEYW_-9e09I/AAAAAAAJLaA/nDwLOiyN=
 rrYc_L_YyDd8dUgOVetm6LzSgCLcBGAsYHQ/s1024/20210305_141310.jpg" style=3D"mar=
@@ -783,59 +783,60 @@ X-RSS-ID: tag:blogger.com,1999:blog-13569819.post-3583285823339513514
 X-RSS-URL: https://quiltville.blogspot.com/2021/03/its-here-bonnie-k-hunters-quilters-tech.html
 
 PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgo8L2hlYWQ+Cjxib2R5IGRpcj0iYXV0byI+
-CjxkaXYgaWQ9ImVudHJ5Ij4KPGgxIGNsYXNzPSJoZWFkZXIiPjxhIGhyZWY9Imh0dHBzOi8vcXVp
-bHR2aWxsZS5ibG9nc3BvdC5jb20vMjAyMS8wMy9pdHMtaGVyZS1ib25uaWUtay1odW50ZXJzLXF1
-aWx0ZXJzLXRlY2guaHRtbCI+SXQncyBIZXJlISBCb25uaWUgSy4gSHVudGVyJ3MgUXVpbHRlcidz
-IFRlY2ggU2V0ITwvYT48L2gxPgo8ZGl2IGlkPSJib2R5Ij4KPGRpdiBjbGFzcz0ic2VwYXJhdG9y
-IiBzdHlsZT0iY2xlYXI6IGJvdGg7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxhIGhyZWY9Imh0dHBz
-Oi8vMS5icC5ibG9nc3BvdC5jb20vLWgwMUxJbWJiYU1jL1lFZG9PS1FzTkRJL0FBQUFBQUFKTGZR
-L1ZrSlJQZ3prSlp3VjZZeUd1c1Y0M29qZ2JQa3VibmRDQUNMY0JHQXNZSFEvczEwMjQvMjAyMTAz
-MDhfMTUyMjQyLmpwZyIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAxZW07IG1hcmdpbi1yaWdodDogMWVt
-OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiBibGFjazsgZm9udC1mYW1pbHk6IGluaGVyaXQ7IGZvbnQt
-c2l6ZTogbWVkaXVtOyI+PGltZyBib3JkZXI9IjAiIGhlaWdodD0iNDkwIiBzcmM9Imh0dHBzOi8v
-MS5icC5ibG9nc3BvdC5jb20vLWgwMUxJbWJiYU1jL1lFZG9PS1FzTkRJL0FBQUFBQUFKTGZRL1Zr
-SlJQZ3prSlp3VjZZeUd1c1Y0M29qZ2JQa3VibmRDQUNMY0JHQXNZSFEvdzY0MC1oNDkwLzIwMjEw
-MzA4XzE1MjI0Mi5qcGciIHdpZHRoPSI2NDAiIC8+PC9zcGFuPjwvYT48L2Rpdj48c3BhbiBzdHls
-ZT0iZm9udC1mYW1pbHk6IGluaGVyaXQ7IGZvbnQtc2l6ZTogbWVkaXVtOyI+PGJyIC8+PC9zcGFu
-PjxkaXYgY2xhc3M9InNlcGFyYXRvciIgc3R5bGU9ImNsZWFyOiBib3RoOyB0ZXh0LWFsaWduOiBs
-ZWZ0OyI+PHAgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyBwYWRkaW5nOiAwcHg7Ij48
-c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IGluaGVyaXQ7IGZvbnQtc2l6ZTogbWVkaXVtOyI+U29t
-ZSBmdW4gdGhpbmdzIGhhdmUgYmVlbiBsb25nIGluIHRoZSAmcXVvdDtiZWhpbmQgdGhlIHNjZW5l
-cyZxdW90OyBjb2x1bW4sIHBsYXlpbmcgdGhlIHdhaXRpbmcgZ2FtZSB0byBnZXQgdGhpbmdzIG1h
-bnVmYWN0dXJlZCBhbmQgcmVsZWFzZWQgLSBpdCdzIGJlZW4gdGhhdCB3aG9sZSBzdXBwbHkgY2hh
-aW4gYmFjayB1cCwgeW91IGtub3c/PC9zcGFuPjwvcD48cCBzdHlsZT0iYmFja2dyb3VuZC1jb2xv
-cjogd2hpdGU7IHBhZGRpbmc6IDBweDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogaW5oZXJp
-dDsgZm9udC1zaXplOiBtZWRpdW07Ij5JIHdhcyB3YWl0aW5nIGZvciB0aGVzZSB0byBiZSByZWFk
-eSBmb3IgdGhlIGhvbGlkYXkgc2Vhc29uIC0gYmVjYXVzZSB0aGV5IG1ha2Ugc3VjaCBHUkVBVCBn
-aWZ0cyHCoCBCdXQgTWFyY2ggaXMgZ29vZCB0b28hPC9zcGFuPjwvcD48cCBzdHlsZT0iYmFja2dy
-b3VuZC1jb2xvcjogd2hpdGU7IHBhZGRpbmc6IDBweDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWls
-eTogaW5oZXJpdDsgZm9udC1zaXplOiBtZWRpdW07Ij5UaGVzZSBhcmUgdGhpbmdzIEkgdXNlIEVW
-RVJZIERBWSBpbiBteSB0cmF2ZWwgbGlmZSBhcyB3ZWxsIGFzIG15IHBlcnNvbmFsIGxpZmUg4oCT
-IGFuZCBJIGtub3cgeW91IGFyZSBnb2luZyB0byBsb3ZlIHRoZW0gYXMgbXVjaCBhcyBJIGRvLjwv
-c3Bhbj48L3A+PHAgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyBwYWRkaW5nOiAwcHg7
-Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IGluaGVyaXQ7IGZvbnQtc2l6ZTogbWVkaXVtOyI+
-SSBoYXZlIHdvcm4gZ2xhc3NlcyBzaW5jZSBJIHdhcyAzIHllYXJzIG9sZCDigJMgc29tZXRoaW5n
-IEkgZG9u4oCZdCBvZnRlbiBoYXZlIHRoZSBjaGFuY2UgdG8gYWRtaXQsIGFuZCB3aGlsZSBJIGhh
-dGVkIGJlaW5nIGNhbGxlZCDigJxmb3VyIGV5ZXPigJ0gaW4gc2Nob29sLCBhbmQgc3dpdGNoZWQg
-dG8gY29udGFjdHMgaW4gaGlnaCBzY2hvb2wgKG9oIHRoZSB2YW5pdHksIGFuZCBkZXNpcmUgdG8g
-Zml0IGluISkgSSBnYXZlIHVwIG9uIHRoYXQgaW4gY29sbGVnZSBhbmQgaGF2ZSBoYWQgZ2xhc3Nl
-cyBwZXJjaGVkIG9uIHRvcCBvZiBteSBub3NlIGFsbCBkYXksIGV2ZXJ5IGRheSBzaW5jZSE8L3Nw
-YW4+PC9wPjxwIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgcGFkZGluZzogMHB4OyI+
-PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBpbmhlcml0OyBmb250LXNpemU6IG1lZGl1bTsiPk5v
-dyB0aGF0IEkgaGF2ZSByZWFjaGVkIHRoZSDigJxtaWRkbGUgYWdl4oCdIHpvbmUg4oCTIEnigJlt
-IGZpbmRpbmcgdGhhdCBnbGFzc2VzIHdlYXJpbmcgaXMgbW9yZSB0aGUgbm9ybSBmb3IgbmVhcmx5
-IGV2ZXJ5b25lIOKAkyB3aGV0aGVyIHRoZXkgdXNlIHNpbXBsZSByZWFkZXJzIHRvIHNlZSBjbG9z
-ZXIgd2hlbiBzdGl0Y2hpbmcgb3Igd2hpbGUgd29ya2luZyBhdCB0aGUgY29tcHV0ZXIsIG9yIHRo
-b3NlIG9mIHVzIHdobyBuZWVkIG91ciBnbGFzc2VzIGV2ZXJ5IGRheSwgYW5kIGFyZSBncmF0ZWZ1
-bCBmb3IgdGhlIGFiaWxpdHkgdG8gc2VlIHdoYXQgd2UgYXJlIGRvaW5nLCB3aGF0ZXZlciB3ZSBh
-cmUgZG9pbmcsIG1vcmUgY2xlYXJseS48c3Bhbj48L3NwYW4+PC9zcGFuPjwvcD48L2Rpdj48YSBo
-cmVmPSJodHRwczovL3F1aWx0dmlsbGUuYmxvZ3Nwb3QuY29tLzIwMjEvMDMvaXRzLWhlcmUtYm9u
-bmllLWstaHVudGVycy1xdWlsdGVycy10ZWNoLmh0bWwjbW9yZSI+RGlkIFlvdSBDbGljayB0byBS
-ZWFkIHRoZSBXaG9sZSBTdG9yeT88L2E+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJmb290ZXIiPgo8cD5V
-Ukw6IDxhIGhyZWY9Imh0dHBzOi8vcXVpbHR2aWxsZS5ibG9nc3BvdC5jb20vMjAyMS8wMy9pdHMt
-aGVyZS1ib25uaWUtay1odW50ZXJzLXF1aWx0ZXJzLXRlY2guaHRtbCI+aHR0cHM6Ly9xdWlsdHZp
-bGxlLmJsb2dzcG90LmNvbS8yMDIxLzAzL2l0cy1oZXJlLWJvbm5pZS1rLWh1bnRlcnMtcXVpbHRl
-cnMtdGVjaC5odG1sPC9hPjwvcD4KPC9kaXY+CjwvZGl2Pgo8L2JvZHk+CjwvaHRtbD4K
+CjxkaXYgY2xhc3M9ImVudHJ5IiBpZD0iZW50cnkiPgo8aDEgY2xhc3M9ImhlYWRlciI+PGEgaHJl
+Zj0iaHR0cHM6Ly9xdWlsdHZpbGxlLmJsb2dzcG90LmNvbS8yMDIxLzAzL2l0cy1oZXJlLWJvbm5p
+ZS1rLWh1bnRlcnMtcXVpbHRlcnMtdGVjaC5odG1sIj5JdCdzIEhlcmUhIEJvbm5pZSBLLiBIdW50
+ZXIncyBRdWlsdGVyJ3MgVGVjaCBTZXQhPC9hPjwvaDE+CjxkaXYgY2xhc3M9ImJvZHkiIGlkPSJi
+b2R5Ij4KPGRpdiBjbGFzcz0ic2VwYXJhdG9yIiBzdHlsZT0iY2xlYXI6IGJvdGg7IHRleHQtYWxp
+Z246IGNlbnRlcjsiPjxhIGhyZWY9Imh0dHBzOi8vMS5icC5ibG9nc3BvdC5jb20vLWgwMUxJbWJi
+YU1jL1lFZG9PS1FzTkRJL0FBQUFBQUFKTGZRL1ZrSlJQZ3prSlp3VjZZeUd1c1Y0M29qZ2JQa3Vi
+bmRDQUNMY0JHQXNZSFEvczEwMjQvMjAyMTAzMDhfMTUyMjQyLmpwZyIgc3R5bGU9Im1hcmdpbi1s
+ZWZ0OiAxZW07IG1hcmdpbi1yaWdodDogMWVtOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiBibGFjazsg
+Zm9udC1mYW1pbHk6IGluaGVyaXQ7IGZvbnQtc2l6ZTogbWVkaXVtOyI+PGltZyBib3JkZXI9IjAi
+IGhlaWdodD0iNDkwIiBzcmM9Imh0dHBzOi8vMS5icC5ibG9nc3BvdC5jb20vLWgwMUxJbWJiYU1j
+L1lFZG9PS1FzTkRJL0FBQUFBQUFKTGZRL1ZrSlJQZ3prSlp3VjZZeUd1c1Y0M29qZ2JQa3VibmRD
+QUNMY0JHQXNZSFEvdzY0MC1oNDkwLzIwMjEwMzA4XzE1MjI0Mi5qcGciIHdpZHRoPSI2NDAiIC8+
+PC9zcGFuPjwvYT48L2Rpdj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IGluaGVyaXQ7IGZvbnQt
+c2l6ZTogbWVkaXVtOyI+PGJyIC8+PC9zcGFuPjxkaXYgY2xhc3M9InNlcGFyYXRvciIgc3R5bGU9
+ImNsZWFyOiBib3RoOyB0ZXh0LWFsaWduOiBsZWZ0OyI+PHAgc3R5bGU9ImJhY2tncm91bmQtY29s
+b3I6IHdoaXRlOyBwYWRkaW5nOiAwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IGluaGVy
+aXQ7IGZvbnQtc2l6ZTogbWVkaXVtOyI+U29tZSBmdW4gdGhpbmdzIGhhdmUgYmVlbiBsb25nIGlu
+IHRoZSAmcXVvdDtiZWhpbmQgdGhlIHNjZW5lcyZxdW90OyBjb2x1bW4sIHBsYXlpbmcgdGhlIHdh
+aXRpbmcgZ2FtZSB0byBnZXQgdGhpbmdzIG1hbnVmYWN0dXJlZCBhbmQgcmVsZWFzZWQgLSBpdCdz
+IGJlZW4gdGhhdCB3aG9sZSBzdXBwbHkgY2hhaW4gYmFjayB1cCwgeW91IGtub3c/PC9zcGFuPjwv
+cD48cCBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IHBhZGRpbmc6IDBweDsiPjxzcGFu
+IHN0eWxlPSJmb250LWZhbWlseTogaW5oZXJpdDsgZm9udC1zaXplOiBtZWRpdW07Ij5JIHdhcyB3
+YWl0aW5nIGZvciB0aGVzZSB0byBiZSByZWFkeSBmb3IgdGhlIGhvbGlkYXkgc2Vhc29uIC0gYmVj
+YXVzZSB0aGV5IG1ha2Ugc3VjaCBHUkVBVCBnaWZ0cyHCoCBCdXQgTWFyY2ggaXMgZ29vZCB0b28h
+PC9zcGFuPjwvcD48cCBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IHBhZGRpbmc6IDBw
+eDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogaW5oZXJpdDsgZm9udC1zaXplOiBtZWRpdW07
+Ij5UaGVzZSBhcmUgdGhpbmdzIEkgdXNlIEVWRVJZIERBWSBpbiBteSB0cmF2ZWwgbGlmZSBhcyB3
+ZWxsIGFzIG15IHBlcnNvbmFsIGxpZmUg4oCTIGFuZCBJIGtub3cgeW91IGFyZSBnb2luZyB0byBs
+b3ZlIHRoZW0gYXMgbXVjaCBhcyBJIGRvLjwvc3Bhbj48L3A+PHAgc3R5bGU9ImJhY2tncm91bmQt
+Y29sb3I6IHdoaXRlOyBwYWRkaW5nOiAwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IGlu
+aGVyaXQ7IGZvbnQtc2l6ZTogbWVkaXVtOyI+SSBoYXZlIHdvcm4gZ2xhc3NlcyBzaW5jZSBJIHdh
+cyAzIHllYXJzIG9sZCDigJMgc29tZXRoaW5nIEkgZG9u4oCZdCBvZnRlbiBoYXZlIHRoZSBjaGFu
+Y2UgdG8gYWRtaXQsIGFuZCB3aGlsZSBJIGhhdGVkIGJlaW5nIGNhbGxlZCDigJxmb3VyIGV5ZXPi
+gJ0gaW4gc2Nob29sLCBhbmQgc3dpdGNoZWQgdG8gY29udGFjdHMgaW4gaGlnaCBzY2hvb2wgKG9o
+IHRoZSB2YW5pdHksIGFuZCBkZXNpcmUgdG8gZml0IGluISkgSSBnYXZlIHVwIG9uIHRoYXQgaW4g
+Y29sbGVnZSBhbmQgaGF2ZSBoYWQgZ2xhc3NlcyBwZXJjaGVkIG9uIHRvcCBvZiBteSBub3NlIGFs
+bCBkYXksIGV2ZXJ5IGRheSBzaW5jZSE8L3NwYW4+PC9wPjxwIHN0eWxlPSJiYWNrZ3JvdW5kLWNv
+bG9yOiB3aGl0ZTsgcGFkZGluZzogMHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBpbmhl
+cml0OyBmb250LXNpemU6IG1lZGl1bTsiPk5vdyB0aGF0IEkgaGF2ZSByZWFjaGVkIHRoZSDigJxt
+aWRkbGUgYWdl4oCdIHpvbmUg4oCTIEnigJltIGZpbmRpbmcgdGhhdCBnbGFzc2VzIHdlYXJpbmcg
+aXMgbW9yZSB0aGUgbm9ybSBmb3IgbmVhcmx5IGV2ZXJ5b25lIOKAkyB3aGV0aGVyIHRoZXkgdXNl
+IHNpbXBsZSByZWFkZXJzIHRvIHNlZSBjbG9zZXIgd2hlbiBzdGl0Y2hpbmcgb3Igd2hpbGUgd29y
+a2luZyBhdCB0aGUgY29tcHV0ZXIsIG9yIHRob3NlIG9mIHVzIHdobyBuZWVkIG91ciBnbGFzc2Vz
+IGV2ZXJ5IGRheSwgYW5kIGFyZSBncmF0ZWZ1bCBmb3IgdGhlIGFiaWxpdHkgdG8gc2VlIHdoYXQg
+d2UgYXJlIGRvaW5nLCB3aGF0ZXZlciB3ZSBhcmUgZG9pbmcsIG1vcmUgY2xlYXJseS48c3Bhbj48
+L3NwYW4+PC9zcGFuPjwvcD48L2Rpdj48YSBocmVmPSJodHRwczovL3F1aWx0dmlsbGUuYmxvZ3Nw
+b3QuY29tLzIwMjEvMDMvaXRzLWhlcmUtYm9ubmllLWstaHVudGVycy1xdWlsdGVycy10ZWNoLmh0
+bWwjbW9yZSI+RGlkIFlvdSBDbGljayB0byBSZWFkIHRoZSBXaG9sZSBTdG9yeT88L2E+CjwvZGl2
+Pgo8ZGl2IGNsYXNzPSJmb290ZXIiPgo8cD5VUkw6IDxhIGhyZWY9Imh0dHBzOi8vcXVpbHR2aWxs
+ZS5ibG9nc3BvdC5jb20vMjAyMS8wMy9pdHMtaGVyZS1ib25uaWUtay1odW50ZXJzLXF1aWx0ZXJz
+LXRlY2guaHRtbCI+aHR0cHM6Ly9xdWlsdHZpbGxlLmJsb2dzcG90LmNvbS8yMDIxLzAzL2l0cy1o
+ZXJlLWJvbm5pZS1rLWh1bnRlcnMtcXVpbHRlcnMtdGVjaC5odG1sPC9hPjwvcD4KPC9kaXY+Cjwv
+ZGl2Pgo8L2JvZHk+CjwvaHRtbD4K
 
 
 SENT BY: "Quiltville's Quips & Snips!!: Bonnie K. Hunter" <noreply@blogger.com>
@@ -859,10 +860,10 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/first-road-hike-day.html
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/03/fir=
 st-road-hike-day.html">Sewing and Road Hiking!</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-0QTFrXkkYLI/YEi6nYCq15I/AAAAAAAJLjI/J-us9cgC=
 bZ416BOa3qS5fqrAleWwzLfqgCLcBGAsYHQ/s1024/20210306_154526%25281%2529.jpg" s=
@@ -932,10 +933,10 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/red-birthday-tractors-for-win
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/03/red=
 -birthday-tractors-for-win.html">Red Birthday Tractors for the Win!</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-iZzbfBNNfqc/YEoHwFeCwLI/AAAAAAAJLoE/MAeXA22B=
 Go8N-EYqjzkTe6ZOwQkmcqDdwCLcBGAsYHQ/s1024/20210311_065705.jpg" style=3D"mar=
@@ -1008,10 +1009,10 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/up-on-roof-singing.html
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/03/up-=
 on-roof-singing.html">Up On The Roof.... *singing*</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-sU5z0cTdRpQ/YEtcv0Mqi-I/AAAAAAAJLxs/kbO_vn1t=
 iWwPCe3a9plbz80qJpAfPyjvgCLcBGAsYHQ/s1024/20210311_172907.jpg" style=3D"mar=
@@ -1077,10 +1078,10 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/quilt-me-river.html
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/03/qui=
 lt-me-river.html">Quilt Me A River ...</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-zbvZ9zcKAvE/YEy3O4ZD9DI/AAAAAAAJL1o/btKFIKOI=
 kHkTgFPu3S_JajzvzwFe99IZgCLcBGAsYHQ/s2968/20210312_174146.jpg" style=3D"mar=
@@ -1147,11 +1148,11 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/tulip-time-pattern-time-and-g
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/03/tul=
 ip-time-pattern-time-and-gift-away.html">Tulip Time Pattern Time (and Gift-=
 Away!)</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-TH40vnmug1Y/YE9G2HKfj0I/AAAAAAAJL78/xN1in3RO=
 AZoN0MGsjo3Ej-E5LOVHXsQrgCLcBGAsYHQ/s800/IMG_20210315_064910_184000.jpg" st=
@@ -1217,10 +1218,10 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/the-rush-to-beat-rain.html
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/03/the=
 -rush-to-beat-rain.html">The Rush to Beat the Rain.</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-ZB6H5E8B2Us/YFClpQDwnDI/AAAAAAAJL_k/JxtdNPEj=
 BII51TUSl31Ei365C91dMN8fgCLcBGAsYHQ/s2578/20210313_110622.jpg" style=3D"mar=
@@ -1289,10 +1290,10 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/hike-little-sew-little-more.h
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/03/hik=
 e-little-sew-little-more.html">Hike a Little, Sew a Little More!</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-L7z4UxiWEZE/YFHoILiLgBI/AAAAAAAJMEY/ne95q7pY=
 c88qGu_HrlYPZpWqKi6RGJc1wCLcBGAsYHQ/s2048/20210313_141408.jpg" style=3D"mar=
@@ -1360,11 +1361,11 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/misty-mornings-and-coming-of-
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/03/mis=
 ty-mornings-and-coming-of-green.html">Misty Mornings and the Coming of the =
 Green!</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-_8cCM-gNyXE/YFM7hPj1SnI/AAAAAAAJMH4/4xZztC8F=
 wJgoQfaw3Loai8daf-PfaOQIQCLcBGAsYHQ/s2578/20210317_085746.jpg" style=3D"mar=
@@ -1430,10 +1431,10 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/antique-mall-on-loose.html
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/03/ant=
 ique-mall-on-loose.html">Antique Mall - On the Loose!</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-SQ4fm8UBqEM/YFSbaP5p-aI/AAAAAAAJMNg/iMCve4UI=
 kOMqeIfFIkloqcnsZVAvR6ghwCLcBGAsYHQ/s2048/20210315_135624.jpg" style=3D"mar=
@@ -1514,9 +1515,9 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/with-bit-of-courage-faith-joy
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="https://quiltville.blogspot.com/2021/03/with-bit-of-courage-faith-joy.html">With a bit of Courage, Faith &amp; Joy!</a></h1>
-<div id="body">
+<div class="body" id="body">
 <div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-9YbQx4M4FQo/YFXdVINFg-I/AAAAAAAJMSc/FRFX6V2YjuYqxNNr7nI0ceUFGXm3ceAkwCLcBGAsYHQ/s2578/20210319_154341.jpg" style="margin-left: 1em; margin-right: 1em;"><span style="font-size: medium;"><img border="0" height="302" src="https://1.bp.blogspot.com/-9YbQx4M4FQo/YFXdVINFg-I/AAAAAAAJMSc/FRFX6V2YjuYqxNNr7nI0ceUFGXm3ceAkwCLcBGAsYHQ/w640-h302/20210319_154341.jpg" width="640" /></span></a></div><div class="separator" style="clear: both; text-align: center;"><span style="font-size: medium;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: medium;">Yesterday afternoon had me quietly and happily stitching myself into the weekend ahead.</span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: medium;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: medium;">I have been wanting to sit down with this project for the past AT LEAST 2 weeks.</span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: medium;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: medium;">It has been there, confined to its project box - nearly taunting me - as I went through my days doing all of the needful things.</span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: medium;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: medium;">Occasionally I'd lift the lid, pet the pieces, and say &quot;Soon, my pretties - soon!&quot;</span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: medium;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: medium;">That soon came yesterday afternoon on the tail end of something else ultra meaningful to my life.<span></span></span></div><a href="https://quiltville.blogspot.com/2021/03/with-bit-of-courage-faith-joy.html#more">Did You Click to Read the Whole Story?</a>
 </div>
 <div class="footer">
@@ -1544,71 +1545,72 @@ X-RSS-ID: tag:blogger.com,1999:blog-13569819.post-2809753183118597774
 X-RSS-URL: https://quiltville.blogspot.com/2021/03/blockbase-gift-away.html
 
 PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgo8L2hlYWQ+Cjxib2R5IGRpcj0iYXV0byI+
-CjxkaXYgaWQ9ImVudHJ5Ij4KPGgxIGNsYXNzPSJoZWFkZXIiPjxhIGhyZWY9Imh0dHBzOi8vcXVp
-bHR2aWxsZS5ibG9nc3BvdC5jb20vMjAyMS8wMy9ibG9ja2Jhc2UtZ2lmdC1hd2F5Lmh0bWwiPkJs
-b2NrQmFzZSsgR2lmdC1Bd2F5ITwvYT48L2gxPgo8ZGl2IGlkPSJib2R5Ij4KPGRpdiBjbGFzcz0i
-c2VwYXJhdG9yIiBzdHlsZT0iY2xlYXI6IGJvdGg7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxzcGFu
-IHN0eWxlPSJmb250LWZhbWlseTogaW5oZXJpdDsgZm9udC1zaXplOiBtZWRpdW07Ij48YnIgLz48
-L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0ic2VwYXJhdG9yIiBzdHlsZT0iY2xlYXI6IGJvdGg7IHRl
-eHQtYWxpZ246IGNlbnRlcjsiPjxhIGhyZWY9Imh0dHBzOi8vMS5icC5ibG9nc3BvdC5jb20vLUpf
-R285RFlnNjBFL1lGaDh3Y2RROXRJL0FBQUFBQUFKTlVzL1BKMlNaVkVNbXBnTTRFVmxvQTBmcW9Y
-NFhfbU1rcDNld0NMY0JHQXNZSFEvczgwMC9JTUdfMjAyMTAzMjJfMDcxMzMzXzUwMzAwMC5qcGci
-IHN0eWxlPSJtYXJnaW4tbGVmdDogMWVtOyBtYXJnaW4tcmlnaHQ6IDFlbTsiPjxzcGFuIHN0eWxl
-PSJjb2xvcjogYmxhY2s7IGZvbnQtZmFtaWx5OiBpbmhlcml0OyBmb250LXNpemU6IG1lZGl1bTsi
-PjxpbWcgYm9yZGVyPSIwIiBoZWlnaHQ9IjY0MCIgc3JjPSJodHRwczovLzEuYnAuYmxvZ3Nwb3Qu
-Y29tLy1KX0dvOURZZzYwRS9ZRmg4d2NkUTl0SS9BQUFBQUFBSk5Vcy9QSjJTWlZFTW1wZ000RVZs
-b0EwZnFvWDRYX21Na3AzZXdDTGNCR0FzWUhRL3c2NDAtaDY0MC9JTUdfMjAyMTAzMjJfMDcxMzMz
-XzUwMzAwMC5qcGciIHdpZHRoPSI2NDAiIC8+PC9zcGFuPjwvYT48L2Rpdj48c3BhbiBzdHlsZT0i
-Zm9udC1mYW1pbHk6IGluaGVyaXQ7IGZvbnQtc2l6ZTogbWVkaXVtOyI+PGJyIC8+PC9zcGFuPjxk
-aXYgY2xhc3M9InNlcGFyYXRvciIgc3R5bGU9ImNsZWFyOiBib3RoOyB0ZXh0LWFsaWduOiBsZWZ0
-OyI+PGRpdj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IGluaGVyaXQ7IGZvbnQtc2l6ZTogbWVk
-aXVtOyI+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyI+SGF2ZSB5b3UgaGVh
-cmQgb2YgdGhlIG5ldyBCbG9ja0Jhc2UrIGJ5wqA8L3NwYW4+PHNwYW4gc3R5bGU9ImJhY2tncm91
-bmQtY29sb3I6ICNjZmUyZjM7Ij48YSBocmVmPSJodHRwczovL2VsZWN0cmljcXVpbHQuY29tLyIg
-dGFyZ2V0PSJfYmxhbmsiPlRoZSBFbGVjdHJpYyBRdWlsdCBDb21wYW55PC9hPjwvc3Bhbj48c3Bh
-biBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ij4gPz88L3NwYW4+PC9zcGFuPjwvZGl2
-PjxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyI+PHNwYW4gc3R5bGU9ImZvbnQt
-ZmFtaWx5OiBpbmhlcml0OyBmb250LXNpemU6IG1lZGl1bTsiPjxiciAvPjwvc3Bhbj48L2Rpdj48
-c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IGZvbnQtZmFtaWx5OiBpbmhlcml0
-OyBmb250LXNpemU6IG1lZGl1bTsiPkkgYW0gc28gZXhjaXRlZCBhYm91dCB0aGUgTkVXIEJsb2Nr
-QmFzZSsgSSBjYW4gaGFyZGx5IGNvbnRhaW4gbXlzZWxmLsKgPC9zcGFuPjxkaXYgc3R5bGU9ImJh
-Y2tncm91bmQtY29sb3I6IHdoaXRlOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBpbmhlcml0
-OyBmb250LXNpemU6IG1lZGl1bTsiPjxiciAvPjwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJiYWNr
-Z3JvdW5kLWNvbG9yOiB3aGl0ZTsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogaW5oZXJpdDsg
-Zm9udC1zaXplOiBtZWRpdW07Ij5JIGhhdmUgYmVlbiBhbiBFUSB1c2VyIGZyb20gdGhlIHZlcnkg
-Zmlyc3QgcmVsZWFzZS4gSSBvd24gdGhlIHByZXZpb3VzIHZlcnNpb24gb2YgQmxvY2tCYXNlLCBy
-dW5uaW5nIGl0IHdpdGggbXkgZGlmZmVyZW50IEVRIHZlcnNpb25zIGFsbCB0aGUgd2F5IHVwIHRo
-cm91Z2ggRVE3LsKgPC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHdo
-aXRlOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBpbmhlcml0OyBmb250LXNpemU6IG1lZGl1
-bTsiPjxiciAvPjwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0
-ZTsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogaW5oZXJpdDsgZm9udC1zaXplOiBtZWRpdW07
-Ij5JIGxvdmUgdGhhdCB0aGVyZSBpcyBhIG5ldywgdXBkYXRlZCB2ZXJzaW9uIHRvIGdvIGFsb25n
-IHdpdGggbXkgRVE4IHNvZnR3YXJlLsKgPC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9ImJhY2tncm91
-bmQtY29sb3I6IHdoaXRlOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBpbmhlcml0OyBmb250
-LXNpemU6IG1lZGl1bTsiPjxiciAvPjwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJiYWNrZ3JvdW5k
-LWNvbG9yOiB3aGl0ZTsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogaW5oZXJpdDsgZm9udC1z
-aXplOiBtZWRpdW07Ij5NeSBmYXZvcml0ZSB0aGluZz8gUGFpcmluZyB0d28gYmxvY2tzIHRvZ2V0
-aGVyIHRvIHNlZSB3aGF0IG90aGVyIGludGVyZXN0aW5nIHNlY29uZGFyeSBkZXNpZ25zIGhhcHBl
-biBiZXR3ZWVuIHRoZSBibG9ja3MuIEl04oCZcyBtYWdpYyHCoDwvc3Bhbj48L2Rpdj48ZGl2IHN0
+CjxkaXYgY2xhc3M9ImVudHJ5IiBpZD0iZW50cnkiPgo8aDEgY2xhc3M9ImhlYWRlciI+PGEgaHJl
+Zj0iaHR0cHM6Ly9xdWlsdHZpbGxlLmJsb2dzcG90LmNvbS8yMDIxLzAzL2Jsb2NrYmFzZS1naWZ0
+LWF3YXkuaHRtbCI+QmxvY2tCYXNlKyBHaWZ0LUF3YXkhPC9hPjwvaDE+CjxkaXYgY2xhc3M9ImJv
+ZHkiIGlkPSJib2R5Ij4KPGRpdiBjbGFzcz0ic2VwYXJhdG9yIiBzdHlsZT0iY2xlYXI6IGJvdGg7
+IHRleHQtYWxpZ246IGNlbnRlcjsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogaW5oZXJpdDsg
+Zm9udC1zaXplOiBtZWRpdW07Ij48YnIgLz48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0ic2VwYXJh
+dG9yIiBzdHlsZT0iY2xlYXI6IGJvdGg7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxhIGhyZWY9Imh0
+dHBzOi8vMS5icC5ibG9nc3BvdC5jb20vLUpfR285RFlnNjBFL1lGaDh3Y2RROXRJL0FBQUFBQUFK
+TlVzL1BKMlNaVkVNbXBnTTRFVmxvQTBmcW9YNFhfbU1rcDNld0NMY0JHQXNZSFEvczgwMC9JTUdf
+MjAyMTAzMjJfMDcxMzMzXzUwMzAwMC5qcGciIHN0eWxlPSJtYXJnaW4tbGVmdDogMWVtOyBtYXJn
+aW4tcmlnaHQ6IDFlbTsiPjxzcGFuIHN0eWxlPSJjb2xvcjogYmxhY2s7IGZvbnQtZmFtaWx5OiBp
+bmhlcml0OyBmb250LXNpemU6IG1lZGl1bTsiPjxpbWcgYm9yZGVyPSIwIiBoZWlnaHQ9IjY0MCIg
+c3JjPSJodHRwczovLzEuYnAuYmxvZ3Nwb3QuY29tLy1KX0dvOURZZzYwRS9ZRmg4d2NkUTl0SS9B
+QUFBQUFBSk5Vcy9QSjJTWlZFTW1wZ000RVZsb0EwZnFvWDRYX21Na3AzZXdDTGNCR0FzWUhRL3c2
+NDAtaDY0MC9JTUdfMjAyMTAzMjJfMDcxMzMzXzUwMzAwMC5qcGciIHdpZHRoPSI2NDAiIC8+PC9z
+cGFuPjwvYT48L2Rpdj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IGluaGVyaXQ7IGZvbnQtc2l6
+ZTogbWVkaXVtOyI+PGJyIC8+PC9zcGFuPjxkaXYgY2xhc3M9InNlcGFyYXRvciIgc3R5bGU9ImNs
+ZWFyOiBib3RoOyB0ZXh0LWFsaWduOiBsZWZ0OyI+PGRpdj48c3BhbiBzdHlsZT0iZm9udC1mYW1p
+bHk6IGluaGVyaXQ7IGZvbnQtc2l6ZTogbWVkaXVtOyI+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQt
+Y29sb3I6IHdoaXRlOyI+SGF2ZSB5b3UgaGVhcmQgb2YgdGhlIG5ldyBCbG9ja0Jhc2UrIGJ5wqA8
+L3NwYW4+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNjZmUyZjM7Ij48YSBocmVmPSJo
+dHRwczovL2VsZWN0cmljcXVpbHQuY29tLyIgdGFyZ2V0PSJfYmxhbmsiPlRoZSBFbGVjdHJpYyBR
+dWlsdCBDb21wYW55PC9hPjwvc3Bhbj48c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogd2hp
+dGU7Ij4gPz88L3NwYW4+PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6
+IHdoaXRlOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBpbmhlcml0OyBmb250LXNpemU6IG1l
+ZGl1bTsiPjxiciAvPjwvc3Bhbj48L2Rpdj48c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjog
+d2hpdGU7IGZvbnQtZmFtaWx5OiBpbmhlcml0OyBmb250LXNpemU6IG1lZGl1bTsiPkkgYW0gc28g
+ZXhjaXRlZCBhYm91dCB0aGUgTkVXIEJsb2NrQmFzZSsgSSBjYW4gaGFyZGx5IGNvbnRhaW4gbXlz
+ZWxmLsKgPC9zcGFuPjxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyI+PHNwYW4g
+c3R5bGU9ImZvbnQtZmFtaWx5OiBpbmhlcml0OyBmb250LXNpemU6IG1lZGl1bTsiPjxiciAvPjwv
+c3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsiPjxzcGFuIHN0
+eWxlPSJmb250LWZhbWlseTogaW5oZXJpdDsgZm9udC1zaXplOiBtZWRpdW07Ij5JIGhhdmUgYmVl
+biBhbiBFUSB1c2VyIGZyb20gdGhlIHZlcnkgZmlyc3QgcmVsZWFzZS4gSSBvd24gdGhlIHByZXZp
+b3VzIHZlcnNpb24gb2YgQmxvY2tCYXNlLCBydW5uaW5nIGl0IHdpdGggbXkgZGlmZmVyZW50IEVR
+IHZlcnNpb25zIGFsbCB0aGUgd2F5IHVwIHRocm91Z2ggRVE3LsKgPC9zcGFuPjwvZGl2PjxkaXYg
+c3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5
+OiBpbmhlcml0OyBmb250LXNpemU6IG1lZGl1bTsiPjxiciAvPjwvc3Bhbj48L2Rpdj48ZGl2IHN0
 eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTog
-aW5oZXJpdDsgZm9udC1zaXplOiBtZWRpdW07Ij48YnIgLz48L3NwYW4+PC9kaXY+PGRpdiBzdHls
-ZT0iYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IGlu
-aGVyaXQ7IGZvbnQtc2l6ZTogbWVkaXVtOyI+VGhlIG9ubHkgdGhpbmcgYmV0dGVyIHRoYW4gdGhl
-IE5FVyBFbmN5Y2xvcGVkaWEgb2YgUGllY2VkIFF1aWx0IFBhdHRlcm5zIGJvb2sg4oCTIGlzIHRo
-ZSBhYmlsaXR5IHRvIGhhdmUgdGhvc2UgYmxvY2tzIGluIEJsb2NrQmFzZSssIHRvIGdvIHdpdGgg
-bXkgRVE4ITwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsi
+aW5oZXJpdDsgZm9udC1zaXplOiBtZWRpdW07Ij5JIGxvdmUgdGhhdCB0aGVyZSBpcyBhIG5ldywg
+dXBkYXRlZCB2ZXJzaW9uIHRvIGdvIGFsb25nIHdpdGggbXkgRVE4IHNvZnR3YXJlLsKgPC9zcGFu
+PjwvZGl2PjxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyI+PHNwYW4gc3R5bGU9
+ImZvbnQtZmFtaWx5OiBpbmhlcml0OyBmb250LXNpemU6IG1lZGl1bTsiPjxiciAvPjwvc3Bhbj48
+L2Rpdj48ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsiPjxzcGFuIHN0eWxlPSJm
+b250LWZhbWlseTogaW5oZXJpdDsgZm9udC1zaXplOiBtZWRpdW07Ij5NeSBmYXZvcml0ZSB0aGlu
+Zz8gUGFpcmluZyB0d28gYmxvY2tzIHRvZ2V0aGVyIHRvIHNlZSB3aGF0IG90aGVyIGludGVyZXN0
+aW5nIHNlY29uZGFyeSBkZXNpZ25zIGhhcHBlbiBiZXR3ZWVuIHRoZSBibG9ja3MuIEl04oCZcyBt
+YWdpYyHCoDwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsi
 PjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogaW5oZXJpdDsgZm9udC1zaXplOiBtZWRpdW07Ij48
 YnIgLz48L3NwYW4+PC9kaXY+PGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ij48
-c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IGluaGVyaXQ7IGZvbnQtc2l6ZTogbWVkaXVtOyI+Tm93
-IGZvciB0aGUgZnVuIHBhcnQgLSBFbGVjdHJpYyBRdWlsdCBpcyBHSVZJTkcgQVdBWSBhIGZyZWUg
-QmxvY2sgQmFzZSBQbHVzIGZvciBvbmUgbHVja3kgcGVyc29uIHdobyBlbnRlcnMgb24gdG9kYXkn
-cyBibG9nIHBvc3QhIEl0IGNvdWxkIGJlIHlvdSE8c3Bhbj48L3NwYW4+PC9zcGFuPjwvZGl2Pjwv
-ZGl2PjxhIGhyZWY9Imh0dHBzOi8vcXVpbHR2aWxsZS5ibG9nc3BvdC5jb20vMjAyMS8wMy9ibG9j
-a2Jhc2UtZ2lmdC1hd2F5Lmh0bWwjbW9yZSI+RGlkIFlvdSBDbGljayB0byBSZWFkIHRoZSBXaG9s
-ZSBTdG9yeT88L2E+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJmb290ZXIiPgo8cD5VUkw6IDxhIGhyZWY9
-Imh0dHBzOi8vcXVpbHR2aWxsZS5ibG9nc3BvdC5jb20vMjAyMS8wMy9ibG9ja2Jhc2UtZ2lmdC1h
-d2F5Lmh0bWwiPmh0dHBzOi8vcXVpbHR2aWxsZS5ibG9nc3BvdC5jb20vMjAyMS8wMy9ibG9ja2Jh
-c2UtZ2lmdC1hd2F5Lmh0bWw8L2E+PC9wPgo8L2Rpdj4KPC9kaXY+CjwvYm9keT4KPC9odG1sPgo=
+c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IGluaGVyaXQ7IGZvbnQtc2l6ZTogbWVkaXVtOyI+VGhl
+IG9ubHkgdGhpbmcgYmV0dGVyIHRoYW4gdGhlIE5FVyBFbmN5Y2xvcGVkaWEgb2YgUGllY2VkIFF1
+aWx0IFBhdHRlcm5zIGJvb2sg4oCTIGlzIHRoZSBhYmlsaXR5IHRvIGhhdmUgdGhvc2UgYmxvY2tz
+IGluIEJsb2NrQmFzZSssIHRvIGdvIHdpdGggbXkgRVE4ITwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxl
+PSJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogaW5o
+ZXJpdDsgZm9udC1zaXplOiBtZWRpdW07Ij48YnIgLz48L3NwYW4+PC9kaXY+PGRpdiBzdHlsZT0i
+YmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IGluaGVy
+aXQ7IGZvbnQtc2l6ZTogbWVkaXVtOyI+Tm93IGZvciB0aGUgZnVuIHBhcnQgLSBFbGVjdHJpYyBR
+dWlsdCBpcyBHSVZJTkcgQVdBWSBhIGZyZWUgQmxvY2sgQmFzZSBQbHVzIGZvciBvbmUgbHVja3kg
+cGVyc29uIHdobyBlbnRlcnMgb24gdG9kYXkncyBibG9nIHBvc3QhIEl0IGNvdWxkIGJlIHlvdSE8
+c3Bhbj48L3NwYW4+PC9zcGFuPjwvZGl2PjwvZGl2PjxhIGhyZWY9Imh0dHBzOi8vcXVpbHR2aWxs
+ZS5ibG9nc3BvdC5jb20vMjAyMS8wMy9ibG9ja2Jhc2UtZ2lmdC1hd2F5Lmh0bWwjbW9yZSI+RGlk
+IFlvdSBDbGljayB0byBSZWFkIHRoZSBXaG9sZSBTdG9yeT88L2E+CjwvZGl2Pgo8ZGl2IGNsYXNz
+PSJmb290ZXIiPgo8cD5VUkw6IDxhIGhyZWY9Imh0dHBzOi8vcXVpbHR2aWxsZS5ibG9nc3BvdC5j
+b20vMjAyMS8wMy9ibG9ja2Jhc2UtZ2lmdC1hd2F5Lmh0bWwiPmh0dHBzOi8vcXVpbHR2aWxsZS5i
+bG9nc3BvdC5jb20vMjAyMS8wMy9ibG9ja2Jhc2UtZ2lmdC1hd2F5Lmh0bWw8L2E+PC9wPgo8L2Rp
+dj4KPC9kaXY+CjwvYm9keT4KPC9odG1sPgo=
 
 
 SENT BY: "Quiltville's Quips & Snips!!: Bonnie K. Hunter" <noreply@blogger.com>
@@ -1632,10 +1634,10 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/weekend-trail-warriors.html
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/03/wee=
 kend-trail-warriors.html">Weekend Trail Warriors!</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-TT5Lz2nRzQw/YFnWgMH0DSI/AAAAAAAJNZM/mrHBHP9k=
 _ksFKX3yGpnMWK29FVL7UvwCQCLcBGAsYHQ/s2578/20210320_152347.jpg" style=3D"mar=
@@ -1701,10 +1703,10 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/rivanna-runner-bound-done.htm
   <head>
 </head>
 <body dir=3D"auto">
-<div id=3D"entry">
+<div class=3D"entry" id=3D"entry">
 <h1 class=3D"header"><a href=3D"https://quiltville.blogspot.com/2021/03/riv=
 anna-runner-bound-done.html">Rivanna Runner Bound - DONE!</a></h1>
-<div id=3D"body">
+<div class=3D"body" id=3D"body">
 <div class=3D"separator" style=3D"clear: both; text-align: center;"><a href=
 =3D"https://1.bp.blogspot.com/-5u5THVOSWLI/YFsr97Zt3-I/AAAAAAAJNiE/xJsyd9j5=
 C9w7DwMf141_ym6pZlDHHwaKwCLcBGAsYHQ/s2578/20210324_080245.jpg" style=3D"mar=
@@ -1774,9 +1776,9 @@ X-RSS-URL: https://quiltville.blogspot.com/2021/03/bloom-baby-bloom.html
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="https://quiltville.blogspot.com/2021/03/bloom-baby-bloom.html">Bloom, Baby, Bloom!</a></h1>
-<div id="body">
+<div class="body" id="body">
 <div class="separator" style="clear: both; text-align: center;"><span style="font-family: inherit; font-size: medium;"><br /></span></div><span style="font-family: inherit; font-size: medium;"><br /></span><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-CSppluARwWg/YFx0jJVeimI/AAAAAAAJNoI/Cxa6aK00MD4n1o6RFdcLLnSfc28MfsW4QCLcBGAsYHQ/s2578/20210324_132242.jpg" style="margin-left: 1em; margin-right: 1em;"><span style="color: black; font-family: inherit; font-size: medium;"><img border="0" height="302" src="https://1.bp.blogspot.com/-CSppluARwWg/YFx0jJVeimI/AAAAAAAJNoI/Cxa6aK00MD4n1o6RFdcLLnSfc28MfsW4QCLcBGAsYHQ/w640-h302/20210324_132242.jpg" width="640" /></span></a></div><div class="separator" style="clear: both; text-align: center;"><span style="font-family: inherit; font-size: medium;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><span style="font-family: inherit; font-size: medium;">The forsythia are exploding!</span></div><div class="separator" style="clear: both; text-align: center;"><span style="font-family: inherit; font-size: medium;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: inherit; font-size: medium;">Yesterday's trip down to the North Carolina piedmont was a wonderful sight!</span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: inherit; font-size: medium;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: inherit; font-size: medium;">You know how folks oooh and ahhh at fireworks on 4th of July?</span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: inherit; font-size: medium;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: inherit; font-size: medium;">I'm the same way when spring arrives and trees and bushes are blooming.</span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: inherit; font-size: medium;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: inherit; font-size: medium;">It was like descending into OZ.</span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: inherit; font-size: medium;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: inherit; font-size: medium;">The fog was thick all of the way between the cabin and just below the Blue Ridge Parkway - but as I got closer to Wilkesboro, the fog dissipated and and left me with a clear view of blooming loveliness that has not reached our higher elevations yet.<span></span></span></div><a href="https://quiltville.blogspot.com/2021/03/bloom-baby-bloom.html#more">Did You Click to Read the Whole Story?</a>
 </div>
 <div class="footer">
diff --git a/test/data/tails/2.expected b/test/data/tails/2.expected
index e5fb3d1..7b48a67 100644
--- a/test/data/tails/2.expected
+++ b/test/data/tails/2.expected
@@ -25,9 +25,9 @@ Content-Transfer-Encoding: 7bit
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="https://tails.boum.org/news/version_4.8/index.en.html">Tails 4.8 is out</a></h1>
-<div id="body">
+<div class="body" id="body">
 <p>This release fixes <a href="https://tails.boum.org/security/Numerous_security_holes_in_4.7/">many security
 vulnerabilities</a>. You should upgrade as soon as possible.</p>
 
@@ -340,9 +340,9 @@ Content-Transfer-Encoding: 7bit
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="https://tails.boum.org/news/version_4.9/index.en.html">Tails 4.9 is out</a></h1>
-<div id="body">
+<div class="body" id="body">
 <p>This release fixes <a href="https://tails.boum.org/security/Numerous_security_holes_in_4.8/">many security
 vulnerabilities</a>. You should upgrade as soon as possible.</p>
 
@@ -548,9 +548,9 @@ Content-Transfer-Encoding: 7bit
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="https://tails.boum.org/news/version_4.10/index.en.html">Tails 4.10 is out</a></h1>
-<div id="body">
+<div class="body" id="body">
 <p>This release fixes <a href="https://tails.boum.org/security/Numerous_security_holes_in_4.9/">many security
 vulnerabilities</a>. You should upgrade as soon as possible.</p>
 
@@ -755,9 +755,9 @@ Content-Transfer-Encoding: 7bit
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="https://tails.boum.org/news/test_4.11-rc1/">Call for testing: 4.11~rc1</a></h1>
-<div id="body">
+<div class="body" id="body">
 <p>Tails 4.11, scheduled for September 22, will be the first version of
 Tails to include Tor Browser 10.0 and to support persistent settings
 on the Welcome Screen!</p>
@@ -1005,9 +1005,9 @@ Content-Transfer-Encoding: 7bit
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="https://tails.boum.org/news/version_4.11/index.en.html">Tails 4.11 is out</a></h1>
-<div id="body">
+<div class="body" id="body">
 <p>This release fixes <a href="https://tails.boum.org/security/Numerous_security_holes_in_4.10/">many security
 vulnerabilities</a>. You should upgrade as soon as possible.</p>
 
@@ -1229,9 +1229,9 @@ Content-Transfer-Encoding: 7bit
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="https://tails.boum.org/news/version_4.12/index.en.html">Tails 4.12 is out</a></h1>
-<div id="body">
+<div class="body" id="body">
 <p>This release fixes <a href="https://tails.boum.org/security/Numerous_security_holes_in_4.11/">many security
 vulnerabilities</a>. You should upgrade as soon as possible.</p>
 
@@ -1441,9 +1441,9 @@ Content-Transfer-Encoding: 7bit
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="https://tails.boum.org/news/version_4.13/index.en.html">Tails 4.13 is out</a></h1>
-<div id="body">
+<div class="body" id="body">
 <p>This release fixes <a href="https://tails.boum.org/security/Numerous_security_holes_in_4.12/">many security
 vulnerabilities</a>. You should upgrade as soon as possible.</p>
 
@@ -1662,9 +1662,9 @@ Content-Transfer-Encoding: 7bit
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="https://tails.boum.org/news/verification_extension_deprecation/index.en.html">Deprecation of the Tails Verification extension</a></h1>
-<div id="body">
+<div class="body" id="body">
 <p>Today, we are retiring the <em>Tails Verification</em> browser extension that
 used to be advertised on our download page. We are replacing it with
 similar JavaScript code that now runs directly on the page.</p>
@@ -1798,9 +1798,9 @@ Content-Transfer-Encoding: 7bit
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="https://tails.boum.org/news/version_4.14/index.en.html">Tails 4.14 is out</a></h1>
-<div id="body">
+<div class="body" id="body">
 <p>This release fixes <a href="https://tails.boum.org/security/Numerous_security_holes_in_4.13/">many security
 vulnerabilities</a>. You should upgrade as soon as possible.</p>
 
@@ -2039,9 +2039,9 @@ Content-Transfer-Encoding: 7bit
   <head>
 </head>
 <body dir="auto">
-<div id="entry">
+<div class="entry" id="entry">
 <h1 class="header"><a href="https://tails.boum.org/news/achievements_in_2020/index.en.html">Our achievements in 2020</a></h1>
-<div id="body">
+<div class="body" id="body">
 <p>Despite everything, 2020 was a great year for Tails. We released major
 improvements that made Tails easier to use by the people who need it the most.</p>
 
diff --git a/test/data/tumblr/1.config b/test/data/tumblr/1.config
new file mode 100644
index 0000000..a9794f6
--- /dev/null
+++ b/test/data/tumblr/1.config
@@ -0,0 +1,4 @@
+[DEFAULT]
+to = a@b.com
+date-header = True
+html-mail = True
diff --git a/test/data/tumblr/1.expected b/test/data/tumblr/1.expected
new file mode 100644
index 0000000..948e845
--- /dev/null
+++ b/test/data/tumblr/1.expected
@@ -0,0 +1,800 @@
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="iso-8859-1"
+Content-Transfer-Encoding: quoted-printable
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: Hey friends! Wanted to pop in here and let you know that this...
+Date: Thu, 15 Apr 2021 18:07:17 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/648554781524328448
+X-RSS-URL: https://sarahcandersen.com/post/648554781524328448
+
+<!DOCTYPE html>
+<html>
+  <head>
+</head>
+<body dir=3D"auto">
+<div class=3D"entry" id=3D"entry">
+<h1 class=3D"header"><a href=3D"https://sarahcandersen.com/post/64855478152=
+4328448">Hey friends! Wanted to pop in here and let you know that this...</=
+a></h1>
+<div class=3D"body" id=3D"body">
+<img src=3D"https://64.media.tumblr.com/09f36b3d6d020d01d5eddbeff25d0259/73=
+67f4d913ff289a-73/s500x750/bcef8f7b0441400cbf4341a46fd24e600ebbd19b.jpg" />=
+<br /> <br /><img src=3D"https://64.media.tumblr.com/6eb7277aade225493b3d24=
+8bc477fe59/7367f4d913ff289a-34/s500x750/8b1b54fd0db1dc0148b01b16f050128c14c=
+3eba1.jpg" /><br /> <br /><img src=3D"https://64.media.tumblr.com/c430ad716=
+97ce9cd7c93af58f11e33c2/7367f4d913ff289a-ec/s500x750/0101346091963fc6a50d81=
+11cdf60d67924d3e6e.jpg" /><br /> <br /><p>Hey friends! Wanted to pop in her=
+e and let you know that this years calendars are now up for preorder. You c=
+an check them <a href=3D"https://publishing.andrewsmcmeel.com/sarahs-scribb=
+les-calendars/">out</a>=A0<br /></p>
+</div>
+<div class=3D"footer">
+<p>URL: <a href=3D"https://sarahcandersen.com/post/648554781524328448">http=
+s://sarahcandersen.com/post/648554781524328448</a></p>
+</div>
+</div>
+</body>
+</html>
+
+
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="utf-8"
+Content-Transfer-Encoding: base64
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: =?utf-8?q?FANGS_got_nominated_for_an_Eisner_Award!_To_say_I=E2=80=99m=2E=2E=2E?=
+Date: Wed, 09 Jun 2021 17:19:58 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/653534637361070080
+X-RSS-URL: https://sarahcandersen.com/post/653534637361070080
+
+PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgo8L2hlYWQ+Cjxib2R5IGRpcj0iYXV0byI+
+CjxkaXYgY2xhc3M9ImVudHJ5IiBpZD0iZW50cnkiPgo8aDEgY2xhc3M9ImhlYWRlciI+PGEgaHJl
+Zj0iaHR0cHM6Ly9zYXJhaGNhbmRlcnNlbi5jb20vcG9zdC82NTM1MzQ2MzczNjEwNzAwODAiPkZB
+TkdTIGdvdCBub21pbmF0ZWQgZm9yIGFuIEVpc25lciBBd2FyZCEgVG8gc2F5IEnigJltLi4uPC9h
+PjwvaDE+CjxkaXYgY2xhc3M9ImJvZHkiIGlkPSJib2R5Ij4KPGltZyBzcmM9Imh0dHBzOi8vNjQu
+bWVkaWEudHVtYmxyLmNvbS9lOTgyZGFmZmU0Y2JmNDg2ZDI1YjQwNmI3MmM3MmMwMC9mM2JiMTQ5
+YmU4ZDMzZWI5LTZjL3M1MDB4NzUwL2NkMWZjNWIxODJiY2FlNTM1N2NhY2NlMDc4Njc3NDVkZTZm
+ZGYyOTEuanBnIiAvPjxiciAvPjxiciAvPjxwPkZBTkdTIGdvdCBub21pbmF0ZWQgZm9yIGFuIEVp
+c25lciBBd2FyZCEgVG8gc2F5IEnigJltIGZsb29yZWQgYnkgdGhpcyBpcyBhbiB1bmRlcnN0YXRl
+bWVudOKApkkgbWF5IGhhdmUgc2hlZCBhIHRlYXIgb3IgdHdvLiBUaGFuayB5b3Ugc28gbXVjaCBh
+bmQgY29uZ3JhdHMgdG8gdGhlIG90aGVyIG5vbWluZWVzITwvcD48cD5DaGVjayBvdXQgdGhlIGZ1
+bGwgYW5ub3VuY2VtZW50IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmNvbWljLWNvbi5vcmcvMjAyMS1l
+aXNuZXItYXdhcmRzLW5vbWluYXRpb25zIj5oZXJlPC9hPi7CoDxiciAvPjwvcD4KPC9kaXY+Cjxk
+aXYgY2xhc3M9ImZvb3RlciI+CjxwPlVSTDogPGEgaHJlZj0iaHR0cHM6Ly9zYXJhaGNhbmRlcnNl
+bi5jb20vcG9zdC82NTM1MzQ2MzczNjEwNzAwODAiPmh0dHBzOi8vc2FyYWhjYW5kZXJzZW4uY29t
+L3Bvc3QvNjUzNTM0NjM3MzYxMDcwMDgwPC9hPjwvcD4KPC9kaXY+CjwvZGl2Pgo8L2JvZHk+Cjwv
+aHRtbD4K
+
+
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="utf-8"
+Content-Transfer-Encoding: base64
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: =?utf-8?q?2022_wall_calendar_is_out_today!_I=E2=80=99m_really_happy_with_the=2E=2E=2E?=
+Date: Wed, 14 Jul 2021 16:53:20 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/656703855081455616
+X-RSS-URL: https://sarahcandersen.com/post/656703855081455616
+
+PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgo8L2hlYWQ+Cjxib2R5IGRpcj0iYXV0byI+
+CjxkaXYgY2xhc3M9ImVudHJ5IiBpZD0iZW50cnkiPgo8aDEgY2xhc3M9ImhlYWRlciI+PGEgaHJl
+Zj0iaHR0cHM6Ly9zYXJhaGNhbmRlcnNlbi5jb20vcG9zdC82NTY3MDM4NTUwODE0NTU2MTYiPjIw
+MjIgd2FsbCBjYWxlbmRhciBpcyBvdXQgdG9kYXkhIEnigJltIHJlYWxseSBoYXBweSB3aXRoIHRo
+ZS4uLjwvYT48L2gxPgo8ZGl2IGNsYXNzPSJib2R5IiBpZD0iYm9keSI+CjxpbWcgc3JjPSJodHRw
+czovLzY0Lm1lZGlhLnR1bWJsci5jb20vZWQyNzI4MDIxNmUzNDI3YjVhYjgzNjQyYzdiOTJmYjEv
+ZDFiMzU0MzkxMzBhNzY0Yi1hYS9zNTAweDc1MC85OWVhNDM1NjIyZmM3OTUxMjA5NjY1YWJkYmQ4
+NTQ5MmE0ZTllMDY0LmpwZyIgLz48YnIgLz4gPGJyIC8+PGltZyBzcmM9Imh0dHBzOi8vNjQubWVk
+aWEudHVtYmxyLmNvbS85ZGQ4MjZkY2IyYTViZGNjNTdmMzRiMWExNjc1ODYzNC9kMWIzNTQzOTEz
+MGE3NjRiLWE1L3M1MDB4NzUwLzI3NmVkMzAwMWYzMmE2YjVkZDQ2YTQzMzRlMzdlMWM3ZDRiMDlh
+NzMuanBnIiAvPjxiciAvPiA8YnIgLz48aW1nIHNyYz0iaHR0cHM6Ly82NC5tZWRpYS50dW1ibHIu
+Y29tL2I5ZDI3NmI4YjE1MDQzNzEwNTk2MDZlYTc2YzZlMTI4L2QxYjM1NDM5MTMwYTc2NGItZDIv
+czUwMHg3NTAvMmNkOTU1ZTJiNDRiYmI2MGVkZDE4YTczODU2OGRhYWJjNTZlMDMzZC5qcGciIC8+
+PGJyIC8+IDxiciAvPjxpbWcgc3JjPSJodHRwczovLzY0Lm1lZGlhLnR1bWJsci5jb20vMjU2ODY3
+ZjRmODBjYmUzMGJlNTkzZjdhZWY4NDg0ZWEvZDFiMzU0MzkxMzBhNzY0Yi1iNi9zNTAweDc1MC9k
+M2E0NmFmZTU3NDRmN2Y3Nzk1Y2IxYjI4MDM2OWY4YWQ4ZjZmZGJiLmpwZyIgLz48YnIgLz4gPGJy
+IC8+PHA+MjAyMiB3YWxsIGNhbGVuZGFyIGlzIG91dCB0b2RheSEgSeKAmW0gcmVhbGx5IGhhcHB5
+IHdpdGggdGhlIGlsbHVzdHJhdGlvbnMgSSBtYWRlIGZvciBpdCBhbmQgYWxzbyBpdCBjb21lcyB3
+aXRoIHN0aWNrZXJzLiBDaGVjayBpdCBvdXQgPGEgaHJlZj0iaHR0cHM6Ly9iaXQubHkvMlZ5UGxU
+bSI+aGVyZTwvYT4uPGJyIC8+PC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0iZm9vdGVyIj4KPHA+VVJM
+OiA8YSBocmVmPSJodHRwczovL3NhcmFoY2FuZGVyc2VuLmNvbS9wb3N0LzY1NjcwMzg1NTA4MTQ1
+NTYxNiI+aHR0cHM6Ly9zYXJhaGNhbmRlcnNlbi5jb20vcG9zdC82NTY3MDM4NTUwODE0NTU2MTY8
+L2E+PC9wPgo8L2Rpdj4KPC9kaXY+CjwvYm9keT4KPC9odG1sPgo=
+
+
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: Photo
+Date: Sat, 18 Sep 2021 11:30:38 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/662662952386805760
+X-RSS-URL: https://sarahcandersen.com/post/662662952386805760
+
+<!DOCTYPE html>
+<html>
+  <head>
+</head>
+<body dir="auto">
+<div class="entry" id="entry">
+<h1 class="header"><a href="https://sarahcandersen.com/post/662662952386805760">Photo</a></h1>
+<div class="body" id="body">
+<img src="https://64.media.tumblr.com/eea6e6518c88da2fa256c513ad6e61e8/5bb47bef7cf90de7-cc/s500x750/d4fc00e2fcd9a1eef66bd33dd7a61377f936024a.jpg" /><br /><br />
+</div>
+<div class="footer">
+<p>URL: <a href="https://sarahcandersen.com/post/662662952386805760">https://sarahcandersen.com/post/662662952386805760</a></p>
+</div>
+</div>
+</body>
+</html>
+
+
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: Photo
+Date: Wed, 22 Sep 2021 11:30:22 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/663025324118900736
+X-RSS-URL: https://sarahcandersen.com/post/663025324118900736
+X-RSS-TAGS: LOL,comics,sarah andersen
+
+<!DOCTYPE html>
+<html>
+  <head>
+</head>
+<body dir="auto">
+<div class="entry" id="entry">
+<h1 class="header"><a href="https://sarahcandersen.com/post/663025324118900736">Photo</a></h1>
+<div class="body" id="body">
+<img src="https://64.media.tumblr.com/49542cbefb2b0c59fad50d235f5b45c3/e03df912a585c223-96/s500x750/54d198f317229bf527bd8a93d73f5641d3f51bbc.jpg" /><br /><br />
+</div>
+<div class="footer">
+<p>URL: <a href="https://sarahcandersen.com/post/663025324118900736">https://sarahcandersen.com/post/663025324118900736</a></p>
+</div>
+</div>
+</body>
+</html>
+
+
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="utf-8"
+Content-Transfer-Encoding: base64
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: I am so excited to announce the debut of my new series, Cryptid...
+Date: Thu, 23 Sep 2021 16:02:38 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/663133050091290624
+X-RSS-URL: https://sarahcandersen.com/post/663133050091290624
+
+PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgo8L2hlYWQ+Cjxib2R5IGRpcj0iYXV0byI+
+CjxkaXYgY2xhc3M9ImVudHJ5IiBpZD0iZW50cnkiPgo8aDEgY2xhc3M9ImhlYWRlciI+PGEgaHJl
+Zj0iaHR0cHM6Ly9zYXJhaGNhbmRlcnNlbi5jb20vcG9zdC82NjMxMzMwNTAwOTEyOTA2MjQiPkkg
+YW0gc28gZXhjaXRlZCB0byBhbm5vdW5jZSB0aGUgZGVidXQgb2YgbXkgbmV3IHNlcmllcywgQ3J5
+cHRpZC4uLjwvYT48L2gxPgo8ZGl2IGNsYXNzPSJib2R5IiBpZD0iYm9keSI+CjxpbWcgc3JjPSJo
+dHRwczovLzY0Lm1lZGlhLnR1bWJsci5jb20vOTRhMDU5YmM3M2JjNmRjYmNjY2I1N2M3YmQxOTJj
+ZGIvOTdjMzhhNjVlY2ZjMjY0Yy04Yy9zNTAweDc1MC83YWRiMzBiZTliMzdlMmNhZmZlY2FjNzIw
+MWI1MjQyNjNhNDg3OTgyLmpwZyIgLz48YnIgLz4gPGJyIC8+PGltZyBzcmM9Imh0dHBzOi8vNjQu
+bWVkaWEudHVtYmxyLmNvbS80ODQwNzdmN2I3ZjhhYTdhNzJlMzEzZGYwMmFjNjllOC85N2MzOGE2
+NWVjZmMyNjRjLTAyL3M1MDB4NzUwL2RiNzdmZjBhYjIwYzhiODg3ODQyMjg1MjRiYmNjNTdjMmZm
+YTIxOTYuanBnIiAvPjxiciAvPiA8YnIgLz48aW1nIHNyYz0iaHR0cHM6Ly82NC5tZWRpYS50dW1i
+bHIuY29tLzZmYjAxZTM4OGE2MTAzNzg5NTYwZDEwZTQ0YTQ0MDMzLzk3YzM4YTY1ZWNmYzI2NGMt
+MGQvczUwMHg3NTAvMDlkNTlkYzkzOTFiZWFmY2ViNGZjMzJjMTlmODIwZWFhM2FiN2NlNi5qcGci
+IC8+PGJyIC8+IDxiciAvPjxpbWcgc3JjPSJodHRwczovLzY0Lm1lZGlhLnR1bWJsci5jb20vM2M2
+Mjg0NmRmNTgxNTMwNTRjNjFjMWFmZmZlNzJhZjcvOTdjMzhhNjVlY2ZjMjY0Yy05ZC9zNTAweDc1
+MC85OWNkN2I1MmNjZmFiYzgwNGMwYTRiZTQ5N2FmZDliOWNjMWQ3Mzk2LmpwZyIgLz48YnIgLz4g
+PGJyIC8+PGltZyBzcmM9Imh0dHBzOi8vNjQubWVkaWEudHVtYmxyLmNvbS8yYTkzZWFlNTRmMThj
+NDZkMDA0ZmM2NmM3MDczZDVkNy85N2MzOGE2NWVjZmMyNjRjLTZiL3M1MDB4NzUwL2ZhNmNlNWE2
+NzRlMDgxN2JmNDhkNmJmYzI2MmVhODAwMjM0NzhmMmQuanBnIiAvPjxiciAvPiA8YnIgLz48cD5J
+IGFtIHNvIGV4Y2l0ZWQgdG8gYW5ub3VuY2UgdGhlIGRlYnV0IG9mIG15IG5ldyBzZXJpZXMsIENy
+eXB0aWQgQ2x1YiEgRXZlciBzaW5jZSBJIHdhcyBhIGtpZCBJ4oCZdmUgbG92ZWQgdGhlIG15c3Rl
+cnkgYW5kIGxvcmUgc3Vycm91bmRpbmcgdGhlc2UgY3JlYXR1cmVzIGFuZCB0aGlzIHdhcyBteSBj
+aGFuY2UgdG8gZ2V0IHRvIGtub3cgdGhlbSBhIGJpdCBiZXR0ZXIuPGJyIC8+PC9wPjxwPkZpbmQg
+dGhlIHNlcmllcyBhbGwgYWNyb3NzIHRoZSB3ZWIhPC9wPjxwPjxhIGhyZWY9Imh0dHBzOi8vdHdp
+dHRlci5jb20vY2x1Yl9jcnlwdGlkIj5Ud2l0dGVyPC9hPjwvcD48cD48YSBocmVmPSJodHRwczov
+L2luc3RhZ3JhbS5jb20vY2x1Yi5jcnlwdGlkLyI+SW5zdGFncmFtPC9hPjwvcD48cD48YSBocmVm
+PSJodHRwczovL2ZhY2Vib29rLmNvbS9jbHViY3J5cHRpZCI+RmFjZWJvb2s8L2E+PC9wPjxwPjxh
+IGhyZWY9Imh0dHBzOi8vdGFwYXMuaW8vc2VyaWVzL2NsdWJfY3J5cHRpZCI+VGFwYXN0aWM8L2E+
+PC9wPjxwPjxhIGhyZWY9Imh0dHBzOi8vYml0Lmx5LzN1OXZETG8iPldlYnRvb248L2E+PC9wPjxw
+PjxhIGhyZWY9Imh0dHBzOi8vY2x1Yi1jcnlwdGlkLWJ5LXNhcmFoLnR1bWJsci5jb20vIj5UdW1i
+bHI8L2E+PC9wPjxwPlVwZGF0ZXMgZXZlcnkgVHVlc2RheSBhbmQgVGh1cnNkYXkhPC9wPgo8L2Rp
+dj4KPGRpdiBjbGFzcz0iZm9vdGVyIj4KPHA+VVJMOiA8YSBocmVmPSJodHRwczovL3NhcmFoY2Fu
+ZGVyc2VuLmNvbS9wb3N0LzY2MzEzMzA1MDA5MTI5MDYyNCI+aHR0cHM6Ly9zYXJhaGNhbmRlcnNl
+bi5jb20vcG9zdC82NjMxMzMwNTAwOTEyOTA2MjQ8L2E+PC9wPgo8L2Rpdj4KPC9kaXY+CjwvYm9k
+eT4KPC9odG1sPgo=
+
+
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: Photo
+Date: Sat, 25 Sep 2021 14:30:57 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/663308476291907584
+X-RSS-URL: https://sarahcandersen.com/post/663308476291907584
+
+<!DOCTYPE html>
+<html>
+  <head>
+</head>
+<body dir="auto">
+<div class="entry" id="entry">
+<h1 class="header"><a href="https://sarahcandersen.com/post/663308476291907584">Photo</a></h1>
+<div class="body" id="body">
+<img src="https://64.media.tumblr.com/6f0782b49e3ce6dd143caaf973d053b8/1bfee32afa63186e-39/s500x750/1f4801f657c16fc958be2ab27e569e51456d30a6.jpg" /><br /><br />
+</div>
+<div class="footer">
+<p>URL: <a href="https://sarahcandersen.com/post/663308476291907584">https://sarahcandersen.com/post/663308476291907584</a></p>
+</div>
+</div>
+</body>
+</html>
+
+
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: Photo
+Date: Wed, 29 Sep 2021 14:31:00 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/663670867382910977
+X-RSS-URL: https://sarahcandersen.com/post/663670867382910977
+X-RSS-TAGS: LOL,comics,Sarah Andersen
+
+<!DOCTYPE html>
+<html>
+  <head>
+</head>
+<body dir="auto">
+<div class="entry" id="entry">
+<h1 class="header"><a href="https://sarahcandersen.com/post/663670867382910977">Photo</a></h1>
+<div class="body" id="body">
+<img src="https://64.media.tumblr.com/d6f39deaf7bec19e59c7dd0b2d82dd3d/8550196deb68ac6b-4a/s500x750/230c3cbbeba6657a4b64818ea39653111f3aaa01.jpg" /><br /><br />
+</div>
+<div class="footer">
+<p>URL: <a href="https://sarahcandersen.com/post/663670867382910977">https://sarahcandersen.com/post/663670867382910977</a></p>
+</div>
+</div>
+</body>
+</html>
+
+
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: Photo
+Date: Sat, 02 Oct 2021 14:30:41 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/663942638206124033
+X-RSS-URL: https://sarahcandersen.com/post/663942638206124033
+
+<!DOCTYPE html>
+<html>
+  <head>
+</head>
+<body dir="auto">
+<div class="entry" id="entry">
+<h1 class="header"><a href="https://sarahcandersen.com/post/663942638206124033">Photo</a></h1>
+<div class="body" id="body">
+<img src="https://64.media.tumblr.com/b8cd168658a9cfe1a19da03ba4503c9d/2ee8684584dccae6-c5/s500x750/68a2d59545337248000b4ea26a0a53a2c3aedb0e.jpg" /><br /><br />
+</div>
+<div class="footer">
+<p>URL: <a href="https://sarahcandersen.com/post/663942638206124033">https://sarahcandersen.com/post/663942638206124033</a></p>
+</div>
+</div>
+</body>
+</html>
+
+
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="utf-8"
+Content-Transfer-Encoding: base64
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: Hi friends!I am so happy to announce that my latest book,...
+Date: Mon, 04 Oct 2021 11:30:44 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/664112510998396928
+X-RSS-URL: https://sarahcandersen.com/post/664112510998396928
+
+PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgo8L2hlYWQ+Cjxib2R5IGRpcj0iYXV0byI+
+CjxkaXYgY2xhc3M9ImVudHJ5IiBpZD0iZW50cnkiPgo8aDEgY2xhc3M9ImhlYWRlciI+PGEgaHJl
+Zj0iaHR0cHM6Ly9zYXJhaGNhbmRlcnNlbi5jb20vcG9zdC82NjQxMTI1MTA5OTgzOTY5MjgiPkhp
+IGZyaWVuZHMhSSBhbSBzbyBoYXBweSB0byBhbm5vdW5jZSB0aGF0IG15IGxhdGVzdCBib29rLC4u
+LjwvYT48L2gxPgo8ZGl2IGNsYXNzPSJib2R5IiBpZD0iYm9keSI+CjxpbWcgc3JjPSJodHRwczov
+LzY0Lm1lZGlhLnR1bWJsci5jb20vMzQ5ODJjZTIwYzczZjAxMmZhOGRiYjk1NDg0MmRhMDUvOGQw
+MWEwMzUxODIyZTkyZC0yZC9zNTAweDc1MC9mYzk5ZTMzZTY2ZTFhMjRhZDY1MTJlNDc2ODMwNjFh
+MmM2NTc4NjEzLmdpZnYiIC8+PGJyIC8+IDxiciAvPjxpbWcgc3JjPSJodHRwczovLzY0Lm1lZGlh
+LnR1bWJsci5jb20vOWJiNGJjYTNmNjNkOTM3NGMyNjY3YWFkOTlmYjA0YTMvOGQwMWEwMzUxODIy
+ZTkyZC04Yy9zNTAweDc1MC8wNWU2MWI3ZGFkNGQ1MmM1MmM2OTAwMmYwMDk5ZDJkZTM1ZDMzNzA2
+LmpwZyIgLz48YnIgLz4gPGJyIC8+PGltZyBzcmM9Imh0dHBzOi8vNjQubWVkaWEudHVtYmxyLmNv
+bS9iMzA2MDVkYjhjMTM5YjE3MmUxNzY1ZjcyOWVlMmQyMi84ZDAxYTAzNTE4MjJlOTJkLTQ0L3M1
+MDB4NzUwLzRmZWNiZThlZjI4NTE1NDlkOTgwN2YwNGEzOTI3MGZiNWZiODA2YTcuanBnIiAvPjxi
+ciAvPiA8YnIgLz48aW1nIHNyYz0iaHR0cHM6Ly82NC5tZWRpYS50dW1ibHIuY29tLzliYTAxZjI1
+ODFjMWFiYjVkYzIxMDUwNDMzNDU2Nzg2LzhkMDFhMDM1MTgyMmU5MmQtMGIvczUwMHg3NTAvZGE2
+ZTRiYjNkNTAwODhhOTRhNGM1MjRjZTU5NjdjMDVmMjBjYjJkMy5qcGciIC8+PGJyIC8+IDxiciAv
+PjxwPkhpIGZyaWVuZHMhPC9wPjxwPkkgYW0gc28gaGFwcHkgdG8gYW5ub3VuY2UgdGhhdCBteSBs
+YXRlc3QgYm9vaywg4oCcT2RkYmFsbOKAnSwgaXMgb3V0IGZvciBwcmVvcmRlciB0b2RheS4gVGhl
+IG9mZmljaWFsIHJlbGVhc2UgZGF0ZSBpcyBOb3ZlbWJlciAzMHRoLiBDaGVjayBpdCBvdXQgPGEg
+aHJlZj0iaHR0cHM6Ly9wdWJsaXNoaW5nLmFuZHJld3NtY21lZWwuY29tL2Jvb2svb2RkYmFsbC8i
+PmhlcmU8L2E+ITwvcD48cD5UaGlzIGlzIHRoZSBmb3VydGggU2FyYWjigJlzIFNjcmliYmxlcyBi
+b29rLCBhbmQgd2l0aCB0aGlzIGNvbGxlY3Rpb24gSSByZXR1cm4gdG8gdGhlIG9yaWdpbmFsIGZv
+cm1hdCBvZiBteSBmaXJzdCBib29rLCDigJxBZHVsdGhvb2QgaXMgYSBNeXRo4oCdLiBUaGF0IG1l
+YW5zIHRoYXQgdGhpcyBib29rIGlzIG1hZGUgdXAgZW50aXJlbHkgb2Ygc2hvcnQgZm9ybSBjb21p
+Y3MuIOKAnE9kZGJhbGzigJ0gZXhwbG9yZXMgdGhlIHN0cmFuZ2U7IEkgd29ya2VkIHdpdGggY2hh
+cmFjdGVycyBsaWtlIE1lZHVzYSwgRHJhY3VsYSwgYW5kIGV2ZW4gYmlibGljYWxseSBhY2N1cmF0
+ZSBhbmdlbHMgdG8gdGVsbCBqb2tlcyBpbiBhIG5ldyBsaWdodCB3aXRoaW4gdGhlIFNhcmFo4oCZ
+cyBTY3JpYmJsZXMgdW5pdmVyc2UuPC9wPjxwPlRoaXMgYm9vayBoYXMgMjAgYnJhbmQgbmV3LCBu
+ZXZlciBiZWZvcmUgc2VlbiBjb21pY3MgYW5kIGlzIHRoZSBmaXJzdCBib29rIHRvIGNvbWUgd2l0
+aCBhIHN0aWNrZXIgc2V0IHdoaWNoIHlvdSBjYW4gc2VlIGFib3ZlLjwvcD48cD5JIGxvdmUgdGhp
+cyBib29rIHNvIG11Y2ggYW5kIEkgaG9wZSB5b3UgbG92ZSBpdCB0b28hIFN0YXkgb2RkIDwzPC9w
+Pgo8L2Rpdj4KPGRpdiBjbGFzcz0iZm9vdGVyIj4KPHA+VVJMOiA8YSBocmVmPSJodHRwczovL3Nh
+cmFoY2FuZGVyc2VuLmNvbS9wb3N0LzY2NDExMjUxMDk5ODM5NjkyOCI+aHR0cHM6Ly9zYXJhaGNh
+bmRlcnNlbi5jb20vcG9zdC82NjQxMTI1MTA5OTgzOTY5Mjg8L2E+PC9wPgo8L2Rpdj4KPC9kaXY+
+CjwvYm9keT4KPC9odG1sPgo=
+
+
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: Photo
+Date: Wed, 13 Oct 2021 14:30:52 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/664939216606773248
+X-RSS-URL: https://sarahcandersen.com/post/664939216606773248
+X-RSS-TAGS: LOL,comics,Sarah Andersen
+
+<!DOCTYPE html>
+<html>
+  <head>
+</head>
+<body dir="auto">
+<div class="entry" id="entry">
+<h1 class="header"><a href="https://sarahcandersen.com/post/664939216606773248">Photo</a></h1>
+<div class="body" id="body">
+<img src="https://64.media.tumblr.com/2b701c0eaa95f010d9db9d95acc3e8a1/8cc383102ffe2f0b-bd/s500x750/17f8d821fea802b8ab357658f199064821cf4ad8.jpg" /><br /><br />
+</div>
+<div class="footer">
+<p>URL: <a href="https://sarahcandersen.com/post/664939216606773248">https://sarahcandersen.com/post/664939216606773248</a></p>
+</div>
+</div>
+</body>
+</html>
+
+
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="utf-8"
+Content-Transfer-Encoding: base64
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: sarahseeandersen:I am so excited to announce the debut of my new...
+Date: Fri, 15 Oct 2021 22:18:47 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/665149849392611328
+X-RSS-URL: https://sarahcandersen.com/post/665149849392611328
+
+PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgo8L2hlYWQ+Cjxib2R5IGRpcj0iYXV0byI+
+CjxkaXYgY2xhc3M9ImVudHJ5IiBpZD0iZW50cnkiPgo8aDEgY2xhc3M9ImhlYWRlciI+PGEgaHJl
+Zj0iaHR0cHM6Ly9zYXJhaGNhbmRlcnNlbi5jb20vcG9zdC82NjUxNDk4NDkzOTI2MTEzMjgiPnNh
+cmFoc2VlYW5kZXJzZW46SSBhbSBzbyBleGNpdGVkIHRvIGFubm91bmNlIHRoZSBkZWJ1dCBvZiBt
+eSBuZXcuLi48L2E+PC9oMT4KPGRpdiBjbGFzcz0iYm9keSIgaWQ9ImJvZHkiPgo8aW1nIHNyYz0i
+aHR0cHM6Ly82NC5tZWRpYS50dW1ibHIuY29tLzk0YTA1OWJjNzNiYzZkY2JjY2NiNTdjN2JkMTky
+Y2RiLzk3YzM4YTY1ZWNmYzI2NGMtOGMvczUwMHg3NTAvN2FkYjMwYmU5YjM3ZTJjYWZmZWNhYzcy
+MDFiNTI0MjYzYTQ4Nzk4Mi5qcGciIC8+PGJyIC8+IDxiciAvPjxpbWcgc3JjPSJodHRwczovLzY0
+Lm1lZGlhLnR1bWJsci5jb20vNDg0MDc3ZjdiN2Y4YWE3YTcyZTMxM2RmMDJhYzY5ZTgvOTdjMzhh
+NjVlY2ZjMjY0Yy0wMi9zNTAweDc1MC9kYjc3ZmYwYWIyMGM4Yjg4Nzg0MjI4NTI0YmJjYzU3YzJm
+ZmEyMTk2LmpwZyIgLz48YnIgLz4gPGJyIC8+PGltZyBzcmM9Imh0dHBzOi8vNjQubWVkaWEudHVt
+YmxyLmNvbS82ZmIwMWUzODhhNjEwMzc4OTU2MGQxMGU0NGE0NDAzMy85N2MzOGE2NWVjZmMyNjRj
+LTBkL3M1MDB4NzUwLzA5ZDU5ZGM5MzkxYmVhZmNlYjRmYzMyYzE5ZjgyMGVhYTNhYjdjZTYuanBn
+IiAvPjxiciAvPiA8YnIgLz48aW1nIHNyYz0iaHR0cHM6Ly82NC5tZWRpYS50dW1ibHIuY29tLzNj
+NjI4NDZkZjU4MTUzMDU0YzYxYzFhZmZmZTcyYWY3Lzk3YzM4YTY1ZWNmYzI2NGMtOWQvczUwMHg3
+NTAvOTljZDdiNTJjY2ZhYmM4MDRjMGE0YmU0OTdhZmQ5YjljYzFkNzM5Ni5qcGciIC8+PGJyIC8+
+IDxiciAvPjxpbWcgc3JjPSJodHRwczovLzY0Lm1lZGlhLnR1bWJsci5jb20vMmE5M2VhZTU0ZjE4
+YzQ2ZDAwNGZjNjZjNzA3M2Q1ZDcvOTdjMzhhNjVlY2ZjMjY0Yy02Yi9zNTAweDc1MC9mYTZjZTVh
+Njc0ZTA4MTdiZjQ4ZDZiZmMyNjJlYTgwMDIzNDc4ZjJkLmpwZyIgLz48YnIgLz4gPGJyIC8+PHA+
+PGEgY2xhc3M9InR1bWJscl9ibG9nIiBocmVmPSJodHRwczovL3NhcmFoY2FuZGVyc2VuLmNvbS9w
+b3N0LzY2MzEzMzA1MDA5MTI5MDYyNC9pLWFtLXNvLWV4Y2l0ZWQtdG8tYW5ub3VuY2UtdGhlLWRl
+YnV0LW9mLW15LW5ldyI+c2FyYWhzZWVhbmRlcnNlbjwvYT46PC9wPjxibG9ja3F1b3RlPjxwPkkg
+YW0gc28gZXhjaXRlZCB0byBhbm5vdW5jZSB0aGUgZGVidXQgb2YgbXkgbmV3IHNlcmllcywgQ3J5
+cHRpZCBDbHViISBFdmVyIHNpbmNlIEkgd2FzIGEga2lkIEnigJl2ZSBsb3ZlZCB0aGUgbXlzdGVy
+eSBhbmQgbG9yZSBzdXJyb3VuZGluZyB0aGVzZSBjcmVhdHVyZXMgYW5kIHRoaXMgd2FzIG15IGNo
+YW5jZSB0byBnZXQgdG8ga25vdyB0aGVtIGEgYml0IGJldHRlci48YnIgLz48L3A+PHA+RmluZCB0
+aGUgc2VyaWVzIGFsbCBhY3Jvc3MgdGhlIHdlYiE8L3A+PHA+PGEgaHJlZj0iaHR0cHM6Ly90d2l0
+dGVyLmNvbS9jbHViX2NyeXB0aWQiPlR3aXR0ZXI8L2E+PC9wPjxwPjxhIGhyZWY9Imh0dHBzOi8v
+aW5zdGFncmFtLmNvbS9jbHViLmNyeXB0aWQvIj5JbnN0YWdyYW08L2E+PC9wPjxwPjxhIGhyZWY9
+Imh0dHBzOi8vZmFjZWJvb2suY29tL2NsdWJjcnlwdGlkIj5GYWNlYm9vazwvYT48L3A+PHA+PGEg
+aHJlZj0iaHR0cHM6Ly90YXBhcy5pby9zZXJpZXMvY2x1Yl9jcnlwdGlkIj5UYXBhc3RpYzwvYT48
+L3A+PHA+PGEgaHJlZj0iaHR0cHM6Ly9iaXQubHkvM3U5dkRMbyI+V2VidG9vbjwvYT48L3A+PHA+
+PGEgaHJlZj0iaHR0cHM6Ly9jbHViLWNyeXB0aWQtYnktc2FyYWgudHVtYmxyLmNvbS8iPlR1bWJs
+cjwvYT48L3A+PHA+VXBkYXRlcyBldmVyeSBUdWVzZGF5IGFuZCBUaHVyc2RheSE8L3A+PC9ibG9j
+a3F1b3RlPgo8cD48Yj5SZWJsb2cgYmVjYXVzZSBJIHdhcyBhYmxlIHRvIGZpeCB0aGUgY29sb3Jz
+IGFuZCBJIGFsc28gbWFkZSBhIFQ8YSBocmVmPSJodHRwczovL2NsdWItY3J5cHRpZC1ieS1zYXJh
+aC50dW1ibHIuY29tLyI+dW1ibHIgPC9hPmZvciB0aGlzIHNlcmllcyEgSG9wZSB5b3UgZ3V5cyBh
+cmUgZW5qb3lpbmcgPDM8L2I+PC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0iZm9vdGVyIj4KPHA+VVJM
+OiA8YSBocmVmPSJodHRwczovL3NhcmFoY2FuZGVyc2VuLmNvbS9wb3N0LzY2NTE0OTg0OTM5MjYx
+MTMyOCI+aHR0cHM6Ly9zYXJhaGNhbmRlcnNlbi5jb20vcG9zdC82NjUxNDk4NDkzOTI2MTEzMjg8
+L2E+PC9wPgo8L2Rpdj4KPC9kaXY+CjwvYm9keT4KPC9odG1sPgo=
+
+
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: Photo
+Date: Sat, 16 Oct 2021 14:30:59 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/665211014130892800
+X-RSS-URL: https://sarahcandersen.com/post/665211014130892800
+X-RSS-TAGS: LOL,comics,Sarah Andersen
+
+<!DOCTYPE html>
+<html>
+  <head>
+</head>
+<body dir="auto">
+<div class="entry" id="entry">
+<h1 class="header"><a href="https://sarahcandersen.com/post/665211014130892800">Photo</a></h1>
+<div class="body" id="body">
+<img src="https://64.media.tumblr.com/fb381b4a37fb4f94345410aaff747f43/03fb586a2b063044-7f/s500x750/2fef538c45d7944da56c375dced620935940f0b0.jpg" /><br /><br />
+</div>
+<div class="footer">
+<p>URL: <a href="https://sarahcandersen.com/post/665211014130892800">https://sarahcandersen.com/post/665211014130892800</a></p>
+</div>
+</div>
+</body>
+</html>
+
+
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: Photo
+Date: Wed, 20 Oct 2021 14:30:33 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/665573374865653760
+X-RSS-URL: https://sarahcandersen.com/post/665573374865653760
+X-RSS-TAGS: LOL,comics,Sarah Andersen
+
+<!DOCTYPE html>
+<html>
+  <head>
+</head>
+<body dir="auto">
+<div class="entry" id="entry">
+<h1 class="header"><a href="https://sarahcandersen.com/post/665573374865653760">Photo</a></h1>
+<div class="body" id="body">
+<img src="https://64.media.tumblr.com/e4c02786c261b18fc5717b1f3eb65c3b/0152dc5e9542aac6-71/s500x750/334734aaa3f7fb6747c7fecdf632697f12356006.jpg" /><br /><br />
+</div>
+<div class="footer">
+<p>URL: <a href="https://sarahcandersen.com/post/665573374865653760">https://sarahcandersen.com/post/665573374865653760</a></p>
+</div>
+</div>
+</body>
+</html>
+
+
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: Photo
+Date: Sat, 23 Oct 2021 14:30:39 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/665845171828752386
+X-RSS-URL: https://sarahcandersen.com/post/665845171828752386
+X-RSS-TAGS: LOL,comics,Sarah Andersen
+
+<!DOCTYPE html>
+<html>
+  <head>
+</head>
+<body dir="auto">
+<div class="entry" id="entry">
+<h1 class="header"><a href="https://sarahcandersen.com/post/665845171828752386">Photo</a></h1>
+<div class="body" id="body">
+<img src="https://64.media.tumblr.com/4227263407263420828f029f2bece80f/7da0fed164feb288-db/s500x750/4993577d0a19f6803ff3ad729a1c94fccf186658.jpg" /><br /><br />
+</div>
+<div class="footer">
+<p>URL: <a href="https://sarahcandersen.com/post/665845171828752386">https://sarahcandersen.com/post/665845171828752386</a></p>
+</div>
+</div>
+</body>
+</html>
+
+
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="utf-8"
+Content-Transfer-Encoding: base64
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: sarahseeandersen:Hi friends!I am so happy to announce that my...
+Date: Mon, 25 Oct 2021 21:51:14 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/666054085676580864
+X-RSS-URL: https://sarahcandersen.com/post/666054085676580864
+
+PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgo8L2hlYWQ+Cjxib2R5IGRpcj0iYXV0byI+
+CjxkaXYgY2xhc3M9ImVudHJ5IiBpZD0iZW50cnkiPgo8aDEgY2xhc3M9ImhlYWRlciI+PGEgaHJl
+Zj0iaHR0cHM6Ly9zYXJhaGNhbmRlcnNlbi5jb20vcG9zdC82NjYwNTQwODU2NzY1ODA4NjQiPnNh
+cmFoc2VlYW5kZXJzZW46SGkgZnJpZW5kcyFJIGFtIHNvIGhhcHB5IHRvIGFubm91bmNlIHRoYXQg
+bXkuLi48L2E+PC9oMT4KPGRpdiBjbGFzcz0iYm9keSIgaWQ9ImJvZHkiPgo8aW1nIHNyYz0iaHR0
+cHM6Ly82NC5tZWRpYS50dW1ibHIuY29tLzM0OTgyY2UyMGM3M2YwMTJmYThkYmI5NTQ4NDJkYTA1
+LzhkMDFhMDM1MTgyMmU5MmQtMmQvczUwMHg3NTAvZmM5OWUzM2U2NmUxYTI0YWQ2NTEyZTQ3Njgz
+MDYxYTJjNjU3ODYxMy5naWZ2IiAvPjxiciAvPiA8YnIgLz48aW1nIHNyYz0iaHR0cHM6Ly82NC5t
+ZWRpYS50dW1ibHIuY29tLzliYjRiY2EzZjYzZDkzNzRjMjY2N2FhZDk5ZmIwNGEzLzhkMDFhMDM1
+MTgyMmU5MmQtOGMvczUwMHg3NTAvMDVlNjFiN2RhZDRkNTJjNTJjNjkwMDJmMDA5OWQyZGUzNWQz
+MzcwNi5qcGciIC8+PGJyIC8+IDxiciAvPjxpbWcgc3JjPSJodHRwczovLzY0Lm1lZGlhLnR1bWJs
+ci5jb20vYjMwNjA1ZGI4YzEzOWIxNzJlMTc2NWY3MjllZTJkMjIvOGQwMWEwMzUxODIyZTkyZC00
+NC9zNTAweDc1MC80ZmVjYmU4ZWYyODUxNTQ5ZDk4MDdmMDRhMzkyNzBmYjVmYjgwNmE3LmpwZyIg
+Lz48YnIgLz4gPGJyIC8+PGltZyBzcmM9Imh0dHBzOi8vNjQubWVkaWEudHVtYmxyLmNvbS85YmEw
+MWYyNTgxYzFhYmI1ZGMyMTA1MDQzMzQ1Njc4Ni84ZDAxYTAzNTE4MjJlOTJkLTBiL3M1MDB4NzUw
+L2RhNmU0YmIzZDUwMDg4YTk0YTRjNTI0Y2U1OTY3YzA1ZjIwY2IyZDMuanBnIiAvPjxiciAvPiA8
+YnIgLz48cD48YSBjbGFzcz0idHVtYmxyX2Jsb2ciIGhyZWY9Imh0dHBzOi8vc2FyYWhjYW5kZXJz
+ZW4uY29tL3Bvc3QvNjY0MTEyNTEwOTk4Mzk2OTI4L2hpLWZyaWVuZHMtaS1hbS1zby1oYXBweS10
+by1hbm5vdW5jZS10aGF0LW15Ij5zYXJhaHNlZWFuZGVyc2VuPC9hPjo8L3A+PGJsb2NrcXVvdGU+
+PHA+SGkgZnJpZW5kcyE8L3A+PHA+SSBhbSBzbyBoYXBweSB0byBhbm5vdW5jZSB0aGF0IG15IGxh
+dGVzdCBib29rLCDigJxPZGRiYWxs4oCdLCBpcyBvdXQgZm9yIHByZW9yZGVyIHRvZGF5LiBUaGUg
+b2ZmaWNpYWwgcmVsZWFzZSBkYXRlIGlzIE5vdmVtYmVyIDMwdGguIENoZWNrIGl0IG91dCA8YSBo
+cmVmPSJodHRwczovL3B1Ymxpc2hpbmcuYW5kcmV3c21jbWVlbC5jb20vYm9vay9vZGRiYWxsLyI+
+aGVyZTwvYT4hPC9wPjxwPlRoaXMgaXMgdGhlIGZvdXJ0aCBTYXJhaOKAmXMgU2NyaWJibGVzIGJv
+b2ssIGFuZCB3aXRoIHRoaXMgY29sbGVjdGlvbiBJIHJldHVybiB0byB0aGUgb3JpZ2luYWwgZm9y
+bWF0IG9mIG15IGZpcnN0IGJvb2ssIOKAnEFkdWx0aG9vZCBpcyBhIE15dGjigJ0uIFRoYXQgbWVh
+bnMgdGhhdCB0aGlzIGJvb2sgaXMgbWFkZSB1cCBlbnRpcmVseSBvZiBzaG9ydCBmb3JtIGNvbWlj
+cy4g4oCcT2RkYmFsbOKAnSBleHBsb3JlcyB0aGUgc3RyYW5nZTsgSSB3b3JrZWQgd2l0aCBjaGFy
+YWN0ZXJzIGxpa2UgTWVkdXNhLCBEcmFjdWxhLCBhbmQgZXZlbiBiaWJsaWNhbGx5IGFjY3VyYXRl
+IGFuZ2VscyB0byB0ZWxsIGpva2VzIGluIGEgbmV3IGxpZ2h0IHdpdGhpbiB0aGUgU2FyYWjigJlz
+IFNjcmliYmxlcyB1bml2ZXJzZS48L3A+PHA+VGhpcyBib29rIGhhcyAyMCBicmFuZCBuZXcsIG5l
+dmVyIGJlZm9yZSBzZWVuIGNvbWljcyBhbmQgaXMgdGhlIGZpcnN0IGJvb2sgdG8gY29tZSB3aXRo
+IGEgc3RpY2tlciBzZXQgd2hpY2ggeW91IGNhbiBzZWUgYWJvdmUuPC9wPjxwPkkgbG92ZSB0aGlz
+IGJvb2sgc28gbXVjaCBhbmQgSSBob3BlIHlvdSBsb3ZlIGl0IHRvbyEgU3RheSBvZGQgPDM8L3A+
+PC9ibG9ja3F1b3RlPgo8cD48Yj5Tb21lIG5ld3PigJNEdWUgdG8gQ09WSUQgcmVsYXRlZCBzaGlw
+cGluZyBkZWxheXMsIE9kZGJhbGzigJlzIHJlbGVhc2UgZGF0ZSBoYXMgYmVlbiBtb3ZlZCBmcm9t
+IE5vdiAzMHRoIHRvIERlYyA3dGguIFVuZm9ydHVuYXRlbHkgd2UgY291bGRu4oCZdCBkbyBhbnl0
+aGluZyB0byBwcmV2ZW50IG9yIGNoYW5nZSB0aGUgZGVsYXkgYW5kIHdl4oCZcmUgc28gc29ycnkg
+dG8gbWFrZSB5b3Ugd2FpdCBhIGJpdCBtb3JlIcKgPC9iPjxiciAvPjwvcD4KPC9kaXY+CjxkaXYg
+Y2xhc3M9ImZvb3RlciI+CjxwPlVSTDogPGEgaHJlZj0iaHR0cHM6Ly9zYXJhaGNhbmRlcnNlbi5j
+b20vcG9zdC82NjYwNTQwODU2NzY1ODA4NjQiPmh0dHBzOi8vc2FyYWhjYW5kZXJzZW4uY29tL3Bv
+c3QvNjY2MDU0MDg1Njc2NTgwODY0PC9hPjwvcD4KPC9kaXY+CjwvZGl2Pgo8L2JvZHk+CjwvaHRt
+bD4K
+
+
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: A little trailer for Oddball! Preorder here.
+Date: Tue, 26 Oct 2021 16:46:21 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/666125500611215360
+X-RSS-URL: https://sarahcandersen.com/post/666125500611215360
+
+<!DOCTYPE html>
+<html>
+  <head>
+</head>
+<body dir="auto">
+<div class="entry" id="entry">
+<h1 class="header"><a href="https://sarahcandersen.com/post/666125500611215360">A little trailer for Oddball! Preorder here.</a></h1>
+<div class="body" id="body">
+<video class="crt-video crt-skin-default" controls="controls" height="225" id="embed-618453952f1c3247147443" poster="https://64.media.tumblr.com/tumblr_r1lfpiiTtc1qiuieb_smart1.jpg" preload="none" width="400">
+    <source src="https://va.media.tumblr.com/tumblr_r1lfpiiTtc1qiuieb_480.mp4" type="video/mp4" />
+</video>
+<br /><br /><p>A little trailer for Oddball! Preorder <a href="https://publishing.andrewsmcmeel.com/book/oddball/">here</a>.<br /></p>
+</div>
+<div class="footer">
+<p>URL: <a href="https://sarahcandersen.com/post/666125500611215360">https://sarahcandersen.com/post/666125500611215360</a></p>
+</div>
+</div>
+</body>
+</html>
+
+
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: Photo
+Date: Wed, 27 Oct 2021 14:30:44 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/666207564872171520
+X-RSS-URL: https://sarahcandersen.com/post/666207564872171520
+
+<!DOCTYPE html>
+<html>
+  <head>
+</head>
+<body dir="auto">
+<div class="entry" id="entry">
+<h1 class="header"><a href="https://sarahcandersen.com/post/666207564872171520">Photo</a></h1>
+<div class="body" id="body">
+<img src="https://64.media.tumblr.com/416d6f58ef1b455b2b600db64696223f/f5c1d607b76faa43-50/s500x750/985695ef255910cb7bf49c14c5941fdb57c0adfa.jpg" /><br /><br />
+</div>
+<div class="footer">
+<p>URL: <a href="https://sarahcandersen.com/post/666207564872171520">https://sarahcandersen.com/post/666207564872171520</a></p>
+</div>
+</div>
+</body>
+</html>
+
+
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: Photo
+Date: Sat, 30 Oct 2021 14:30:30 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/666479341239156736
+X-RSS-URL: https://sarahcandersen.com/post/666479341239156736
+X-RSS-TAGS: LOL,comics,Sarah Andersen
+
+<!DOCTYPE html>
+<html>
+  <head>
+</head>
+<body dir="auto">
+<div class="entry" id="entry">
+<h1 class="header"><a href="https://sarahcandersen.com/post/666479341239156736">Photo</a></h1>
+<div class="body" id="body">
+<img src="https://64.media.tumblr.com/f8892e62e2f25b1a555551456f3c2fc7/3b6633d8646014f1-84/s500x750/bc6673d2b4bb75c3d18584ca6d9f8605cbd1feee.jpg" /><br /><br />
+</div>
+<div class="footer">
+<p>URL: <a href="https://sarahcandersen.com/post/666479341239156736">https://sarahcandersen.com/post/666479341239156736</a></p>
+</div>
+</div>
+</body>
+</html>
+
+
+SENT BY: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+MIME-Version: 1.0
+Content-Type: text/html; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+From: "Sarah's Scribbles: <author>" <user@rss2email.invalid>
+To: a@b.com
+Subject: Photo
+Date: Wed, 03 Nov 2021 14:30:46 -0000
+Message-ID: <...@dev.null.invalid>
+User-Agent: rss2email/...
+List-ID: <test.localhost>
+List-Post: NO (posting not allowed on this list)
+X-RSS-Feed: data/tumblr/feed.rss
+X-RSS-ID: https://sarahcandersen.com/post/666841746512150528
+X-RSS-URL: https://sarahcandersen.com/post/666841746512150528
+X-RSS-TAGS: LOL,comics,Sarah Andersen
+
+<!DOCTYPE html>
+<html>
+  <head>
+</head>
+<body dir="auto">
+<div class="entry" id="entry">
+<h1 class="header"><a href="https://sarahcandersen.com/post/666841746512150528">Photo</a></h1>
+<div class="body" id="body">
+<img src="https://64.media.tumblr.com/f01fb1d5b696debba48a685cc5e08435/0e8ee75ddaae42d7-a3/s500x750/7364bb49382dfa02dbdd9c26fffda9044805ce96.jpg" /><br /><br />
+</div>
+<div class="footer">
+<p>URL: <a href="https://sarahcandersen.com/post/666841746512150528">https://sarahcandersen.com/post/666841746512150528</a></p>
+</div>
+</div>
+</body>
+</html>
+
diff --git a/test/data/tumblr/README b/test/data/tumblr/README
new file mode 100644
index 0000000..9c010f1
--- /dev/null
+++ b/test/data/tumblr/README
@@ -0,0 +1,23 @@
+feed.rss is a snapshot of
+
+  https://sarahcandersen.com/rss
+
+as of 2021-11-04.
+
+HTTP headers:
+
+    HTTP/2 200
+    server: openresty
+    date: Thu, 04 Nov 2021 21:40:18 GMT
+    content-type: text/xml; charset=utf-8
+    vary: Accept-Encoding
+    vary: Accept-Encoding
+    x-rid: 1f203dae5478bd8a764326c32dd126c7
+    p3p: CP="Tumblr's privacy policy is available here: https://www.tumblr.com/policy/en/privacy"
+    x-xss-protection: 1; mode=block
+    x-content-type-options: nosniff
+    strict-transport-security: max-age=15552001
+    x-tumblr-user: sarahseeandersen
+    x-robots-tag: noindex
+    cache-control: max-age=600
+    x-ua-compatible: IE=Edge,chrome=1
diff --git a/test/data/tumblr/feed.rss b/test/data/tumblr/feed.rss
new file mode 100644
index 0000000..2e8d923
--- /dev/null
+++ b/test/data/tumblr/feed.rss
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><description></description><title>Sarah's
+Scribbles</title><generator>Tumblr (3.0; @sarahseeandersen)</generator><link>https://sarahcandersen.com/</link><item><title>Photo</title><description>&lt;img src="https://64.media.tumblr.com/f01fb1d5b696debba48a685cc5e08435/0e8ee75ddaae42d7-a3/s500x750/7364bb49382dfa02dbdd9c26fffda9044805ce96.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>https://sarahcandersen.com/post/666841746512150528</link><guid>https://sarahcandersen.com/post/666841746512150528</guid><pubDate>Wed, 03 Nov 2021 07:30:46 -0700</pubDate><category>LOL</category><category>comics</category><category>Sarah Andersen</category></item><item><title>Photo</title><description>&lt;img src="https://64.media.tumblr.com/f8892e62e2f25b1a555551456f3c2fc7/3b6633d8646014f1-84/s500x750/bc6673d2b4bb75c3d18584ca6d9f8605cbd1feee.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>https://sarahcandersen.com/post/666479341239156736</link><guid>https://sarahcandersen.com/post/666479341239156736</guid><pubDate>Sat, 30 Oct 2021 07:30:30 -0700</pubDate><category>LOL</category><category>comics</category><category>Sarah Andersen</category></item><item><title>Photo</title><description>&lt;img src="https://64.media.tumblr.com/416d6f58ef1b455b2b600db64696223f/f5c1d607b76faa43-50/s500x750/985695ef255910cb7bf49c14c5941fdb57c0adfa.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>https://sarahcandersen.com/post/666207564872171520</link><guid>https://sarahcandersen.com/post/666207564872171520</guid><pubDate>Wed, 27 Oct 2021 07:30:44 -0700</pubDate></item><item><title>A little trailer for Oddball! Preorder here.</title><description>
+&lt;video  id='embed-618453952f1c3247147443' class='crt-video crt-skin-default' width='400' height='225' poster='https://64.media.tumblr.com/tumblr_r1lfpiiTtc1qiuieb_smart1.jpg' preload='none' muted data-crt-video data-crt-options='{"autoheight":null,"duration":27,"hdUrl":"https://va.media.tumblr.com/tumblr_r1lfpiiTtc1qiuieb_720.mp4","filmstrip":{"url":"https://64.media.tumblr.com/previews/tumblr_r1lfpiiTtc1qiuieb_filmstrip.jpg","width":"200","height":"112"}}' crossOrigin='anonymous' controls&gt;
+    &lt;source src="https://va.media.tumblr.com/tumblr_r1lfpiiTtc1qiuieb_480.mp4" type="video/mp4"&gt;
+&lt;/video&gt;
+&lt;br/&gt;&lt;br/&gt;&lt;p&gt;A little trailer for Oddball! Preorder &lt;a href="https://publishing.andrewsmcmeel.com/book/oddball/"&gt;here&lt;/a&gt;.&lt;br/&gt;&lt;/p&gt;</description><link>https://sarahcandersen.com/post/666125500611215360</link><guid>https://sarahcandersen.com/post/666125500611215360</guid><pubDate>Tue, 26 Oct 2021 09:46:21 -0700</pubDate></item><item><title>sarahseeandersen:Hi friends!I am so happy to announce that my...</title><description>&lt;img src="https://64.media.tumblr.com/34982ce20c73f012fa8dbb954842da05/8d01a0351822e92d-2d/s500x750/fc99e33e66e1a24ad6512e47683061a2c6578613.gifv"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://64.media.tumblr.com/9bb4bca3f63d9374c2667aad99fb04a3/8d01a0351822e92d-8c/s500x750/05e61b7dad4d52c52c69002f0099d2de35d33706.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://64.media.tumblr.com/b30605db8c139b172e1765f729ee2d22/8d01a0351822e92d-44/s500x750/4fecbe8ef2851549d9807f04a39270fb5fb806a7.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://64.media.tumblr.com/9ba01f2581c1abb5dc21050433456786/8d01a0351822e92d-0b/s500x750/da6e4bb3d50088a94a4c524ce5967c05f20cb2d3.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;p&gt;&lt;a href="https://sarahcandersen.com/post/664112510998396928/hi-friends-i-am-so-happy-to-announce-that-my" class="tumblr_blog"&gt;sarahseeandersen&lt;/a&gt;:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Hi friends!&lt;/p&gt;&lt;p&gt;I am so happy to announce that my latest book, “Oddball”, is out for preorder today. The official release date is November 30th. Check it out &lt;a href="https://publishing.andrewsmcmeel.com/book/oddball/"&gt;here&lt;/a&gt;!&lt;/p&gt;&lt;p&gt;This is the fourth Sarah’s Scribbles book, and with this collection I return to the original format of my first book, “Adulthood is a Myth”. That means that this book is made up entirely of short form comics. “Oddball” explores the strange; I worked with characters like Medusa, Dracula, and even biblically accurate angels to tell jokes in a new light within the Sarah’s Scribbles universe.&lt;/p&gt;&lt;p&gt;This book has 20 brand new, never before seen comics and is the first book to come with a sticker set which you can see above.&lt;/p&gt;&lt;p&gt;I love this book so much and I hope you love it too! Stay odd &lt;3&lt;/p&gt;&lt;/blockquote&gt;
+&lt;p&gt;&lt;b&gt;Some news–Due to COVID related shipping delays, Oddball’s release date has been moved from Nov 30th to Dec 7th. Unfortunately we couldn’t do anything to prevent or change the delay and we’re so sorry to make you wait a bit more! &lt;/b&gt;&lt;br/&gt;&lt;/p&gt;</description><link>https://sarahcandersen.com/post/666054085676580864</link><guid>https://sarahcandersen.com/post/666054085676580864</guid><pubDate>Mon, 25 Oct 2021 14:51:14 -0700</pubDate></item><item><title>Photo</title><description>&lt;img src="https://64.media.tumblr.com/4227263407263420828f029f2bece80f/7da0fed164feb288-db/s500x750/4993577d0a19f6803ff3ad729a1c94fccf186658.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>https://sarahcandersen.com/post/665845171828752386</link><guid>https://sarahcandersen.com/post/665845171828752386</guid><pubDate>Sat, 23 Oct 2021 07:30:39 -0700</pubDate><category>LOL</category><category>comics</category><category>Sarah Andersen</category></item><item><title>Photo</title><description>&lt;img src="https://64.media.tumblr.com/e4c02786c261b18fc5717b1f3eb65c3b/0152dc5e9542aac6-71/s500x750/334734aaa3f7fb6747c7fecdf632697f12356006.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>https://sarahcandersen.com/post/665573374865653760</link><guid>https://sarahcandersen.com/post/665573374865653760</guid><pubDate>Wed, 20 Oct 2021 07:30:33 -0700</pubDate><category>LOL</category><category>comics</category><category>Sarah Andersen</category></item><item><title>Photo</title><description>&lt;img src="https://64.media.tumblr.com/fb381b4a37fb4f94345410aaff747f43/03fb586a2b063044-7f/s500x750/2fef538c45d7944da56c375dced620935940f0b0.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>https://sarahcandersen.com/post/665211014130892800</link><guid>https://sarahcandersen.com/post/665211014130892800</guid><pubDate>Sat, 16 Oct 2021 07:30:59 -0700</pubDate><category>LOL</category><category>comics</category><category>Sarah Andersen</category></item><item><title>sarahseeandersen:I am so excited to announce the debut of my new...</title><description>&lt;img src="https://64.media.tumblr.com/94a059bc73bc6dcbcccb57c7bd192cdb/97c38a65ecfc264c-8c/s500x750/7adb30be9b37e2caffecac7201b524263a487982.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://64.media.tumblr.com/484077f7b7f8aa7a72e313df02ac69e8/97c38a65ecfc264c-02/s500x750/db77ff0ab20c8b88784228524bbcc57c2ffa2196.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://64.media.tumblr.com/6fb01e388a6103789560d10e44a44033/97c38a65ecfc264c-0d/s500x750/09d59dc9391beafceb4fc32c19f820eaa3ab7ce6.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://64.media.tumblr.com/3c62846df58153054c61c1afffe72af7/97c38a65ecfc264c-9d/s500x750/99cd7b52ccfabc804c0a4be497afd9b9cc1d7396.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://64.media.tumblr.com/2a93eae54f18c46d004fc66c7073d5d7/97c38a65ecfc264c-6b/s500x750/fa6ce5a674e0817bf48d6bfc262ea80023478f2d.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;p&gt;&lt;a href="https://sarahcandersen.com/post/663133050091290624/i-am-so-excited-to-announce-the-debut-of-my-new" class="tumblr_blog"&gt;sarahseeandersen&lt;/a&gt;:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;I am so excited to announce the debut of my new series, Cryptid Club! Ever since I was a kid I’ve loved the mystery and lore surrounding these creatures and this was my chance to get to know them a bit better.&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Find the series all across the web!&lt;/p&gt;&lt;p&gt;&lt;a href="https://twitter.com/club_cryptid"&gt;Twitter&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://instagram.com/club.cryptid/"&gt;Instagram&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://facebook.com/clubcryptid"&gt;Facebook&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://tapas.io/series/club_cryptid"&gt;Tapastic&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://bit.ly/3u9vDLo"&gt;Webtoon&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://club-cryptid-by-sarah.tumblr.com/"&gt;Tumblr&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Updates every Tuesday and Thursday!&lt;/p&gt;&lt;/blockquote&gt;
+&lt;p&gt;&lt;b&gt;Reblog because I was able to fix the colors and I also made a T&lt;a href="https://club-cryptid-by-sarah.tumblr.com/"&gt;umblr &lt;/a&gt;for this series! Hope you guys are enjoying &lt;3&lt;/b&gt;&lt;/p&gt;</description><link>https://sarahcandersen.com/post/665149849392611328</link><guid>https://sarahcandersen.com/post/665149849392611328</guid><pubDate>Fri, 15 Oct 2021 15:18:47 -0700</pubDate></item><item><title>Photo</title><description>&lt;img src="https://64.media.tumblr.com/2b701c0eaa95f010d9db9d95acc3e8a1/8cc383102ffe2f0b-bd/s500x750/17f8d821fea802b8ab357658f199064821cf4ad8.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>https://sarahcandersen.com/post/664939216606773248</link><guid>https://sarahcandersen.com/post/664939216606773248</guid><pubDate>Wed, 13 Oct 2021 07:30:52 -0700</pubDate><category>LOL</category><category>comics</category><category>Sarah Andersen</category></item><item><title>Hi friends!I am so happy to announce that my latest book,...</title><description>&lt;img src="https://64.media.tumblr.com/34982ce20c73f012fa8dbb954842da05/8d01a0351822e92d-2d/s500x750/fc99e33e66e1a24ad6512e47683061a2c6578613.gifv"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://64.media.tumblr.com/9bb4bca3f63d9374c2667aad99fb04a3/8d01a0351822e92d-8c/s500x750/05e61b7dad4d52c52c69002f0099d2de35d33706.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://64.media.tumblr.com/b30605db8c139b172e1765f729ee2d22/8d01a0351822e92d-44/s500x750/4fecbe8ef2851549d9807f04a39270fb5fb806a7.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://64.media.tumblr.com/9ba01f2581c1abb5dc21050433456786/8d01a0351822e92d-0b/s500x750/da6e4bb3d50088a94a4c524ce5967c05f20cb2d3.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;p&gt;Hi friends!&lt;/p&gt;&lt;p&gt;I am so happy to announce that my latest book, “Oddball”, is out for preorder today. The official release date is November 30th. Check it out &lt;a href="https://publishing.andrewsmcmeel.com/book/oddball/"&gt;here&lt;/a&gt;!&lt;/p&gt;&lt;p&gt;This is the fourth Sarah’s Scribbles book, and with this collection I return to the original format of my first book, “Adulthood is a Myth”. That means that this book is made up entirely of short form comics. “Oddball” explores the strange; I worked with characters like Medusa, Dracula, and even biblically accurate angels to tell jokes in a new light within the Sarah’s Scribbles universe.&lt;/p&gt;&lt;p&gt;This book has 20 brand new, never before seen comics and is the first book to come with a sticker set which you can see above.&lt;/p&gt;&lt;p&gt;I love this book so much and I hope you love it too! Stay odd &lt;3&lt;/p&gt;</description><link>https://sarahcandersen.com/post/664112510998396928</link><guid>https://sarahcandersen.com/post/664112510998396928</guid><pubDate>Mon, 04 Oct 2021 04:30:44 -0700</pubDate></item><item><title>Photo</title><description>&lt;img src="https://64.media.tumblr.com/b8cd168658a9cfe1a19da03ba4503c9d/2ee8684584dccae6-c5/s500x750/68a2d59545337248000b4ea26a0a53a2c3aedb0e.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>https://sarahcandersen.com/post/663942638206124033</link><guid>https://sarahcandersen.com/post/663942638206124033</guid><pubDate>Sat, 02 Oct 2021 07:30:41 -0700</pubDate></item><item><title>Photo</title><description>&lt;img src="https://64.media.tumblr.com/d6f39deaf7bec19e59c7dd0b2d82dd3d/8550196deb68ac6b-4a/s500x750/230c3cbbeba6657a4b64818ea39653111f3aaa01.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>https://sarahcandersen.com/post/663670867382910977</link><guid>https://sarahcandersen.com/post/663670867382910977</guid><pubDate>Wed, 29 Sep 2021 07:31:00 -0700</pubDate><category>LOL</category><category>comics</category><category>Sarah Andersen</category></item><item><title>Photo</title><description>&lt;img src="https://64.media.tumblr.com/6f0782b49e3ce6dd143caaf973d053b8/1bfee32afa63186e-39/s500x750/1f4801f657c16fc958be2ab27e569e51456d30a6.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>https://sarahcandersen.com/post/663308476291907584</link><guid>https://sarahcandersen.com/post/663308476291907584</guid><pubDate>Sat, 25 Sep 2021 07:30:57 -0700</pubDate></item><item><title>I am so excited to announce the debut of my new series, Cryptid...</title><description>&lt;img src="https://64.media.tumblr.com/94a059bc73bc6dcbcccb57c7bd192cdb/97c38a65ecfc264c-8c/s500x750/7adb30be9b37e2caffecac7201b524263a487982.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://64.media.tumblr.com/484077f7b7f8aa7a72e313df02ac69e8/97c38a65ecfc264c-02/s500x750/db77ff0ab20c8b88784228524bbcc57c2ffa2196.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://64.media.tumblr.com/6fb01e388a6103789560d10e44a44033/97c38a65ecfc264c-0d/s500x750/09d59dc9391beafceb4fc32c19f820eaa3ab7ce6.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://64.media.tumblr.com/3c62846df58153054c61c1afffe72af7/97c38a65ecfc264c-9d/s500x750/99cd7b52ccfabc804c0a4be497afd9b9cc1d7396.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://64.media.tumblr.com/2a93eae54f18c46d004fc66c7073d5d7/97c38a65ecfc264c-6b/s500x750/fa6ce5a674e0817bf48d6bfc262ea80023478f2d.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;p&gt;I am so excited to announce the debut of my new series, Cryptid Club! Ever since I was a kid I’ve loved the mystery and lore surrounding these creatures and this was my chance to get to know them a bit better.&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Find the series all across the web!&lt;/p&gt;&lt;p&gt;&lt;a href="https://twitter.com/club_cryptid"&gt;Twitter&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://instagram.com/club.cryptid/"&gt;Instagram&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://facebook.com/clubcryptid"&gt;Facebook&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://tapas.io/series/club_cryptid"&gt;Tapastic&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://bit.ly/3u9vDLo"&gt;Webtoon&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://club-cryptid-by-sarah.tumblr.com/"&gt;Tumblr&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Updates every Tuesday and Thursday!&lt;/p&gt;</description><link>https://sarahcandersen.com/post/663133050091290624</link><guid>https://sarahcandersen.com/post/663133050091290624</guid><pubDate>Thu, 23 Sep 2021 09:02:38 -0700</pubDate></item><item><title>Photo</title><description>&lt;img src="https://64.media.tumblr.com/49542cbefb2b0c59fad50d235f5b45c3/e03df912a585c223-96/s500x750/54d198f317229bf527bd8a93d73f5641d3f51bbc.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>https://sarahcandersen.com/post/663025324118900736</link><guid>https://sarahcandersen.com/post/663025324118900736</guid><pubDate>Wed, 22 Sep 2021 04:30:22 -0700</pubDate><category>LOL</category><category>comics</category><category>sarah andersen</category></item><item><title>Photo</title><description>&lt;img src="https://64.media.tumblr.com/eea6e6518c88da2fa256c513ad6e61e8/5bb47bef7cf90de7-cc/s500x750/d4fc00e2fcd9a1eef66bd33dd7a61377f936024a.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>https://sarahcandersen.com/post/662662952386805760</link><guid>https://sarahcandersen.com/post/662662952386805760</guid><pubDate>Sat, 18 Sep 2021 04:30:38 -0700</pubDate></item><item><title>2022 wall calendar is out today! I’m really happy with the...</title><description>&lt;img src="https://64.media.tumblr.com/ed27280216e3427b5ab83642c7b92fb1/d1b35439130a764b-aa/s500x750/99ea435622fc7951209665abdbd85492a4e9e064.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://64.media.tumblr.com/9dd826dcb2a5bdcc57f34b1a16758634/d1b35439130a764b-a5/s500x750/276ed3001f32a6b5dd46a4334e37e1c7d4b09a73.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://64.media.tumblr.com/b9d276b8b1504371059606ea76c6e128/d1b35439130a764b-d2/s500x750/2cd955e2b44bbb60edd18a738568daabc56e033d.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://64.media.tumblr.com/256867f4f80cbe30be593f7aef8484ea/d1b35439130a764b-b6/s500x750/d3a46afe5744f7f7795cb1b280369f8ad8f6fdbb.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;p&gt;2022 wall calendar is out today! I’m really happy with the illustrations I made for it and also it comes with stickers. Check it out &lt;a href="https://bit.ly/2VyPlTm"&gt;here&lt;/a&gt;.&lt;br/&gt;&lt;/p&gt;</description><link>https://sarahcandersen.com/post/656703855081455616</link><guid>https://sarahcandersen.com/post/656703855081455616</guid><pubDate>Wed, 14 Jul 2021 09:53:20 -0700</pubDate></item><item><title>FANGS got nominated for an Eisner Award! To say I’m...</title><description>&lt;img src="https://64.media.tumblr.com/e982daffe4cbf486d25b406b72c72c00/f3bb149be8d33eb9-6c/s500x750/cd1fc5b182bcae5357cacce07867745de6fdf291.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;FANGS got nominated for an Eisner Award! To say I’m floored by this is an understatement…I may have shed a tear or two. Thank you so much and congrats to the other nominees!&lt;/p&gt;&lt;p&gt;Check out the full announcement &lt;a href="https://www.comic-con.org/2021-eisner-awards-nominations"&gt;here&lt;/a&gt;. &lt;br/&gt;&lt;/p&gt;</description><link>https://sarahcandersen.com/post/653534637361070080</link><guid>https://sarahcandersen.com/post/653534637361070080</guid><pubDate>Wed, 09 Jun 2021 10:19:58 -0700</pubDate></item><item><title>Hey friends! Wanted to pop in here and let you know that this...</title><description>&lt;img src="https://64.media.tumblr.com/09f36b3d6d020d01d5eddbeff25d0259/7367f4d913ff289a-73/s500x750/bcef8f7b0441400cbf4341a46fd24e600ebbd19b.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://64.media.tumblr.com/6eb7277aade225493b3d248bc477fe59/7367f4d913ff289a-34/s500x750/8b1b54fd0db1dc0148b01b16f050128c14c3eba1.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://64.media.tumblr.com/c430ad71697ce9cd7c93af58f11e33c2/7367f4d913ff289a-ec/s500x750/0101346091963fc6a50d8111cdf60d67924d3e6e.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;p&gt;Hey friends! Wanted to pop in here and let you know that this years calendars are now up for preorder. You can check them &lt;a href="https://publishing.andrewsmcmeel.com/sarahs-scribbles-calendars/"&gt;out&lt;/a&gt; &lt;br/&gt;&lt;/p&gt;</description><link>https://sarahcandersen.com/post/648554781524328448</link><guid>https://sarahcandersen.com/post/648554781524328448</guid><pubDate>Thu, 15 Apr 2021 11:07:17 -0700</pubDate></item></channel></rss>
diff --git a/test/test.py b/test/test.py
index 5d7d521..646721e 100755
--- a/test/test.py
+++ b/test/test.py
@@ -192,6 +192,33 @@ def webserver_for_test_fetch(queue, num_requests, wait_time):
     finally:
         httpd.server_close()
 
+def webserver_for_test_user_agent(queue):
+    class AgentDumper(NoLogHandler):
+        def do_GET(self):
+            queue.put(self.headers["User-Agent"])
+            super().do_GET()
+
+    httpd = http.server.HTTPServer(('', 0), AgentDumper)
+    try:
+        port = httpd.server_address[1]
+        queue.put(port)
+        httpd.handle_request()
+    finally:
+        httpd.server_close()
+
+def webserver_for_test_if_fetch(queue, timeout):
+    """Spawn a webserver for `timeout` seconds"""
+    httpd = http.server.HTTPServer(('', 0), NoLogHandler)
+    httpd.timeout = timeout
+    try:
+        port = httpd.server_address[1]
+        queue.put(port)
+
+        httpd.handle_request()
+        queue.put("done")
+    finally:
+        httpd.server_close()
+
 class TestFetch(unittest.TestCase):
     "Retrieving feeds from servers"
     def test_delay(self):
@@ -219,6 +246,38 @@ class TestFetch(unittest.TestCase):
         if result == "too fast":
             raise Exception("r2e did not delay long enough!")
 
+    def test_http_user_agent_config(self):
+        http_user_agent = 'my-test-agent'
+        http_user_agent_cfg = """[DEFAULT]
+        to = example@example.com
+        user-agent = {}
+        """.format(http_user_agent)
+
+        queue = multiprocessing.Queue()
+        webserver_proc = multiprocessing.Process(target=webserver_for_test_user_agent, args=(queue,))
+        webserver_proc.start()
+        port = queue.get()
+
+        with ExecContext(http_user_agent_cfg) as ctx:
+            ctx.call("add", 'test', 'http://127.0.0.1:{port}/dummy'.format(port = port))
+            ctx.call("run", "--no-send")
+        self.assertEqual(queue.get(), http_user_agent)
+
+    def test_default_http_user_agent(self):
+        http_default_agent_cfg = """[DEFAULT]
+        to = example@example.com
+        """
+
+        queue = multiprocessing.Queue()
+        webserver_proc = multiprocessing.Process(target=webserver_for_test_user_agent, args=(queue,))
+        webserver_proc.start()
+        port = queue.get()
+
+        with ExecContext(http_default_agent_cfg) as ctx:
+            ctx.call("add", 'test', 'http://127.0.0.1:{port}/dummy'.format(port = port))
+            ctx.call("run", "--no-send")
+        self.assertIn('rss2email/', queue.get(), "rss2email should identify itself as the User-Agent by default")
+
     def test_fetch_parallel(self):
         if not UNIX:
             self.skipTest("No locking on Windows.")
@@ -269,6 +328,28 @@ class TestFetch(unittest.TestCase):
                     previous_line = line
             self.assertTrue(finish_precedes_acquire)
 
+    def test_only_new(self):
+        "Add and fetch contents"
+
+        standard_cfg = """[DEFAULT]
+        to = example@example.com"""
+
+        queue = multiprocessing.Queue()
+        webserver_proc = multiprocessing.Process(target=webserver_for_test_if_fetch, args=(queue, 10))
+        webserver_proc.start()
+        port = queue.get()
+
+        with ExecContext(standard_cfg) as ctx:
+            ctx.call("add", '--only-new', 'test', 'http://127.0.0.1:{port}/disqus/feed.rss'.format(port = port))
+            # check if data is written
+            self.assertTrue(_os.path.exists(ctx.data_path))
+            with ctx.data_path.open('r') as f:
+                content = json.load(f)
+                # check if entries in seen
+                self.assertIn("seen", content["feeds"][0])
+        self.assertEqual(queue.get(), "done")
+
+
 def webserver_for_test_send(queue):
     httpd = http.server.HTTPServer(('', 0), NoLogHandler)
     try:

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/lib/python3/dist-packages/rss2email-3.14.egg-info/PKG-INFO
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/rss2email-3.14.egg-info/dependency_links.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/rss2email-3.14.egg-info/requires.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/rss2email-3.14.egg-info/top_level.txt

Files in first set of .debs but not in second

-rw-r--r--  root/root   /usr/lib/python3/dist-packages/rss2email-3.13.1.egg-info/PKG-INFO
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/rss2email-3.13.1.egg-info/dependency_links.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/rss2email-3.13.1.egg-info/requires.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/rss2email-3.13.1.egg-info/top_level.txt

No differences were encountered in the control files

More details

Full run details