emaily 0.2 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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