emaily 0.2.1 → 0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/emaily +2 -2
- data/bin/emaily_genlist +75 -1
- data/bin/emaily_web +234 -0
- data/lib/emaily.rb +2 -0
- data/lib/emaily/emaily.rb +68 -21
- data/lib/emaily/templates.rb +8 -4
- metadata +6 -9
- data/templates/linkedin_comment.html +0 -30
- data/templates/linkedin_invitation.html +0 -25
- data/templates/linkedin_invitation_accepted.html +0 -47
- data/templates/linkedin_reset_pwd.html +0 -23
data/bin/emaily
CHANGED
@@ -46,10 +46,10 @@ opts = GetoptLong.new(
|
|
46
46
|
[ '--server','-S', GetoptLong::REQUIRED_ARGUMENT ],
|
47
47
|
[ '--webserver', GetoptLong::NO_ARGUMENT ],
|
48
48
|
[ '--bidly', GetoptLong::NO_ARGUMENT ],
|
49
|
-
[ '--
|
49
|
+
[ '--proxy', GetoptLong::REQUIRED_ARGUMENT ],
|
50
|
+
[ '--thread', '-T', GetoptLong::NO_ARGUMENT ],
|
50
51
|
[ '--scanports','-X', GetoptLong::REQUIRED_ARGUMENT ],
|
51
52
|
[ '--site', GetoptLong::REQUIRED_ARGUMENT ]
|
52
|
-
[ '--proxy', GetoptLong::REQUIRED_ARGUMENT]
|
53
53
|
)
|
54
54
|
|
55
55
|
def logo()
|
data/bin/emaily_genlist
CHANGED
@@ -6,4 +6,78 @@
|
|
6
6
|
# Copyright 2010 FreedomCoder's Labs. All rights reserved.
|
7
7
|
#
|
8
8
|
|
9
|
-
|
9
|
+
require 'rubygems'
|
10
|
+
require 'getoptlong'
|
11
|
+
require 'emaily'
|
12
|
+
|
13
|
+
EMaily::log = true
|
14
|
+
EMaily::status = true
|
15
|
+
@data = {}
|
16
|
+
@server = {}
|
17
|
+
@ports = nil
|
18
|
+
|
19
|
+
# Parameters
|
20
|
+
|
21
|
+
# name
|
22
|
+
# last
|
23
|
+
# plist
|
24
|
+
# fields
|
25
|
+
# payload
|
26
|
+
# domain
|
27
|
+
#
|
28
|
+
|
29
|
+
#emaily_genlist --name 1 --last full --plist persons.csv --fields name,email,company,message --payload random --domain test.com
|
30
|
+
|
31
|
+
opts = GetoptLong.new(
|
32
|
+
[ '--help', '-h', GetoptLong::NO_ARGUMENT ],
|
33
|
+
[ '--version', '-v', GetoptLong::NO_ARGUMENT ],
|
34
|
+
[ '--nolog', '-N', GetoptLong::NO_ARGUMENT ],
|
35
|
+
[ '--name','-n', GetoptLong::REQUIRED_ARGUMENT ],
|
36
|
+
[ '--last','-l', GetoptLong::REQUIRED_ARGUMENT ],
|
37
|
+
[ '--plist','-p', GetoptLong::REQUIRED_ARGUMENT ],
|
38
|
+
[ '--fields','-f', GetoptLong::REQUIRED_ARGUMENT ],
|
39
|
+
[ '--payloads','-P', GetoptLong::REQUIRED_ARGUMENT ],
|
40
|
+
[ '--domain','-d', GetoptLong::REQUIRED_ARGUMENT ],
|
41
|
+
[ '--scanports','-X', GetoptLong::REQUIRED_ARGUMENT ],
|
42
|
+
[ '--output','-o', GetoptLong::REQUIRED_ARGUMENT ]
|
43
|
+
)
|
44
|
+
|
45
|
+
opts.each do |opt, arg|
|
46
|
+
case opt
|
47
|
+
when '--help' then
|
48
|
+
# BEGIN OF HELP
|
49
|
+
logo()
|
50
|
+
puts "\n\nHELP for EMaily_genlist\n---------------------\n"
|
51
|
+
puts " --help, -h"
|
52
|
+
puts " \tWell I guess you know what this is for (To obtain this Help).\n"
|
53
|
+
puts "Copyright 2010 - FreedomCoder\n"
|
54
|
+
#END OF HELP
|
55
|
+
exit(0)
|
56
|
+
when '--version' then
|
57
|
+
logo()
|
58
|
+
puts "EMaily version #{EMaily::VERSION}"
|
59
|
+
exit(0)
|
60
|
+
when '--nolog' then
|
61
|
+
EMaily::log = false
|
62
|
+
when '--name' then
|
63
|
+
@name = arg.to_i
|
64
|
+
when '--last' then
|
65
|
+
@last = arg.to_i
|
66
|
+
when '--plist' then
|
67
|
+
@plist = arg
|
68
|
+
when '--fields' then
|
69
|
+
@fields = arg.split(",")
|
70
|
+
when '--domain' then
|
71
|
+
@domain = arg
|
72
|
+
when '--payloads' then
|
73
|
+
@payloads = arg
|
74
|
+
when '--scanports' then
|
75
|
+
@scanports = arg
|
76
|
+
when '--output' then
|
77
|
+
@output = arg
|
78
|
+
else
|
79
|
+
puts "Unknown command. Please try again"
|
80
|
+
exit(0)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
data/bin/emaily_web
ADDED
@@ -0,0 +1,234 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# -wKU
|
3
|
+
# emaily
|
4
|
+
#
|
5
|
+
# Created by FreedomCoder on 2010-1-26.
|
6
|
+
# Copyright 2010 FreedomCoder's Labs. All rights reserved.
|
7
|
+
#
|
8
|
+
# IDEA: emaily_web --form test.txt --list emails.csv --rows TO,FROM,MESSAGE,PAYLOAD
|
9
|
+
|
10
|
+
require 'rubygems'
|
11
|
+
require 'getoptlong'
|
12
|
+
require 'emaily'
|
13
|
+
|
14
|
+
EMaily::log = true
|
15
|
+
EMaily::status = true
|
16
|
+
@data = {}
|
17
|
+
@server = {}
|
18
|
+
@ports = nil
|
19
|
+
|
20
|
+
opts = GetoptLong.new(
|
21
|
+
[ '--help', '-h', GetoptLong::NO_ARGUMENT ],
|
22
|
+
[ '--version', '-v', GetoptLong::NO_ARGUMENT ],
|
23
|
+
[ '--nolog', GetoptLong::NO_ARGUMENT ],
|
24
|
+
[ '--remove-server', GetoptLong::NO_ARGUMENT ],
|
25
|
+
[ '--add-server', GetoptLong::NO_ARGUMENT ],
|
26
|
+
[ '--name','-n', GetoptLong::REQUIRED_ARGUMENT ],
|
27
|
+
[ '--uri','-w', GetoptLong::REQUIRED_ARGUMENT ],
|
28
|
+
[ '--port','-p', GetoptLong::REQUIRED_ARGUMENT ],
|
29
|
+
[ '--ssl', GetoptLong::NO_ARGUMENT],
|
30
|
+
[ '--user','-U', GetoptLong::REQUIRED_ARGUMENT ], #Next version should have basic auth support
|
31
|
+
[ '--pass','-P', GetoptLong::REQUIRED_ARGUMENT ], #Next version should have basic auth support
|
32
|
+
[ '--form','-f', GetoptLong::REQUIRED_ARGUMENT ],
|
33
|
+
[ '--list','-l', GetoptLong::REQUIRED_ARGUMENT ],
|
34
|
+
[ '--block','-b', GetoptLong::REQUIRED_ARGUMENT ],
|
35
|
+
[ '--sleep','-z', GetoptLong::REQUIRED_ARGUMENT ],
|
36
|
+
[ '--output','-o', GetoptLong::REQUIRED_ARGUMENT ],
|
37
|
+
[ '--server','-S', GetoptLong::REQUIRED_ARGUMENT ],
|
38
|
+
[ '--webserver', GetoptLong::NO_ARGUMENT ],
|
39
|
+
[ '--bidly', GetoptLong::NO_ARGUMENT ],
|
40
|
+
[ '--proxy', GetoptLong::REQUIRED_ARGUMENT ],
|
41
|
+
[ '--thread', '-T', GetoptLong::NO_ARGUMENT ],
|
42
|
+
[ '--scanports','-X', GetoptLong::REQUIRED_ARGUMENT ],
|
43
|
+
[ '--site', GetoptLong::REQUIRED_ARGUMENT ]
|
44
|
+
)
|
45
|
+
|
46
|
+
def logo()
|
47
|
+
if RUBY_PLATFORM =~ /mingw|mswin/
|
48
|
+
puts "___________ .__.__ "
|
49
|
+
puts "\\_ _____/ _____ _____ |__| | ___.__."
|
50
|
+
puts "| __)_ / \\__ \\ | | |< | |"
|
51
|
+
puts "| \\ Y Y \\/ __ \\| | |_\\___ |"
|
52
|
+
puts "/_______ /__|_| (____ /__|____/ ____| W E B"
|
53
|
+
puts " \\/ \\/ \\/ \\/"
|
54
|
+
else
|
55
|
+
puts "\033[31m___________\033\[0m .__.__ "
|
56
|
+
puts "\033[31m\\_ _____/\033\[0m_____ _____ |__| | ___.__."
|
57
|
+
puts "\033[31m| __)\033\[0m _/ \\__ \\ | | |< | |"
|
58
|
+
puts "\033[31m| \\\033\[0m Y Y \\/ __ \\| | |_\\___ |"
|
59
|
+
puts "\033[31m/_______ /\033\[0m__|_| (____ /__|____/ ____| W E B"
|
60
|
+
puts "\033[31m \\/\033\[0m \\/ \\/ \\/ "
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
opts.each do |opt, arg|
|
65
|
+
case opt
|
66
|
+
when '--help' then
|
67
|
+
# BEGIN OF HELP
|
68
|
+
logo()
|
69
|
+
puts "\n\nHELP for EMaily_web\n---------------------\n"
|
70
|
+
puts " --help, -h"
|
71
|
+
puts " \tWell I guess you know what this is for (To obtain this Help).\n"
|
72
|
+
puts " --nolog"
|
73
|
+
puts " \tTells EMaily not to output to STDOUT.\n"
|
74
|
+
puts " ADD SERVER:"
|
75
|
+
puts " --add-server "
|
76
|
+
puts " \t --name, -n [name]\n"
|
77
|
+
puts " \t\t The name we will use to refer it.\n"
|
78
|
+
puts " \t --uri, -w [smtp.server.com]"
|
79
|
+
puts " \t\t The web server's uri.\n"
|
80
|
+
puts " \t--port, -p [number]"
|
81
|
+
puts " \t\t The web server's port.\n"
|
82
|
+
puts " \t--ssl"
|
83
|
+
puts " \t\t If the site is HTTPS.\n"
|
84
|
+
puts " --user, -U [username]"
|
85
|
+
puts " \t The server's basic auth username .\n"
|
86
|
+
puts " --pass, -P [password]"
|
87
|
+
puts " \t The server's basic auth password .\n\n"
|
88
|
+
puts " INPUT VARIABLES"
|
89
|
+
puts " --form, -f [name/path]\n"
|
90
|
+
puts " \t The template path or name"
|
91
|
+
puts " --list, -l"
|
92
|
+
puts " \tThe CSV file that will populate the templates.\n"
|
93
|
+
puts " --server, -S [name]\n"
|
94
|
+
puts " \t The server/s to send emails\n"
|
95
|
+
puts " --block, -b"
|
96
|
+
puts " \t Size of email blocks to send at one time.\n"
|
97
|
+
puts " --sleep. -z"
|
98
|
+
puts " \t Sleep time among blocks of emails.\n"
|
99
|
+
puts " --webserver"
|
100
|
+
puts " \t Creates a web server to listen on ports declared by --scan_ports.\n"
|
101
|
+
puts " --scanports [80,443,8080,22]"
|
102
|
+
puts " \t Add scan payload to scan for list of ports.\n"
|
103
|
+
puts " --site"
|
104
|
+
puts " \t If not using local webserver a site is required.\n"
|
105
|
+
puts " --thread, -T"
|
106
|
+
puts " \t Threads each block or server acordinly.\n"
|
107
|
+
puts " --proxy [127.0.0.1:8080]"
|
108
|
+
puts " \t Setup a proxy.\n"
|
109
|
+
puts "Copyright 2010 - FreedomCoder\n"
|
110
|
+
#END OF HELP
|
111
|
+
exit(0)
|
112
|
+
when '--version' then
|
113
|
+
logo()
|
114
|
+
puts "EMaily_web version #{EMaily::VERSION}"
|
115
|
+
exit(0)
|
116
|
+
when '--nolog' then
|
117
|
+
EMaily::log = false
|
118
|
+
# ADD / REMOVE SERVER
|
119
|
+
when '--add-server' then
|
120
|
+
@add_server = true
|
121
|
+
when '--remove-server' then
|
122
|
+
@remove_server = true
|
123
|
+
when '--name' then
|
124
|
+
@server_name = arg
|
125
|
+
when '--uri' then
|
126
|
+
@server[:address] = arg
|
127
|
+
when '--port' then
|
128
|
+
@server[:port] = arg.to_i
|
129
|
+
when '--user' then
|
130
|
+
@server[:user_name] = arg
|
131
|
+
when '--pass' then
|
132
|
+
@server[:password] = arg
|
133
|
+
when '--ssl' then
|
134
|
+
@server[:enable_starttls_auto] = true
|
135
|
+
# END ADD / REMOVE SERVER
|
136
|
+
when '--block' then
|
137
|
+
@block = arg.to_i
|
138
|
+
when '--sleep' then
|
139
|
+
@sleep = arg.to_i
|
140
|
+
when '--form' then
|
141
|
+
if File.exist?(arg)
|
142
|
+
@data[:template] = arg
|
143
|
+
else
|
144
|
+
puts "The template path/file does not exists"
|
145
|
+
exit(0)
|
146
|
+
end
|
147
|
+
when '--list' then
|
148
|
+
@data[:list] = arg
|
149
|
+
when '--server' then
|
150
|
+
@data[:servers] = arg.chomp.split(",")
|
151
|
+
when '--webserver' then
|
152
|
+
@webserver = true
|
153
|
+
when '--scanports' then
|
154
|
+
@ports = arg.split(",").map {|p| p.to_i} if arg != nil
|
155
|
+
when '--bidly' then
|
156
|
+
@data[:bidly] = true
|
157
|
+
when '--thread' then
|
158
|
+
@thread = true
|
159
|
+
when '--site' then
|
160
|
+
@data[:site] = arg
|
161
|
+
when '--proxy' then
|
162
|
+
require 'socksify'
|
163
|
+
url, port = arg.split(":")
|
164
|
+
TCPSocket::socks_server = url
|
165
|
+
TCPSocket::socks_port = port.to_i
|
166
|
+
else
|
167
|
+
puts "Unknown command. Please try again"
|
168
|
+
exit(0)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
def add_server
|
173
|
+
servers = EMaily::Servers.load
|
174
|
+
servers.create(@server_name, @server)
|
175
|
+
servers.flush
|
176
|
+
end
|
177
|
+
|
178
|
+
def remove_server
|
179
|
+
servers = EMaily::Servers.load
|
180
|
+
servers.delete(@server_name)
|
181
|
+
server.flush
|
182
|
+
end
|
183
|
+
|
184
|
+
def execute
|
185
|
+
@session = EMaily::Email.new(@data)
|
186
|
+
if @webserver
|
187
|
+
webserver = EMaily::WebServers.new(@ports || @session.ports)
|
188
|
+
webserver.create_scan_server
|
189
|
+
webserver.run
|
190
|
+
end
|
191
|
+
|
192
|
+
@block != nil ? @session.send_web_block(@block, @sleep, @thread || false) : @session.send_web
|
193
|
+
|
194
|
+
if @webserver
|
195
|
+
puts "If you no longer want to listen for incomming connecionts."
|
196
|
+
puts "Press Control + C to close EMaily"
|
197
|
+
trap("INT") do
|
198
|
+
webserver.stop
|
199
|
+
webserver.parsedata
|
200
|
+
EMaily::status = false
|
201
|
+
end
|
202
|
+
while EMaily::status
|
203
|
+
sleep(1)
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
logo()
|
209
|
+
puts "\n"
|
210
|
+
puts "DISCLOSURE: This code is not bug free. If you find one do not hesitate to report it."
|
211
|
+
puts "All bugs are greatly appreciate it."
|
212
|
+
puts "------------------------------------------------------------------------"
|
213
|
+
|
214
|
+
if @add_server
|
215
|
+
add_server
|
216
|
+
D "Server #{@name} created."
|
217
|
+
exit(1)
|
218
|
+
elsif @remove_server
|
219
|
+
remove_server
|
220
|
+
D "Server #{@name} deleted."
|
221
|
+
exit(1)
|
222
|
+
end
|
223
|
+
|
224
|
+
if @data[:servers] == nil
|
225
|
+
D "You need to add at least 1 server."
|
226
|
+
exit(0)
|
227
|
+
end
|
228
|
+
|
229
|
+
unless @data.empty?
|
230
|
+
execute
|
231
|
+
end
|
232
|
+
|
233
|
+
puts "\n------------------------"
|
234
|
+
puts "Happy Hacking :)\nGood Bye.\n"
|
data/lib/emaily.rb
CHANGED
data/lib/emaily/emaily.rb
CHANGED
@@ -16,7 +16,7 @@ end
|
|
16
16
|
module EMaily
|
17
17
|
@@log = false
|
18
18
|
@@status = true
|
19
|
-
VERSION = 0.
|
19
|
+
VERSION = "0.3"
|
20
20
|
|
21
21
|
def self.status
|
22
22
|
@@status
|
@@ -66,27 +66,36 @@ module EMaily
|
|
66
66
|
def send
|
67
67
|
@list.each { |p| connect(p[:email], generate_email(p)) }
|
68
68
|
end
|
69
|
-
|
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
69
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
70
|
+
def send_block(bloc = 1, rest = 0, thread = false, &block)
|
71
|
+
threads = [] if thread == true
|
72
|
+
(@list / bloc).each do |b|
|
73
|
+
block.call(self) if block_given?
|
74
|
+
if thread
|
75
|
+
threads << Thread.new { b.each { |p| connect p[:email], generate_email(p)}}
|
76
|
+
else
|
77
|
+
b.each { |p| connect p[:email], generate_email(p) }
|
78
|
+
end
|
79
|
+
end
|
80
|
+
threads.each { |t| t.join }
|
81
|
+
end
|
82
|
+
|
83
|
+
def send_web
|
84
|
+
@list.each { |p| connect_web(@serv[0], p[:email], generate_email(p)) }
|
85
|
+
end
|
86
|
+
|
87
|
+
def send_web_block(bloc = 1, rest = 0, thread = false, &block)
|
88
|
+
threads = [] if thread == true
|
89
|
+
(@list / bloc).each do |b|
|
90
|
+
block.call(self) if block_given?
|
91
|
+
if thread
|
92
|
+
threads << Thread.new { b.each { |p| connect_web(@serv[0], p[:email], generate_email(p))}}
|
93
|
+
else
|
94
|
+
b.each { |p| connect_web(@serv[0], p[:email], generate_email(p)) }
|
95
|
+
end
|
96
|
+
end
|
97
|
+
threads.each { |t| t.join }
|
98
|
+
end
|
90
99
|
|
91
100
|
def send_to_random_servers(bloc = 1, rest = 0, thread = false)
|
92
101
|
send_block(bloc, rest, thread) { setup_server(@serv[rand(@serv.size)]) }
|
@@ -116,6 +125,44 @@ module EMaily
|
|
116
125
|
end
|
117
126
|
end
|
118
127
|
|
128
|
+
def handcraft_request(url, port, ssl, request_string, email)
|
129
|
+
begin
|
130
|
+
if ssl
|
131
|
+
socket = TCPSocket.new(url, port.to_i)
|
132
|
+
ssl_context = OpenSSL::SSL::SSLContext.new()
|
133
|
+
unless ssl_context.verify_mode
|
134
|
+
D "warning: peer certificate won't be verified this session."
|
135
|
+
ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
136
|
+
end
|
137
|
+
sslsocket = OpenSSL::SSL::SSLSocket.new(socket, ssl_context)
|
138
|
+
sslsocket.sync_close = true
|
139
|
+
sslsocket.connect
|
140
|
+
sslsocket.puts(request_string)
|
141
|
+
@header, @response = sslsocket.gets(nil).split("\r\n\r\n")
|
142
|
+
else
|
143
|
+
request = TCPSocket.new(url, port.to_i)
|
144
|
+
req = request_string
|
145
|
+
request.print req
|
146
|
+
@header, @response = request.gets(nil).split("\r\n\r\n")
|
147
|
+
end
|
148
|
+
rescue
|
149
|
+
puts "error: #{$!}"
|
150
|
+
end
|
151
|
+
if @header.match(/HTTP\/1.1 200 OK/)
|
152
|
+
D "Successfully sent #{email}\n"
|
153
|
+
else
|
154
|
+
D "Something went wrong. Check response ...\n"
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def connect_web(server,email, template)
|
159
|
+
begin
|
160
|
+
handcraft_request(server[:address], server[:port], server[:ssl], template, email)
|
161
|
+
rescue
|
162
|
+
D "Something went wrong sending #{email}\nError: #{$!}\n"
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
119
166
|
def connect(email,template)
|
120
167
|
begin
|
121
168
|
mail = Mail.new
|
data/lib/emaily/templates.rb
CHANGED
@@ -14,10 +14,13 @@ module EMaily
|
|
14
14
|
@templete = file.to_s
|
15
15
|
end
|
16
16
|
@c = content_type
|
17
|
-
if ports
|
17
|
+
if ports != nil
|
18
18
|
@port = ports
|
19
|
-
|
19
|
+
elsif @templete.match(/%%payload\[(.*)\]%%/) != nil
|
20
|
+
puts "I'm here"
|
20
21
|
@ports = @templete.scan(/%%payload\[(.*)\]%%/)[0][0].split(",").map {|p| p.to_i}
|
22
|
+
else
|
23
|
+
@ports = Array.new
|
21
24
|
end
|
22
25
|
@site = site
|
23
26
|
end
|
@@ -31,7 +34,8 @@ module EMaily
|
|
31
34
|
email.gsub!(/%%payload\[.*\]%%/) { |pl| generate_scan_ports(values[:email])}
|
32
35
|
email
|
33
36
|
end
|
34
|
-
|
37
|
+
|
38
|
+
# Method not used yet. It will be used when needed :)
|
35
39
|
def generate_email_with_scan(values)
|
36
40
|
email = generate_email(values)
|
37
41
|
email.gsub!(/(<\/body>)/) {|s| "#{scan_ports(@ports, values[:email])}" + s }
|
@@ -58,7 +62,7 @@ module EMaily
|
|
58
62
|
def generate_scan_ports(identifier)
|
59
63
|
pl = ""
|
60
64
|
@ports.each do |port|
|
61
|
-
pl << "<img src=\"#{site(port,identifier)}\"
|
65
|
+
pl << "<img src=\"#{site(port,identifier)}\" style=\"display:none\"/>\n"
|
62
66
|
end
|
63
67
|
pl
|
64
68
|
end
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: emaily
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 13
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
|
10
|
-
version: 0.2.1
|
8
|
+
- 3
|
9
|
+
version: "0.3"
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Matias P. Brutti
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2010-
|
17
|
+
date: 2010-07-14 00:00:00 -03:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -55,6 +54,7 @@ email: matiasbrutti@gmail.com
|
|
55
54
|
executables:
|
56
55
|
- emaily
|
57
56
|
- emaily_genlist
|
57
|
+
- emaily_web
|
58
58
|
- emaily_webserver
|
59
59
|
- qp_decoder
|
60
60
|
extensions: []
|
@@ -69,14 +69,11 @@ files:
|
|
69
69
|
- lib/emaily/templates.rb
|
70
70
|
- lib/emaily/webservers.rb
|
71
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
|
76
72
|
- templates/test_template.html
|
77
73
|
- README
|
78
74
|
- bin/emaily
|
79
75
|
- bin/emaily_genlist
|
76
|
+
- bin/emaily_web
|
80
77
|
- bin/emaily_webserver
|
81
78
|
- bin/qp_decoder
|
82
79
|
has_rdoc: true
|
@@ -1,30 +0,0 @@
|
|
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>
|
@@ -1,25 +0,0 @@
|
|
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>
|
@@ -1,47 +0,0 @@
|
|
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>
|
@@ -1,23 +0,0 @@
|
|
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>
|