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

 
 
 

Languages