Post

Auto Send RSS Feed Updates to Your Inbox with rss2email

Auto Send RSS Feed Updates to Your Inbox with rss2email

I follow a lot of tech blogs and YouTube channels, and I used to subscribe to them all via email. This was convenient, but not all blogs offer email subscription (such as bootlin.com), and some people don’t want to submit their email addresses for privacy reasons.

Most blogs offer RSS or Atom feeds, which allow you to subscribe without giving out your email address. However, you still need a feed aggregator to scan for updates. A good option is to use the rss2email utility, which can deliver all of your blog/Youtube channel updates directly to your inbox. You can even set up rss2email to run as a system daemon, so it will automatically scan for updates at regular intervals.

This post will show you how to install, configure, and run rss2email as a system daemon on Ubuntu. This will allow rss2email to scan for feed updates at regular intervals and deliver them to your inbox.

Installing rss2email

To install rss2email utility on Debain/Ubuntu based systems, run the following command

1
sudo apt update && sudo apt install rss2email sendmail

From this point onwards, we will be running commands as the root user. Otherwise, we may encounter problems when configuring rss2email as a daemon later on.

1
sudo su -

Add recipient e-mail address

This is the e-mail address that will receive all the feed updates from rss2email utility. This step is one time configuration.

1
r2e new <recipient_mail_id> 

Configuring the rss2email

Edit the configuration file $HOME/.config/rss2email.cfg as follows.

1
vi $HOME/.config/rss2email.cfg

In the from field, I use my Gmail address as the sender_mail_id. This is different from the recipient_mail_id mentioned above. Therefore, when there is a blog update, you will receive an email to the recipient_mail_id that appears to have come from the sender_mail_id

1
2
3
from = <sender_email_id>
force-form = True
to = <recipient_mail_id>

Configuring SMTP settings to send the email through rss2email

Let’s use ssmtp utility to configure SMTP settings on Ubuntu. First, let’s install the sstmp.

1
sudo apt install ssmtp

Edit the ssmtp configuration file /etc/ssmtp/ssmtp.conf according to your email provider’s SMTP settings. As I have been using Gmail as my sender_mail_id, the configuration looks like the following:

1
2
3
4
5
6
root=<your_gmail_id>
mailhub=smtp.gmail.com:587
AuthUser=<your_gmail_id>
AuthPass=<gmail_pass or app_pass>
UseTLS=YES
UseSTARTTLS=YES

If you have two-factor authentication (2FA) enabled for your Gmail account, you may need to create an app password to use with rss2email.

Using the rss2email

Let’s learn how to add a blog feed to rss2email, so it can scan for new blog posts and send you updates in your email.

You can find RSS/Atom feed URL of any blog/YouTube using this guide. Once you get the URL of the feed, use the following command to add it to rss2email.

1
r2e add <feedName> <feedURL>

Give the feedName a value such as name of the blog. An example is give below.

1
r2e add NayabSDBlog https://www.nayab.dev/feed.xml

You can add as many feeds as you like using the same command.

Scan for new blog posts

Once you are satisfied with the number of feeds you have added, you can start sending all feed updates to your inbox by running the following command:

1
r2e run

Beware that if the feed has many posts, you may receive a lot of emails.

If your RSS feed has a lot of posts, and you don’t want to receive all of them in your inbox, run the following command. This command only needs to be run once per addition of blog feeds. And any subsequent blog/YouTube updates, you will get by running above command.

1
r2e run --no-send # Just scans but won't send e-mails.

Create a systemd timer for automatic periodic updates

We can use systemd timers to get periodic updates from the rss2email daemon service. To do this, we first need to create a systemd service file that the systemd timer can use.

1
2
3
4
5
6
7
8
9
10
11
cat << EOF >> /lib/systemd/system/rss2email.service
[Unit]
Description=Fetches RSS feeds and send them to email
Wants=rss2email.timer

[Service]
ExecStart=/usr/bin/r2e run

[Install]
WantedBy=multi-user.target
EOF

Enable the rss2email service with the below command. This step is optional as we invoke this service anyways with the systemd timers.

1
systemctl enable rss2email.service

This creates a symbolic link /etc/systemd/system/multi-user.target.wants/rss2email.service that points to the target file in /lib/systemd/system/rss2email.service. This ensures that the service will be started when the system boots.

Now, let’s write a rss2email.timer file.

