dmail 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d5f2d2e3bb5cb137ca9438d21e36fcbfd19b7443
4
+ data.tar.gz: 6358fb1c7b1b9cf269c90f719ab95cac1c0c4104
5
+ SHA512:
6
+ metadata.gz: 3a2672eb406365b0edeeb3b0acca1f5075da987ff839c6e7ca51b8ee073a1efe44530eea50c9c894a442d41a7322c196b72922af56a46e9579c73f8cbd9dc8d4
7
+ data.tar.gz: a53e8a5c963fe80e0614fa9439c04c96d655189d79230c3fcbaef57defd08b6db315b474494f488aa3a5082bef0915e8d28ef60b686579728f00fb04699bde28
@@ -0,0 +1,52 @@
1
+ # dmail
2
+
3
+ Command-line email client.
4
+
5
+ ## Installation
6
+
7
+ $ gem install dmail
8
+
9
+ ## Setup
10
+
11
+ dmail reads settings firstly from ``.dmailrc.yaml`` and fallbacks to ``~/.dmailrc.yaml``.
12
+
13
+ Gmail setup:
14
+
15
+ ``` yaml
16
+ dmail:
17
+ reading:
18
+ method: imap
19
+ address: imap.gmail.com
20
+ port: 993
21
+ enable_ssl: true
22
+ user_name: me@gmail.com
23
+ password: myp4ssw0rd
24
+ ```
25
+
26
+ ## Usage
27
+
28
+ Listing emails:
29
+
30
+ ``` bash
31
+ $ dmail list
32
+ ```
33
+
34
+ Viewing emails:
35
+
36
+ ``` bash
37
+ $ dmail show CAC0GtHcR13bnhLju=DymZm0fr778LALHw3HwWUVXrM81c4Hc+Q@mail.gmail.com
38
+ ```
39
+
40
+ ## Contributing
41
+
42
+ You're encouraged to submit issues, PRs and weigh in your opinion anywhere. If you want to get started,
43
+ feel free to contact the authors either directly or through a new issue. We also love documentation so
44
+ feel free to extend this README.
45
+
46
+ ## License
47
+
48
+ MIT License. See LICENSE for details.
49
+
50
+ ## Copyright
51
+
52
+ Copyright (c) 2014 André Dieb Martins
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env rake
2
+
3
+ begin
4
+ require 'bundler/setup'
5
+ rescue LoadError
6
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
7
+ end
8
+
9
+ require 'bundler/gem_tasks'
10
+
11
+ require 'rspec/core'
12
+ require 'rspec/core/rake_task'
13
+
14
+ task default: :spec
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ unless $LOAD_PATH.include?(File.dirname(__FILE__) + '/../lib/')
4
+ $LOAD_PATH << File.dirname(__FILE__) + '/../lib'
5
+ end
6
+
7
+ require 'dmail/cli'
8
+
9
+ cli = Dmail::CLI.new
10
+ cli.run
@@ -0,0 +1,2 @@
1
+ module Dmail
2
+ end
@@ -0,0 +1,47 @@
1
+ require 'mail'
2
+ require 'yaml'
3
+
4
+ require File.join(File.dirname(__FILE__), 'impl')
5
+
6
+ module Dmail
7
+ class CLI
8
+ include Impl
9
+
10
+ def initialize
11
+ @action = ARGV.first.gsub('--', '')
12
+ @coloring = true
13
+ load_settings
14
+ end
15
+
16
+ def run
17
+ send(@action)
18
+ rescue NoMethodError
19
+ puts "dmail: '#{ARGV[0]}' is not a valid dmail command. See 'dmail help'."
20
+ end
21
+
22
+ private
23
+
24
+ def load_settings
25
+ preferences ||= if File.exists?('.dmailrc.yaml')
26
+ YAML.load(IO.read('.dmailrc.yaml'))
27
+ elsif File.exists?('~/.dmailrc.yaml')
28
+ YAML.load(IO.read('~/.dmailrc.yaml'))
29
+ else
30
+ fail('dmail: could not find .dmailrc.yaml here or on your home directory.')
31
+ end
32
+
33
+ retriever_preferences = preferences['dmail']['reading']
34
+
35
+ Mail.defaults do
36
+ retriever_method(
37
+ retriever_preferences['method'].to_sym,
38
+ address: retriever_preferences['address'],
39
+ port: retriever_preferences['port'],
40
+ user_name: retriever_preferences['user_name'],
41
+ password: retriever_preferences['password'],
42
+ enable_ssl: retriever_preferences['enable_ssl']
43
+ )
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,79 @@
1
+ require 'mail'
2
+
3
+ require File.join(File.dirname(__FILE__), 'utils')
4
+
5
+ module Dmail
6
+ module Impl
7
+ include Utils
8
+ include Term::ANSIColor
9
+
10
+ DOCS_PATH = File.join(File.dirname(__FILE__), '..', '..', 'doc')
11
+
12
+ def help
13
+ doc = ARGV[1].nil? ? 'main.txt' : "dmail-#{ARGV[1]}.txt"
14
+ puts IO.read(File.join(DOCS_PATH, doc))
15
+ end
16
+
17
+ def list
18
+ params = get_params(
19
+ :mailbox,
20
+ count: %w(-c --count),
21
+ unread: %w(-u --unread)
22
+ )
23
+ query = { read_only: true, order: :asc, what: :first }
24
+ query[:mailbox] = params[:mailbox] || 'INBOX'
25
+ query[:count] = params[:count].nil? ? 10 : params[:count].to_i
26
+ query[:keys] = 'UNSEEN' if params[:unread]
27
+
28
+ setup_pager!
29
+ Mail.find(query).each { |email| print_email_header(email) }
30
+ end
31
+
32
+ def show
33
+ params = get_params(
34
+ :mailbox,
35
+ leave_unread: %w(-m --leave-unread)
36
+ )
37
+ query = {}
38
+ query[:mailbox] = params[:mailbox] || 'INBOX'
39
+ query[:read_only] = true if params[:leave_unread]
40
+
41
+ message_id = ARGV[1]
42
+ if message_id then
43
+ query[:keys] = "HEADER Message-id #{message_id}"
44
+ else
45
+ query[:what] = :last
46
+ query[:count] = 1
47
+ end
48
+
49
+ setup_pager!
50
+ [Mail.find(query)].flatten.each do |email|
51
+ print_email_header(email)
52
+ puts
53
+ puts email.text_part.decoded.strip
54
+ puts
55
+ end
56
+ end
57
+
58
+ def status
59
+ params = get_params(:mailbox)
60
+ query = { keys: 'UNSEEN', read_only: true }
61
+ query[:mailbox] = params[:mailbox] || 'INBOX'
62
+ query[:count] = 1000 # Hack to read all unreads and not only 10
63
+ unseen = Mail.find(query).count
64
+ puts "Unread: #{unseen}"
65
+ end
66
+
67
+ private
68
+
69
+ def print_email_header(email)
70
+ puts yellow { "id #{email.message_id}" }
71
+ puts "From: #{email.from.first}"
72
+ puts "Date: #{email.date.rfc2822}"
73
+ puts "Message ID: #{email.message_id}" if @all
74
+ puts
75
+ puts " #{email.subject}"
76
+ puts
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,61 @@
1
+ require 'pager'
2
+ require 'term/ansicolor'
3
+
4
+ module Dmail
5
+ module Utils
6
+ include Pager
7
+
8
+ # I like this naming better :)
9
+ def setup_pager!
10
+ page
11
+ end
12
+
13
+ # Converts arguments() to a pretty-named hash. Considers naming
14
+ # substitutes when doing so.
15
+ def get_params(keys, mappings)
16
+ params = {}
17
+ [keys].flatten.each do |key|
18
+ value = arguments[key.to_s]
19
+ params[key] = value if value
20
+ end
21
+ mappings.each do |final_name, substitutes|
22
+ value = substitutes.map { |s| arguments[s] }.find { |el| el }
23
+ params[final_name] = value if value
24
+ end
25
+ params
26
+ end
27
+
28
+ # Parsing command-line arguments. Understands things like '-d',
29
+ # '-c', '-c 5', '--count=5', '--count 5'.
30
+ # Non-valued args like '-d' get mapped to true to indicate presence.
31
+ def arguments
32
+ @args ||= {}
33
+ unless @args.size > 0
34
+ ARGV.each_with_index do |arg, index|
35
+ if arg.start_with?('-')
36
+ if index + 1 < ARGV.size
37
+ next_arg = ARGV[index + 1]
38
+ if next_arg.start_with?('-') then
39
+ @args.update(argument_present_or_direct(arg))
40
+ else
41
+ @args.update(arg => next_arg)
42
+ end
43
+ else
44
+ @args.update(argument_present_or_direct(arg))
45
+ end
46
+ end
47
+ end
48
+ end
49
+ @args
50
+ end
51
+
52
+ def argument_present_or_direct(arg)
53
+ arg, value = if arg.include?('=') then
54
+ arg.split('=')
55
+ else
56
+ [arg, true]
57
+ end
58
+ { arg => value }
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,4 @@
1
+ module Dmail
2
+ VERSION = '0.0.1'
3
+ end
4
+
metadata ADDED
@@ -0,0 +1,123 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dmail
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Andre Dieb Martins
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '10.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '10.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: mail
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.6'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.6'
55
+ - !ruby/object:Gem::Dependency
56
+ name: term-ansicolor
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.3'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pager
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ description: Command-line email client
84
+ email:
85
+ - andre.dieb@gmail.com
86
+ executables:
87
+ - dmail
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - README.md
92
+ - Rakefile
93
+ - bin/dmail
94
+ - lib/dmail.rb
95
+ - lib/dmail/cli.rb
96
+ - lib/dmail/impl.rb
97
+ - lib/dmail/utils.rb
98
+ - lib/dmail/version.rb
99
+ homepage: https://github.com/dieb/dmail
100
+ licenses:
101
+ - MIT
102
+ metadata: {}
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubyforge_project:
119
+ rubygems_version: 2.4.3
120
+ signing_key:
121
+ specification_version: 4
122
+ summary: Command-line email client
123
+ test_files: []