Skip to content

Message Cat: an MUA tool to migrate emails between IMAP servers and manage emails using rules written in Ruby DSL.

Notifications You must be signed in to change notification settings

mh61503891/message-cat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Message Cat

Message Cat: an MUA tool to migrate emails between IMAP servers and manage emails using filters written in Ruby DSL.

Usage

E-mails migration between IMAP servers

Directory structure:

  • Gemfile
  • .sekrets.key
  • config.yml.enc
  • migration.yml
  • migration.rb

1. Setup Gemfile and install gems

$ gem install bundler
$ bundle init

Gemfile:

source 'https://rubygems.org'
gem 'message-cat', git: 'https://github.com/mh61503891/message-cat'
gem 'sekrets'
gem 'activesupport'

Install gems

$ bundle install

2. Create your config

Create the config file for IMAP servers:

$ echo 'master-password' > .sekrets.key
$ bundle exec sekrets edit config.yml.enc

config.yml.enc:

servers:
  src:
    user: example
    password: example
  dst:
    user: example
    password: example
  }
}

migration.yml:

servers:
  src:
    host: example.net
    separator: .
  dst:
    host: example.com
    separator: .
mailboxes:
  - example.project_a
  - example.project_b
  - example.project_c

3. Write your scripts

migration.rb:

require 'sekrets'
require 'yaml'
require 'active_support/core_ext/hash/keys'
require 'active_support/core_ext/hash/deep_merge'
require 'message-cat/migration'
# Load secret config
secret_config = Sekrets.settings_for('config.yml.enc').deep_symbolize_keys
# Load non-secret config
migration_config = YAML.load(File.read('migration.yml')).deep_symbolize_keys
# Merge configs
config = migration_config.deep_merge(secret_config)
# Run migration
MessageCat::Migration.run(config)

4. Run your scripts

$ bundle exec ruby migration.rb
10000 migrate(example.project_a) Example message
10001 migrate(example.project_b) Example message
10002 migrate(example.project_c) Example message
...

Use filters to manage e-mails

Directory structure:

  • Gemfile
  • .sekrets.key
  • config.yml.enc
  • filters.yml
  • filters.rb
  • filters/
    • example_filter_1.rb
    • example_filter_2.rb
    • example_filter_3.rb
    • ...
  • database.sqlite3

1. Setup Gemfile and install gems

$ gem install bundler
$ bundle init

Gemfile:

source 'https://rubygems.org'
gem 'message-cat', git: 'https://github.com/mh61503891/message-cat'
gem 'sekrets'
gem 'activesupport'

Install gems

$ bundle install

2. Create your config

Create the config file for IMAP servers:

$ echo 'master-password' > .sekrets.key
$ bundle exec sekrets edit config.yml.enc

config.yml.enc:

server:
  user: example
  password: example

filters.yml:

server:
  host: example.net
  separator: .
mailboxes:
  - Inbox
filters_paths:
  - ./filters
database_path: ./database.sqlite3

3. Write your scripts

filters.rb:

require 'sekrets'
require 'yaml'
require 'active_support/core_ext/hash/keys'
require 'active_support/core_ext/hash/deep_merge'
require 'message-cat/filters'
# Load secret config
secret_config = Sekrets.settings_for('config.yml.enc').deep_symbolize_keys
# Load non-secret config
filters_config = YAML.load(File.read('filters.yml')).deep_symbolize_keys
# Merge configs
config = filters_config.deep_merge(secret_config)
# Run filters
MessageCat::Filters.run(config)

4. Add filters

filters/example_filter_1.rb:

pattern('notification.example_net') {
  from_addrs '[email protected]'
}

pattern('notification.example_com') {
  from_addrs '[email protected]'
}

pattern('example') {
  from_addrs [
    '[email protected]',
    /@(.*)example\.com$/,
  ]
  subject /^Example/
  message {
    from_addrs.size == 1
    to_addrs.size > 1
  }
}

rule {
  patterns [
    'notification.example_net',
    'notification.example_com',
  ]
  actions {
    move 'notification'
  }
}

rule {
  patterns 'example'
  actions {
    move 'example'
  }
}

5. Run your scripts

$ bundle exec ruby filters.rb
10000 move(notification.example_net) Notify message
10001 move(notification.example_com) Notify message
10002 move(example) Example message
...

Todo

MessageCat::Filters:

  • Filter DSL API
    • pattern
      • from_addrs(patterns)
      • to_addrs(patterns)
      • cc_addrs(patterns)
      • subject(patterns)
      • message(&block)
        • from_addrs
        • to_addrs
        • cc_addrs
        • subject
    • rule/patterns
    • rule/actions
      • move(mailbox)
      • pass
      • none
  • Support the database of emails for cacheing
  • Support encryption of the database

References

License

The gem is available as open source under the terms of the MIT License.

Author

Masayuki Higashino

About

Message Cat: an MUA tool to migrate emails between IMAP servers and manage emails using rules written in Ruby DSL.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages