emaily 0.2.1 → 0.3
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/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>
|