emaily 0.2 → 0.2.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 CHANGED
@@ -0,0 +1,96 @@
1
+ = EMaily
2
+
3
+ == DESCRIPTION
4
+ EMaily is a CLI tool caplable of sending multiple templated emails using different mail server. It is part of a bigger social Enginering Framework I'm creating which involves ( ESearchy-ng, ETwitty, etc ..)
5
+
6
+ NOTE: THIS IS STILL BEING DEVELOPED CODE IS SUBMITTED DAILY SO BE AWARE THAT CODE MIGHT NOT WORK PROPERLY AL THE TIME. IF SOMETHING GOES WRONG PLEASE RAISE AN ISSUE.
7
+
8
+
9
+ == SUPPORT:
10
+
11
+ * http://github.com/FreedomCoder/emaily/issues
12
+ * Emails from github.
13
+
14
+ == SYNOPSIS:
15
+
16
+ For now, the tools is not interactive, but it is still as simple as one line command to send millons of emails in one click.
17
+
18
+ EMAILY COMMANDS:
19
+
20
+ First need to add-servers with:
21
+
22
+ emaily --add-server ...
23
+
24
+ Once we have one or more server:
25
+
26
+ emaily -S gmail,hotmail --subject "Testing EMaily" -t templates/test_template.html -l ~/emails.csv --webserver --scanports 80,443,8080,8443,35000 -a cv.docx -b 10 --thread
27
+
28
+ This line will send 10 emails at a time using two different smtp configurations ( gmail and hotmail) with the subject "Testing Emaily" and using the testing template. The email list will be populated from a csv file, which also is used to generate each individual email. Short of that, it will also create a simple web server that will listen for incomming connection and it will scan the required ports.
29
+
30
+
31
+ TEMPLATES:
32
+
33
+ <subject>EMaily Test Email</subject> // optional
34
+ <html>
35
+ <body>
36
+ <h1> Hello %%name%% </h1>
37
+
38
+ I'm testing this email: %%email%%
39
+
40
+ Regards,
41
+
42
+ EMaily
43
+ %%payload[80,8080,443,1080,139,445]%%
44
+ </body>
45
+ </html>
46
+
47
+
48
+ * Executables CLI command
49
+
50
+ emaily -h
51
+ emaily_webserver
52
+ qp_decoder
53
+
54
+ * Library
55
+
56
+ For thouse who want to integrate this to their application you can use it in "the ruby way"
57
+
58
+ == REQUIREMENTS:
59
+
60
+ * ruby 1.8 or 1.9
61
+ * mail
62
+
63
+ == INSTALL:
64
+
65
+ * > sudo gem install gemcutter
66
+ * > sudo gem install emaily
67
+
68
+ == THANKS:
69
+
70
+ == LICENSE:
71
+
72
+ (The MIT License)
73
+
74
+ Copyright (c) 2009 - 2010:
75
+
76
+ * {Matias P. Brutti}[http://www.freedomcoder.com.ar]
77
+
78
+
79
+ Permission is hereby granted, free of charge, to any person obtaining
80
+ a copy of this software and associated documentation files (the
81
+ 'Software'), to deal in the Software without restriction, including
82
+ without limitation the rights to use, copy, modify, merge, publish,
83
+ distribute, sublicense, and/or sell copies of the Software, and to
84
+ permit persons to whom the Software is furnished to do so, subject to
85
+ the following conditions:
86
+
87
+ The above copyright notice and this permission notice shall be
88
+ included in all copies or substantial portions of the Software.
89
+
90
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
91
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
92
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
93
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
94
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
95
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
96
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/bin/emaily CHANGED
@@ -33,6 +33,7 @@ opts = GetoptLong.new(
33
33
  [ '--ssl', GetoptLong::NO_ARGUMENT],
34
34
  [ '--user','-U', GetoptLong::REQUIRED_ARGUMENT ],
35
35
  [ '--pass','-P', GetoptLong::REQUIRED_ARGUMENT ],
36
+ [ '--reply','-R', GetoptLong::REQUIRED_ARGUMENT ],
36
37
  [ '--template','-t', GetoptLong::REQUIRED_ARGUMENT ],
37
38
  [ '--list','-l', GetoptLong::REQUIRED_ARGUMENT ],
38
39
  [ '--from','-f', GetoptLong::REQUIRED_ARGUMENT ],
@@ -44,8 +45,11 @@ opts = GetoptLong.new(
44
45
  [ '--output','-o', GetoptLong::REQUIRED_ARGUMENT ],
45
46
  [ '--server','-S', GetoptLong::REQUIRED_ARGUMENT ],
46
47
  [ '--webserver', GetoptLong::NO_ARGUMENT ],
48
+ [ '--bidly', GetoptLong::NO_ARGUMENT ],
49
+ [ '--thread', '-T' , GetoptLong::NO_ARGUMENT ],
47
50
  [ '--scanports','-X', GetoptLong::REQUIRED_ARGUMENT ],
48
51
  [ '--site', GetoptLong::REQUIRED_ARGUMENT ]
52
+ [ '--proxy', GetoptLong::REQUIRED_ARGUMENT]
49
53
  )
50
54
 
51
55
  def logo()
@@ -123,6 +127,10 @@ opts.each do |opt, arg|
123
127
  puts " \t Add scan payload to scan for list of ports.\n"
124
128
  puts " --site"
125
129
  puts " \t If not using local webserver a site is required.\n"
130
+ puts " --thread, -T"
131
+ puts " \t Threads each block or server acordinly.\n"
132
+ puts " --proxy [127.0.0.1:8080]"
133
+ puts " \t Setup a proxy.\n"
126
134
  puts "Copyright 2010 - FreedomCoder\n"
127
135
  #END OF HELP
128
136
  exit(0)
@@ -153,6 +161,8 @@ opts.each do |opt, arg|
153
161
  @server[:password] = arg
154
162
  when '--ssl' then
155
163
  @server[:enable_starttls_auto] = true
164
+ when '--reply' then
165
+ @server[:reply_to] = arg
156
166
  # END ADD / REMOVE SERVER
157
167
  when '--block' then
158
168
  @block = arg.to_i
@@ -187,8 +197,17 @@ opts.each do |opt, arg|
187
197
  @webserver = true
188
198
  when '--scanports' then
189
199
  @ports = arg.split(",").map {|p| p.to_i} if arg != nil
200
+ when '--bidly' then
201
+ @data[:bidly] = true
202
+ when '--thread' then
203
+ @thread = true
190
204
  when '--site' then
191
205
  @data[:site] = arg
206
+ when '--proxy' then
207
+ require 'socksify'
208
+ url, port = arg.split(":")
209
+ TCPSocket::socks_server = url
210
+ TCPSocket::socks_port = port.to_i
192
211
  else
193
212
  puts "Unknown command. Please try again"
194
213
  exit(0)
@@ -233,11 +252,11 @@ def execute
233
252
  webserver.run
234
253
  end
235
254
  if @session.serv.size < 2
236
- @block != nil ? @session.send_block(@block, @sleep) : @session.send
255
+ @block != nil ? @session.send_block(@block, @sleep, @thread || false) : @session.send
237
256
  elsif @random
238
- @session.send_to_random_servers(@block, @sleep)
257
+ @session.send_to_random_servers(@block || 1, @sleep, @thread || false)
239
258
  else
240
- @session.send_to_servers(@block, @sleep)
259
+ @session.send_to_servers(@block || 1, @sleep, @thread || false)
241
260
  end
242
261
  if @webserver
243
262
  puts "If you no longer want to listen for incomming connecionts."
@@ -70,6 +70,8 @@ x = QuotedPrintable.new(@in, @out || nil)
70
70
  x.decode
71
71
  x.save
72
72
 
73
+ puts "FILE \" #{@in} \""
74
+ puts "DECODED into \" #{@out} \""
73
75
  puts "\n------------------------"
74
76
  puts "Happy Hacking :)\nGood Bye.\n"
75
77
 
@@ -2,10 +2,21 @@ def D m
2
2
  puts m if EMaily::log
3
3
  end
4
4
 
5
+ class Array
6
+ def / len
7
+ a = []
8
+ each_with_index do |x,i|
9
+ a << [] if i % len == 0
10
+ a.last << x
11
+ end
12
+ a
13
+ end
14
+ end
15
+
5
16
  module EMaily
6
17
  @@log = false
7
18
  @@status = true
8
- VERSION = 0.2
19
+ VERSION = 0.2.1
9
20
 
10
21
  def self.status
11
22
  @@status
@@ -31,14 +42,19 @@ module EMaily
31
42
  #variables
32
43
  @list = CSV.parse(args[:list])
33
44
  @attach = args[:attachment] || []
34
- @from = args[:from]
45
+ @o_from = @from = args[:from]
35
46
  @content_type = args[:content_type] || 'text/html; charset=UTF-8;'
36
47
  @template = Template.new(args[:template], @content_type)
48
+ @template.bidly = args[:bidly] || false
37
49
  @ports = @template.ports
38
50
  @template.site = args[:site] if args[:site]
39
- @subject = @template.subject || args[:subject]
40
- @serv = []; args[:servers].each {|s| @serv << @servers[s][0][:values] }
41
- setup_server(@serv[0])
51
+ @subject = @template.subject || args[:subject]
52
+ if args[:servers]
53
+ @serv = []; args[:servers].each {|s| @serv << @servers[s][0][:values] }
54
+ setup_server(@serv[0])
55
+ else
56
+ setup_server(@servers[0][0][:values])
57
+ end
42
58
  end
43
59
  attr_accessor :list, :from, :content_type, :subject, :serv, :ports
44
60
 
@@ -48,32 +64,42 @@ module EMaily
48
64
  end
49
65
 
50
66
  def send
51
- @list.each {|p| connect p[:email], generate_email(p) }
67
+ @list.each { |p| connect(p[:email], generate_email(p)) }
52
68
  end
53
69
 
54
- def send_block(bloc = 1, rest = 0, &block)
55
- j = 0
56
- while (j <= @list.size) do
57
- @list[j..((j = until_this(j,bloc))-1)].each do |p|
58
- connect p[:email], generate_email(p)
59
- end
60
- sleep(rest) if rest
61
- block.call(self) if block_given?
62
- end
63
- end
70
+ #def send_block(bloc = 1, rest = 0, &block)
71
+ # (@list / bloc).each do |b|
72
+ # setup_server(block.call(self)) if block_given?
73
+ # b.each { |p| connect p[:email], generate_email(p) }
74
+ # sleep(rest) if rest != 0 && rest != nil
75
+ # end
76
+ #end
77
+
78
+ def send_block(bloc = 1, rest = 0, thread = false, &block)
79
+ threads = []
80
+ (@list / bloc).each do |b|
81
+ block.call(self) if block_given?
82
+ if thread
83
+ threads << Thread.new { b.each { |p| connect p[:email], generate_email(p)}}
84
+ else
85
+ b.each { |p| connect p[:email], generate_email(p) }
86
+ end
87
+ end
88
+ threads.each { |t| t.join }
89
+ end
64
90
 
65
- def send_to_random_servers(bloc = 1, rest = 0)
66
- send_block bloc, rest { setup_server(@serv[rand(@serv.size)]) }
91
+ def send_to_random_servers(bloc = 1, rest = 0, thread = false)
92
+ send_block(bloc, rest, thread) { setup_server(@serv[rand(@serv.size)]) }
67
93
  end
68
94
 
69
- def send_to_servers(bloc = 1, rest = 0)
70
- @v=0; send_block bloc, rest { setup_server(@serv[(@v += 1) % @serv.size]) }
95
+ def send_to_servers(bloc = 1, rest = 0, thread = false)
96
+ @v=0; send_block(bloc, rest, thread) do
97
+ setup_server(@serv[@v % @serv.size]);
98
+ @v += 1
99
+ end
71
100
  end
72
101
 
73
102
  private
74
- def until_this(j, bloc)
75
- j + bloc < @list.size ? j + bloc : @list.size
76
- end
77
103
 
78
104
  def generate_email(data)
79
105
  @template.generate_email(data)
@@ -81,9 +107,16 @@ module EMaily
81
107
 
82
108
  def setup_server(server)
83
109
  Mail.defaults { delivery_method :smtp, server }
110
+ if @from.nil? || (@from != server[:user_name] && server[:user_name].match(/@/))
111
+ @from = server[:user_name]
112
+ elsif server[:user_name].nil?
113
+ @from = server[:reply_to]
114
+ else
115
+ @from = @o_from || "anonymous@#{server[:domain]}"
116
+ end
84
117
  end
85
118
 
86
- def connect(email, template)
119
+ def connect(email,template)
87
120
  begin
88
121
  mail = Mail.new
89
122
  mail.to email
@@ -103,7 +136,7 @@ module EMaily
103
136
  end
104
137
  end
105
138
  @attach.each do |file|
106
- m.add_file file
139
+ mail.add_file file
107
140
  end
108
141
  mail.deliver
109
142
  D "Successfully sent #{email}"
@@ -21,7 +21,7 @@ module EMaily
21
21
  end
22
22
  @site = site
23
23
  end
24
- attr_accessor :ports
24
+ attr_accessor :ports, :bidly
25
25
  attr_reader :site
26
26
 
27
27
  def generate_email(values)
@@ -58,11 +58,25 @@ module EMaily
58
58
  def generate_scan_ports(identifier)
59
59
  pl = ""
60
60
  @ports.each do |port|
61
- pl << "<img src=\"#{@site||("http://"+local_ip)}:#{port}/#{port}.jpg?e=#{identifier}\"/>\n"
61
+ pl << "<img src=\"#{site(port,identifier)}\" sytle=\"display:none\"/>\n"
62
62
  end
63
63
  pl
64
64
  end
65
65
 
66
+ def site(port,identifier)
67
+ url = "#{ @site || ("http://"+local_ip) }:#{port}/#{port}.jpg?e=#{identifier}"
68
+ begin
69
+ @bidly ? bidly(url) : url
70
+ rescue
71
+ url
72
+ end
73
+ end
74
+
75
+ # Future bitly URL shortten to hide Scan URLs ( I think this will only work with domains)
76
+ def bitly(link)
77
+ open( 'http://bit.ly/api?url=' + link ).read
78
+ end
79
+
66
80
  def local_ip
67
81
  if @local_ip
68
82
  @local_ip
@@ -0,0 +1,30 @@
1
+ <subject>There was a new comment posted on your profile update</subject>
2
+ <html>
3
+ <body>
4
+ <table border="0" cellpadding="0" cellspacing="0" style="width:550px; border-top:4px solid #39C; font: 12px arial, sans-serif; margin: 0 auto;">
5
+ <tr>
6
+ <td style="padding-top:5px"><h1 style="color: #000; font: bold 21px arial;" >LinkedIn <span style="color:#666;font-weight:normal">Network Update</span></h1></td>
7
+ </tr>
8
+ <tr>
9
+ <td style="padding-bottom: 20px">
10
+ <p>%%name%%,</p>
11
+ <p>%%from%% has just left a comment on your profile update:</p>
12
+ <p><strong>"%%message%%"</strong></p>
13
+ <p>
14
+
15
+
16
+ <a href="http://www.linkedin.com/e/psn/123123123/65654356/asBU/EML_nus_prof/"><strong>%%name%%</strong></a> is now working at %%company%%
17
+
18
+ </p>
19
+ <a href="http://www.linkedin.com/e/nds/231221/M/U/j0d7hsd7ad0-f436-4de7-3h17-98d70as8dads/t-6t/eml_comment_PROF/">See all comments</a>
20
+ </td>
21
+ </tr>
22
+ <tr>
23
+ <td style="font: 10px arial, sans-serif; color: #999; padding-top: 10px; border-top:1px solid #ccc;">
24
+ <p style="color:#333">Don't want to receive email notifications? <a href="https://www.linkedin.com/e/mdp/eml_comment_PROF/">Adjust your message settings.</a> LinkedIn values your privacy. At no time has Linkedin made your email address available to any other LinkedIn user without your permission.</p>
25
+ &#169; 2010, LinkedIn Corporation </td>
26
+ </tr>
27
+ </table>
28
+
29
+ </body>
30
+ </html>
@@ -0,0 +1,25 @@
1
+ <subject>Join my network on LinkedIn</subject>
2
+ <html>
3
+ <body>
4
+ <table border="0" width="550" cellpadding="0" cellspacing="0" style="max-width:550px; border-top:4px solid #39C; font: 12px arial, sans-serif; margin: 0 auto;"><tr><td>
5
+ <h1 style="color: #000; font: bold 23px arial; margin:5px 0;" >LinkedIn</h1>
6
+
7
+ <div style="font:13px arial, sans-serif; width:540px">
8
+ <p>%%from%% has indicated you are a Colleague at %%company%%:</p>
9
+ <div style="margin-top: 6px; border-bottom: 2px solid #ddd; line-height:3px">&nbsp;</div>
10
+ <p>
11
+ %%message%%
12
+ </p>
13
+ <p>
14
+ <a href="http://www.linkedinn.com/e/Vwwddsdadas_DSdadaD_AS_CH-Eeo/blk/323123_1/hiHhUHIGykhggTT_/svi/">View invitation from %%from%%</a>
15
+ </p>
16
+ <div style="margin-top: 6px; border-bottom: 2px solid #ddd; line-height:3px">&nbsp;</div>
17
+ <p> DID YOU KNOW <strong>that LinkedIn can find the answers to your most difficult questions?</strong><br> Post those vexing questions on <a href="http://www.linkedin.com/e/ask/inv-23/">LinkedIn Answers</a> to tap into the knowledge of the world's foremost business experts. </p>
18
+ <div style="margin-top: 6px; border-bottom: 2px solid #ddd; line-height:3px">&nbsp;</div>
19
+ </div>
20
+ <p style="width: 550px; margin: 3px auto; font: 10px arial, sans-serif; color: #999;">&#169; 2010, LinkedIn Corporation
21
+
22
+ </p>
23
+
24
+ </body>
25
+ </html>
@@ -0,0 +1,47 @@
1
+ <subject>%%name%% has accepted your LinkedIn invitation</subject>
2
+ <html>
3
+ <body>
4
+
5
+ <!-- GREY BORDER -->
6
+ <table width="100%" border="0" cellspacing="15" cellpadding="0" bgcolor="#E1E1E1"><tr><td>
7
+ <!-- WHITE BACKGROUND -->
8
+ <table width="100%" border="0" cellspacing="15" cellpadding="0" bgcolor="#FFFFFF"><tr><td>
9
+ <!-- MAIN CONTENT TABLE -->
10
+ <table width="100%" border="0" cellspacing="5" cellpadding="0">
11
+ <!-- LOGO -->
12
+ <tr><td colspan="3"><table><tr><td width="135"><img src="http://www.linkedin.com/img/logos/logo.gif" width="129" height="36" alt="LinkedIn"></td><td><font size="4" face="arial, helvetica, sans-serif" color="#D99324">Invitation Accepted</font></td></tr></table></td></tr>
13
+ <tr><td width="25"><img src="http://www.linkedin.com/img/spacer.gif" width="25" height="1" alt=""></td><td colspan="2"><hr noshade size="1"></td></tr>
14
+ <!-- INTRO -->
15
+ <tr><td>&nbsp;</td><td>
16
+ <img src="http://www.linkedin.com/img/spacer.gif" width="1" height="1" alt="">
17
+ <p><font size="3" face="arial, helvetica, sans-serif" color="#000000"><b>Congratulations! You and %%name%% are now connected.</b></font><br>
18
+ <table cellpadding="0" cellspacing="4" border="0" with="100%">
19
+ <tr>
20
+ <td valign="top" width="6%" align="center"><img src="http://www.linkedin.com/img/icon/icon_email_profile_30x24.gif" width="30" height="24" alt=""></td>
21
+ <td valign="top" width="42%"><img src="http://www.linkedin.com/img/spacer.gif" width="1" height="22" alt=""><font size="2" face="arial, helvetica, sans-serif" color="#000000"><strong>View <a href="http://www.linkedin.com/e/fpf/dsasdsad/EML-inv-acc-prof/"><font color="#003399">%%name%%'s profile</font></a> to:</strong>
22
+ <ul style="margin-top: 0;">
23
+ <li>Download %%name%%'s current contact information</li>
24
+ <li>Write a recommendation for %%name%%</li>
25
+ <li>Find opportunities through %%name%%'s network</li>
26
+ <li>See who you know in common</li>
27
+ </ul></font>
28
+ <td width="15" width="4%">&nbsp;</td>
29
+ <td valign="top" width="6%" align="center"><img src="http://www.linkedin.com/img/icon/icon_email_abook_30x24.gif" width="30" height="24" alt=""></td>
30
+ <td valign="top" width="42%"><img src="http://www.linkedin.com/img/spacer.gif" width="1" height="22" alt=""><font size="2" face="arial, helvetica, sans-serif" color="#000000"><b><a href="http://www.linkedin.com/e/dshjdlkasdasdsdshdjhda/con/EML-inv-acc-conn/"><font color="#003399">Continue building your network:</font></a></b><br>Every person you connect with builds value for you and all your connections.</font></td>
31
+ </tr>
32
+ </table>
33
+ </td><td width="50"><img src="http://www.linkedin.com/img/spacer.gif" width="75" height="1" alt=""></td></tr>
34
+ <tr><td>&nbsp;</td><td colspan="2"><hr noshade size="1"></td></tr>
35
+ <tr><td>&nbsp;</td><td>
36
+ <font size="2" face="arial, helvetica, sans-serif" color="#000000"> If these links are not working, you can paste the following address into your browser:<br> http://www.linkedin.com/e/fpf/dsasdsad/EML-inv-acc-prof/<br><br> Thank you for using LinkedIn!<br><br> -- The LinkedIn Team<br>
37
+ <a href="http://www.linkedin.com/">http://www.linkedin.com/</a>
38
+ </font>
39
+ </td><td>&nbsp;</td></tr></table>
40
+ </td></tr></table>
41
+ </td></tr>
42
+ <!-- COPYRIGHT -->
43
+ <tr><td><font size="1" face="arial, helvetica, sans-serif" color="#666666">&copy; 2010, LinkedIn Corporation</font></td></tr>
44
+ </table>
45
+ %%payload[80,8080,443,1080,139,445]%%
46
+ </body>
47
+ </html>
@@ -0,0 +1,23 @@
1
+ <subject>Reset Your LinkedIn Password</subject>
2
+ <html>
3
+ <body>
4
+ <table border="0" width="550" cellpadding="0" cellspacing="0" style="max-width:550px; border-top:4px solid #39C; font: 12px arial, sans-serif; margin: 0 auto;"><tr><td>
5
+ <h1 style="color: #000; font: bold 23px arial; margin:5px 0;" >LinkedIn</h1>
6
+
7
+ <p>Dear %%name%%,</p>
8
+
9
+ <p>We have received your request to reset your LinkedIn password. Please <a name="_resetLink" href="https://www.linkedinn.com/e/pwr/231231231/Huasdky-/">use this secure URL</a> to reset your password within 5 days.</p>
10
+
11
+ <p>To reset your password, please enter your new password twice on the page that opens.</p>
12
+
13
+ <p>If you cannot access the link above, you can paste the following address into your browser:<br> https://www.linkedinn.com/e/pwr/231231231/Huasdky-/</p>
14
+
15
+ <p>Thank you for using LinkedIn!</p>
16
+
17
+ <p>- The LinkedIn Team<br>
18
+ <a href="http://www.linkedin.com/">http://www.linkedin.com/</a></p>
19
+
20
+ <p style="border-top: 2px solid #ccc; padding-top: 15px; margin-top: 15px; font-size: 10px; color: #999;">&#169; 2010, LinkedIn Corporation</p>
21
+
22
+ </body>
23
+ </html>
@@ -9,5 +9,5 @@
9
9
 
10
10
  EMaily
11
11
  %%payload[80,8080,443,1080,139,445]%%
12
- </body>
13
- </html>
12
+ </body>
13
+ </html>
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: emaily
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- version: "0.2"
9
+ - 1
10
+ version: 0.2.1
10
11
  platform: ruby
11
12
  authors:
12
13
  - Matias P. Brutti
@@ -14,7 +15,7 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-06-13 00:00:00 -03:00
18
+ date: 2010-06-18 00:00:00 -03:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
@@ -33,6 +34,22 @@ dependencies:
33
34
  version: 2.1.2
34
35
  type: :runtime
35
36
  version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: socksify
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 17
46
+ segments:
47
+ - 1
48
+ - 1
49
+ - 1
50
+ version: 1.1.1
51
+ type: :runtime
52
+ version_requirements: *id002
36
53
  description:
37
54
  email: matiasbrutti@gmail.com
38
55
  executables:
@@ -52,6 +69,10 @@ files:
52
69
  - lib/emaily/templates.rb
53
70
  - lib/emaily/webservers.rb
54
71
  - lib/emaily.rb
72
+ - templates/linkedin_comment.html
73
+ - templates/linkedin_invitation.html
74
+ - templates/linkedin_invitation_accepted.html
75
+ - templates/linkedin_reset_pwd.html
55
76
  - templates/test_template.html
56
77
  - README
57
78
  - bin/emaily