vmail 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +7 -0
- data/lib/vmail/imap_client.rb +13 -4
- data/lib/vmail/send_options.rb +54 -0
- data/lib/vmail/sender.rb +3 -2
- data/lib/vmail/version.rb +1 -1
- metadata +3 -2
data/README.markdown
CHANGED
@@ -245,6 +245,13 @@ split window, etc.) Resume editing. Send by typing `,vs`.
|
|
245
245
|
|
246
246
|
At any point, you can quit the composition window by typing `q` in normal mode.
|
247
247
|
|
248
|
+
You can also use `vmailsend` from the command line to send a message that
|
249
|
+
you've compmosed with correct headers and saved to a file, like so.
|
250
|
+
|
251
|
+
vmailsend < my_message.txt
|
252
|
+
|
253
|
+
vmailsend uses your `.vmailrc` configuration.
|
254
|
+
|
248
255
|
## Attachments
|
249
256
|
|
250
257
|
The current version of vmail can handle attachments to a certain extent.
|
data/lib/vmail/imap_client.rb
CHANGED
@@ -85,10 +85,12 @@ module Vmail
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def prime_connection
|
88
|
+
return if @ids.nil? || @ids.empty?
|
88
89
|
reconnect_if_necessary(4) do
|
89
90
|
# this is just to prime the IMAP connection
|
90
91
|
# It's necessary for some reason before update and deliver.
|
91
92
|
log "priming connection for delivering"
|
93
|
+
|
92
94
|
res = @imap.fetch(@ids[-1], ["ENVELOPE"])
|
93
95
|
if res.nil?
|
94
96
|
# just go ahead, just log
|
@@ -572,8 +574,16 @@ EOF
|
|
572
574
|
prime_connection
|
573
575
|
mail = new_mail_from_input(text)
|
574
576
|
mail.delivery_method(*smtp_settings)
|
575
|
-
|
576
|
-
|
577
|
+
res = mail.deliver!
|
578
|
+
log res.inspect
|
579
|
+
log "\n"
|
580
|
+
msg = if res.is_a?(Mail::Message)
|
581
|
+
"message '#{mail.subject}' sent"
|
582
|
+
else
|
583
|
+
"failed to deliver message '#{mail.subject}'"
|
584
|
+
end
|
585
|
+
log msg
|
586
|
+
msg
|
577
587
|
end
|
578
588
|
|
579
589
|
def new_mail_from_input(text)
|
@@ -585,8 +595,7 @@ EOF
|
|
585
595
|
key, value = *line.split(/:\s*/, 2)
|
586
596
|
headers[key] = value
|
587
597
|
end
|
588
|
-
log "headers: #{headers.
|
589
|
-
log "delivering: #{headers.inspect}"
|
598
|
+
log "delivering message with headers: #{headers.to_yaml}"
|
590
599
|
mail.from = headers['from'] || @username
|
591
600
|
mail.to = headers['to'] #.split(/,\s+/)
|
592
601
|
mail.cc = headers['cc'] #&& headers['cc'].split(/,\s+/)
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'vmail/options'
|
2
|
+
|
3
|
+
module Vmail
|
4
|
+
class SendOptions < Vmail::Options
|
5
|
+
|
6
|
+
def parse(argv)
|
7
|
+
OptionParser.new do |opts|
|
8
|
+
opts.banner = "Usage: vmailsend"
|
9
|
+
opts.separator ""
|
10
|
+
opts.separator "Specific options:"
|
11
|
+
opts.on("-c", "--config path", String, "Path to config file") do |config_file|
|
12
|
+
@config_file = config_file
|
13
|
+
end
|
14
|
+
opts.on("-v", "--version", "Show version (identical to vmail version)") do
|
15
|
+
require 'vmail/version'
|
16
|
+
puts "vmail #{Vmail::VERSION}\nCopyright 2010 Daniel Choi under the MIT license"
|
17
|
+
exit
|
18
|
+
end
|
19
|
+
opts.on("-h", "--help", "Show this message") do
|
20
|
+
puts opts
|
21
|
+
exit
|
22
|
+
end
|
23
|
+
opts.separator ""
|
24
|
+
opts.separator INSTRUCTIONS
|
25
|
+
|
26
|
+
begin
|
27
|
+
opts.parse!(argv)
|
28
|
+
if @config_file && File.exists?(@config_file)
|
29
|
+
puts "Using config file #{@config_file}"
|
30
|
+
else
|
31
|
+
puts <<EOF
|
32
|
+
|
33
|
+
Missing config file!
|
34
|
+
|
35
|
+
#{INSTRUCTIONS}
|
36
|
+
EOF
|
37
|
+
exit(1)
|
38
|
+
end
|
39
|
+
|
40
|
+
@config = YAML::load(File.read(@config_file))
|
41
|
+
if @config['password'].nil?
|
42
|
+
@config['password'] = ask("Enter gmail password (won't be visible & won't be persisted):") {|q| q.echo = false}
|
43
|
+
end
|
44
|
+
|
45
|
+
rescue OptionParser::ParseError => e
|
46
|
+
STDERR.puts e.message, "\n", opts
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
data/lib/vmail/sender.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
|
+
require 'vmail/send_options'
|
1
2
|
require 'vmail/imap_client'
|
2
3
|
|
3
4
|
module Vmail
|
4
|
-
|
5
|
+
module Sender
|
5
6
|
extend self
|
6
7
|
|
7
8
|
def send
|
8
|
-
opts = Vmail::
|
9
|
+
opts = Vmail::SendOptions.new(ARGV)
|
9
10
|
config = opts.config.merge 'logile' => STDERR
|
10
11
|
imap_client = Vmail::ImapClient.new config
|
11
12
|
imap_client.deliver STDIN.read
|
data/lib/vmail/version.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 6
|
8
|
-
-
|
9
|
-
version: 0.6.
|
8
|
+
- 1
|
9
|
+
version: 0.6.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Daniel Choi
|
@@ -74,6 +74,7 @@ files:
|
|
74
74
|
- lib/vmail/message_formatter.rb
|
75
75
|
- lib/vmail/options.rb
|
76
76
|
- lib/vmail/reply_template.rb
|
77
|
+
- lib/vmail/send_options.rb
|
77
78
|
- lib/vmail/sender.rb
|
78
79
|
- lib/vmail/string_ext.rb
|
79
80
|
- lib/vmail/version.rb
|