Version 2.71 Release plus Other Major Updates

Good news everyone! Two important tools that rss2email depends on have recently received major upgrades: feedparser and html2text. These should improve rss2email’s ability to handle feeds with poorly formed HTML and other weirdness.

The rss2email application itself also needed to be upgraded some to support these. Changes in this version:

  • Upgraded to feedparser v5.01! (
  • Upgraded to html2text v3.01! (
  • Potentially safer method for writing feeds.dat on UNIX
  • Handle via links with no title attribute
  • Handle attributes more cleanly with OVERRIDE_EMAIL and DEFAULT_EMAIL
You can leave a response, or trackback from your own site.

70 Responses to “Version 2.71 Release plus Other Major Updates”

  1. Mehmedov says:

    === rss2email encountered a problem with this feed ===
    === See the rss2email FAQ at for assistance ===
    === If this occurs repeatedly, send this to ===
    E: could not parse
    Traceback (most recent call last):
    File “/usr/share/rss2email/”, line 683, in run
    name = h2t.unescape(getName(r, entry))
    File “/usr/share/rss2email/”, line 416, in getName
    if hasattr(r, “url”) and r.url in OVERRIDE_FROM.keys():
    AttributeError: ‘set’ object has no attribute ‘keys’
    rss2email 2.70
    feedparser 5.0.1
    html2text 3.02
    Python 2.7.1 (r271:86832, Apr 12 2011, 16:15:16)
    [GCC 4.6.0 20110331 (Red Hat 4.6.0-2)]
    === END HERE ===

  2. Mehmedov: try the most recent version and let me know if that doesn’t fix the problem

  3. George Yong says:


    Great program, I’ve been using it for as long as I can remember.
    I recently started getting this error, with my feeds.dat at about 13MB:

    Traceback (most recent call last):
    File “”, line 911, in
    else: run()
    File “”, line 544, in run
    feeds, feedfileObject = load()
    File “”, line 487, in load
    feeds = pickle.load(feedfileObject)

    From what I can find online (, its due to a problem with my feeds.dat, but I have no clue what to do.

    It’s the same with the debian version (1:2.65-1) and 2.71 from here.

    Can you help?

  4. George,

    Hmm. That’s really big for a feeds.dat file. I have around 200 feeds in mine and the .dat file is only around 2MB. The biggest I’ve seen mine is around 8MB.

    If feeds.dat somehow gets corrupted it can be possible to repair in a text editor though.

    In any case, do you have a backup of feeds.dat or an OPML export of your feeds list?

  5. George Yong says:

    Hi Lindsey,

    Thanks for the quick reply!

    At last count there were 304 items on my feeds list.

    I have an old copy of feeds.dat from December 1 that’s about 8MB, and an opml export from just before then. I should also be able to rebuild my feeds list from a cached web page when I last ran r2eui.

  6. George Yong says:

    How would I go about repairing feeds.dat with a text editor?

  7. Viqsi says:

    Today I discovered to my slight horror that while rss2email does just fine with authenticated feeds (“”), it’ll also happily include the authentication credentials in the emails it generates (particularly in the extra headers) – and if you run updates via an unattended cron job, there’s a good chance that if something goes wrong with those feeds, printed warnings will also get emailed to you with that same information. Which is just *wonderful* if you’re, say, picking up email via unsecured pop3 and you’re the paranoid type…

    So I’ve changed a password or two ;) and implemented a quick-and-dirty patch. See:

    (This would be my first time ever actually making any change to anything Python-related, incidentally. Daddy raised me on Perl, so this is an alien and frightening experience for me. “Unexpected indent? What kind of warning is that?” ;) )

    Hope this helps! :D

  8. RazielTD says:

    How is it possible to set a list of email addreses to a single feed??


  9. Raziel: rss2email itself doesn’t support sending entries from RSS feeds to multiple email addresses. But you could setup an email alias or email list and have rss2email use that address. Should accomplish the same thing.

  10. local SEO says:

    People at the RSS shouldn’t stop improving RSS feeds, because this is widely use, specially for people who are always busy and are on “On the go”. RSS is a great tool or enhancement to still keep update and track to what’s happening to their favorite website’s and blog, you can always look at it as your favorite TV show being recorded and having not to miss each and every inch of it. This is a great new for those rss feeders like me.

  11. Gilles Mazoyer says:


    I’d like to suggest you an improvement in the function getName of
    Instead of relying on r to have attribut url, i think it would be better to pass to get name the feed URL.
    That way the use of OVERRIDE_FROM would be much predictable.

    Otherwise very useful program. Congratulations !

  12. Hi,

    I’m using procmail for filtering my mails. Thus I need to call procmail directly from rss2email. But this isn’t possible right now, because /usr/bin/sendmail is hard coded. I wrote a small patch to fix this. Would be great to see the patch or something similar in the next release:

    — 2012-09-20 11:20:44.330030159 +0200
    +++ 2012-09-20 11:30:34.393903241 +0200
    @@ -72,6 +72,9 @@
    # 0: Call /usr/sbin/sendmail to send mail.
    SMTP_SEND = 0

    +SENDMAIL_BIN = ‘/usr/bin/procmail’
    +SENDMAIL_ARGS = [ '-m', '/path/to/procmail-file/.procmail-rssfeeds' ]
    SMTP_SERVER = “″
    AUTHREQUIRED = 0 # if you need to use SMTP AUTH set to 1
    SMTP_USER = ‘username’ # for SMTP AUTH, set SMTP username here
    @@ -217,7 +220,10 @@

    - p = subprocess.Popen(["/usr/sbin/sendmail", recipient], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    + sendmailcmd = [ SENDMAIL_BIN ]
    + sendmailcmd.extend(SENDMAIL_ARGS)
    + sendmailcmd.extend(recipient)
    + p = subprocess.Popen(sendmailcmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    status = p.returncode
    assert status != None, “just a sanity check”

  13. Bernie says:

    I’m having trouble with 2.71 on unix. the tar file doesn’t have any file mode information:
    l$ tar tvf rss2email-2.71.tar
    d——— lsmith/None 0 2011-03-04 12:40:21 rss2email-2.71/
    ———- lsmith/None 7300 2011-03-04 12:11:18 rss2email-2.71/CHANGELOG
    ———- lsmith/None 3267 2010-11-12 13:34:38 rss2email-2.71/
    ———- lsmith/None 168065 2011-02-20 17:41:24 rss2email-2.71/
    ———- lsmith/None 14847 2011-02-17 16:42:29 rss2email-2.71/
    ———- lsmith/None 43 2006-03-16 18:43:04 rss2email-2.71/r2e
    ———- lsmith/None 58 2006-03-16 18:43:04 rss2email-2.71/r2e.bat
    ———- lsmith/None 7208 2009-12-21 17:04:16 rss2email-2.71/readme.html
    ———- lsmith/None 31352 2011-03-04 11:51:22 rss2email-2.71/

    I’m not sure what to do. the 2.66 tar did have normal file permissions. Should I just brute-force chmod he 2.71 files to match the permissions on the corresponding 2.66 ones?

  14. Sean Ackley says:

    Wow, what a great tool. It worked the first time right out of the gate. Do you have any plans for a daily digest option as well? It would be awesome to have it only mail all the changes once a day.

    I would run it ever hour for instance and collect all the changes, and then mail a single e-mail in the morning for instance.


  15. Maxim says:

    Thanks for the tool, very handy (especially with feedmyinbox turned down). One question I had was – can I consolidate all new entries in a single email per rss feed? This is how feedmyinbox did it – all new entries from single rss feed would be collected and sent as single email. I did not find such option.

  16. Jim says:

    Tried installing on a Mac. First surprise was that it required python3. So I used homebrew to install python3. Using pip3 to install rss2email apparently worked fine but when I invoke r2e I get:

    Traceback (most recent call last):
    File “/usr/local/share/python3/r2e”, line 3, in
    import rss2email.main
    File “/usr/local/lib/python3.3/site-packages/rss2email/”, line 27, in
    from . import command as _command
    File “/usr/local/lib/python3.3/site-packages/rss2email/”, line 25, in
    from . import error as _error
    ImportError: cannot import name error

    I’ve spent 20 minutes tweaking my PYTHONPATH but that doesn’t seem to make a difference.

  17. No, Python 2.x (specifically 2.5 or higher I believe) is required. Python 3 is not supported in this version.

    A fork of rss2email at does support Python 3 though.

  18. Trevor King says:

    Jim, it looks like you are using my branch of rss2email, but you haven’t installed one of the dependencies (feedparser and html2text). You should get a message explaining that importing rss2email.error failed because one of these packages is missing, but due to some regressions in Python3.3 [1,2], you don’t. Both bugs have been fixed and will land in Python3.4.

    Linsey, “fork” is such a strong word ;). I though I was just continuing development where you left off, due to lack of time. Do you plan to resume development without incorporating work from my 3.x line? There has been some interest in maintaining a `2.x` branch that avoids the Python3 dependency, if that’s appealing to you…


  19. Trevor: it’s unlikely at this point that I’d do new feature development in the 2.x line. Bug fixes are reasonable so there’s an alternative for Python 2.

    And I mean forking in the best possible sense. :)

  20. Jack Barron says:

    I was having a lot of issues with malformed html and was happy to see the introduction of these libraries.

Leave a Reply