emailing journal entries to Day One
Svbtle archive outdated
☆: Friday, February 14, 2014. ∆: Saturday, November 23, 2019. Belief: n/a.

Note: This journal entry was posted in 2014 and is kept for historical reference only.

Day One is arguably one of the most clean and well developed journaling applications on the Mac platform. It plays nice with iOS, Apple’s natural complement to Mac, but everything else is dead in the water. So I wrote ETD, a script that imports emails and turns them into Day One entries.

You probably don’t want to use this anymore, now that Day One 2.0 has IFTTT integration. Here’s a recipe for you instead.

The premise is fairly simple: email an address you specify with an image attached and your entry. The result will be converted into a Day One entry.

This is how you set it up.

Grab the script

Let’s start by grabbing the script. At this point, it would be helpful to install rvm if you haven’t already.

git clone
cd email-to-DayOne
rvm install '2.0'
rvm use '2.0'
bundle install
cp config.yaml.example config.yaml

Configure the script

Next, you’ll want to edit config.yaml to point to your email information. Assuming you have your own server, you’ll use your own configuration details here. This example uses GMail:

imap_server: ''
imap_username: ''
imap_password: 'password'
imap_port: 993
use_ssl: true
folder: 'journal'
images_folder: 'images/'
processing_count: 100

In the same folder as the app.rb file, make a folder called images. Fill in the rest of the details above to match your GMail account.

Configure GMail

Turn on IMAP in settings. I have settings that will allow my entries to be archived, but with no label. Changing the expunge settings will either allow you to either trash or permanently delete the message, depending on your preference.

GMail settings

Next, head over to filter settings and create the parameters for your journal entries. In my case, I search for mail only from my address, and of that mail, only messages with the subject “Journal.” This way, I can email myself and only I can add entries, as well as keep those entries out of my inbox.

GMail filters

Dry run

Let’s do a dry run.

cd email-to-DayOne
ruby app.rb

If all goes well, you should see a success message.

Up to 100 emails have been imported into Day One as journal entries.


At this point, you might want to schedule your imports. You can manually run the script at any time – this will have no effect on the chronology of your journal entries, but will save you the hassle of having to open the Terminal every time you want to do anything.

You’ll need a shell script. The following is for Zsh:


. /path/to/your/home/folder/.zlogin
cd /path/to/your/email-to-DayOne/
ruby app.rb

The following should work for Bash:


. /path/to/your/home/folder/.bash_login
cd /path/to/your/email-to-DayOne/
ruby app.rb

Save your shell script somewhere. At this point, you can diverge and, for free, setup a plist file that will automatically schedule it to run for you. I chose not to, and went with Lingon 3. It’s $5, and it simplifies this process greatly. Install it, and create a new job.

Call it “import_to_dayone” and point it to your shell script. The “when” is your choice. I choose at logon and every minute.


Open a terminal, and, for the last time, find your shell script. Make it executable.

chmod +x

Test it out

At this point, if you’ve been following along literally, you can launch a test by emailing yourself a new journal entry.

If the script isn’t working for you, report the issue and I’ll work on a fix. If you can improve the code, feel free to send a pull request back.

Does it work?

Most likely. I plan on maintaining this at least until Bloom releases an Android client for Day One.