1
2
3
4
5
6
7
8
9
10
11
12
cat << EOF >> /lib/systemd/system/rss2email.timer
[Unit]
Description=calling rss2email peridically
Requires=rss2email.service

[Timer]
Unit=rss2email.service
OnCalendar=*-*-* 00/6:00:00

[Install]
WantedBy=timers.target
EOF

Start and enable the timer with the following commands. Enabling timer will start the service when the system boots.

1
2
systemctl start rss2email.timer
systemctl enable rss2email.timer

The above rss2email.timer invokes the rss2email.service for every 6 hours. You can see that from the line OnCalendar=*-*-* 00/6:00:00

Once the timer triggers the rss2email service, all the blog and YouTube channel updates that you have enrolled with rss2email will be automatically sent to your inbox.

You can read more about systemd timer here

Commands for troubleshooting

Checking the service/timer status

1
2
systemctl status rss2email.service
systemctl status rss2email.timer

Checking the service/timer logs

1
2
journalctl -u rss2email.service
journalctl -u rss2email.timer

You can read more about journalctl here

Commands to start and stop the services

1
2
3
4
5
6
7
# For rss2email.service
systemctl start rss2email.service
systemctl stop rss2email.service

# For rss2email.timer
systemctl start rss2email.timer
systemctl stop rss2email.timer

Example logs of rss2email.service

1
2
3
4
5
6
7
8
9
10
11
12
Aug 15 05:39:39 dosing r2e[9960]: 2023-08-15 05:39:39,720 [INFO] fetch NayabSDBlog (https://www.nayab.dev/feed.xml -> basha@nayab.dev)
Aug 15 05:39:39 dosing r2e[9960]: 2023-08-15 05:39:39,766 [INFO] process NayabSDBlog (https://www.nayab.dev/feed.xml -> basha@nayab.dev)
Aug 15 05:39:39 dosing r2e[9960]: 2023-08-15 05:39:39,769 [INFO] send message for NayabSDBlog (https://www.nayab.dev/feed.xml -> basha@nayab.dev)
Aug 15 05:39:39 dosing sSMTP[9964]: Creating SSL connection to host
Aug 15 05:39:40 dosing sSMTP[9964]: SSL connection using ECDHE_RSA_AES_256_GCM_SHA384
Aug 15 05:39:42 dosing sSMTP[9964]: Sent mail for root@dosing (221 2.0.0 closing connection p21-20020aa78615000000b00687260020b1sm8792938pfn.72 - gsmtp) uid=0 username=root outbytes=1450
Aug 15 05:39:42 dosing r2e[9960]: 2023-08-15 05:39:42,880 [INFO] send message for NayabSDBlog (https://www.nayab.dev/feed.xml -> basha@nayab.dev)
Aug 15 05:39:42 dosing sSMTP[9969]: Creating SSL connection to host
Aug 15 05:39:43 dosing sSMTP[9969]: SSL connection using ECDHE_RSA_AES_256_GCM_SHA384
Aug 15 05:39:45 dosing sSMTP[9969]: Sent mail for root@dosing (221 2.0.0 closing connection k17-20020aa78211000000b0063b898b3502sm8800095pfi.153 - gsmtp) uid=0 username=root outbytes=1298
Aug 15 05:39:45 dosing r2e[9960]: 2023-08-15 05:39:45,891 [INFO] send message for NayabSDBlog (https://www.nayab.dev/feed.xml -> basha@nayab.dev)
Aug 15 05:39:45 dosing sSMTP[9970]: Creating SSL connection to host

Running rss2email on Ubuntu server

There are several benefits to running rss2email on a cloud server. First, it is more scalable. If you want to subscribe to a large number of RSS feeds, or if you want to have rss2email scan for updates more frequently, a cloud server will be able to handle the load. Second, it is more reliable. A cloud server is less likely to experience outages than a personal computer.

If you are looking to register for a cloud provider, Digitalocean is great option. You get $200 credit over 60 days period.

References

https://www.linuxbabe.com/ubuntu/install-use-rss2email-ubuntu-18-04 https://www.freedesktop.org/software/systemd/man/systemd.time.html https://unix.stackexchange.com/questions/126786/systemd-timer-every-15-minutes https://silentlad.com/systemd-timers-oncalendar-(cron)-format-explained

This post is licensed under CC BY 4.0 by the author.