mail_engine 0.1.12 → 0.1.13
Sign up to get free protection for your applications and to get access to all the features.
- data/README.mkd +16 -7
- data/VERSION +1 -1
- data/app/mailers/mail_engine/mail_dispatcher.rb +1 -1
- data/app/models/mail_engine/mail_schedule.rb +5 -1
- data/doc/ActionMailer/Base.html +1 -1
- data/doc/file.README.html +1 -1
- data/doc/index.html +1 -1
- data/lib/mail_engine/action_mailer_patch.rb +3 -3
- data/lib/mail_engine/configuration.rb +52 -1
- data/lib/mail_engine/engine.rb +3 -9
- data/lib/mail_engine/generators/templates/mail_engine_config.yml +2 -5
- data/mail_engine.gemspec +2 -2
- data/test/dummy/app/mailers/user_mailer.rb +1 -1
- data/test/dummy/db/migrate/20110126030525_create_mail_schedules.rb +1 -1
- data/test/functional/user_mailer_test.rb +1 -1
- metadata +4 -4
data/README.mkd
CHANGED
@@ -81,9 +81,9 @@ Add sendgrid smtp api configure:
|
|
81
81
|
}
|
82
82
|
end
|
83
83
|
end
|
84
|
-
|
84
|
+
|
85
85
|
For the detail information please check sendgrid.com.
|
86
|
-
|
86
|
+
|
87
87
|
** Step 6: **
|
88
88
|
|
89
89
|
Add below line to production.rb or development.rb for specifing the host.
|
@@ -109,11 +109,11 @@ Below is the config for development env.
|
|
109
109
|
user_locale_column: "locale" # Specify the locale column of user table, this will help sending correct language of mail to user.
|
110
110
|
mount_at: "/admin/mail_engine" # set the url path for mail engine.
|
111
111
|
access_check_method: "logged_in?" # set a method name which will execute before each page action in mail engine.
|
112
|
-
|
112
|
+
intercept_email: "dev@youdomain.com" # if you want to send all mail to one email, like on staging server or development environment, you can set this, or else don't set it.
|
113
113
|
sendgrid: # Below you need to set the sendgrid account info.
|
114
|
-
sendgrid_user: "you send grid username" #
|
115
|
-
sendgrid_key: "password" #
|
116
|
-
sendgrid_category: "my sendgrid category" #
|
114
|
+
sendgrid_user: "you send grid username" #
|
115
|
+
sendgrid_key: "password" #
|
116
|
+
sendgrid_category: "my sendgrid category" #
|
117
117
|
|
118
118
|
|
119
119
|
Usage
|
@@ -152,10 +152,19 @@ Currently only support above rails3.
|
|
152
152
|
|
153
153
|
Tips
|
154
154
|
====
|
155
|
-
Use below rake task, you can export local mail engine data, then import to production environment.
|
155
|
+
1. Use below rake task, you can export local mail engine data, then import to production environment.
|
156
156
|
|
157
157
|
rake mail_engine:export_mail_engine_database
|
158
158
|
|
159
|
+
2. You can setup postfix or sendmail MTA on the server then use it to queue the mail locally.
|
160
|
+
|
161
|
+
http://support.sendgrid.com/entries/142079-getting-started-configuring-postfix
|
162
|
+
|
163
|
+
then you can set delivery_method as:
|
164
|
+
|
165
|
+
config.action_mailer.delivery_method = :sendmail
|
166
|
+
|
167
|
+
|
159
168
|
Sendgrid Whitelabel Wizard
|
160
169
|
==========================
|
161
170
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.13
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class MailEngine::MailDispatcher < ActionMailer::Base
|
2
2
|
default :from => MailEngine::Base.current_config["default_from"]
|
3
3
|
sendgrid_header do
|
4
|
-
category MailEngine::Base.current_config["sendgrid"]["
|
4
|
+
category MailEngine::Base.current_config["sendgrid"]["sendgrid_category"]
|
5
5
|
filters {
|
6
6
|
opentrack "enable" => 1
|
7
7
|
clicktrack "enable" => 1
|
@@ -146,7 +146,11 @@ class MailEngine::MailSchedule < ActiveRecord::Base
|
|
146
146
|
MailEngine::USER_MODEL.send(self.user_group.to_sym).each do |user|
|
147
147
|
puts "-> sending mail to #{user.email}" if Rails.env != 'test'
|
148
148
|
### FIXME user.email, what if user don't have email column.
|
149
|
-
user_locale =
|
149
|
+
user_locale = begin
|
150
|
+
user.send(MailEngine::Base.current_config["user_locale_column"])
|
151
|
+
rescue
|
152
|
+
I18n.default_locale
|
153
|
+
end
|
150
154
|
|
151
155
|
begin
|
152
156
|
# when there is default_locale been set, should fallback to default_locale template, when can't find the locale user in user settings.
|
data/doc/ActionMailer/Base.html
CHANGED
@@ -205,7 +205,7 @@
|
|
205
205
|
<span class='comment val'># Add sendgrid header before sending mail.</span>
|
206
206
|
<span class='comment val'># Why here but not add to default_params of action_mailer? because the receiver email [:to] only can get here.</span>
|
207
207
|
<span class='if if kw'>if</span> <span class='self self kw'>self</span><span class='dot token'>.</span><span class='sendgrid_config identifier id'>sendgrid_config</span>
|
208
|
-
<span class='comment val'># if add "
|
208
|
+
<span class='comment val'># if add "intercept_email" option in config</span>
|
209
209
|
<span class='receiver identifier id'>receiver</span> <span class='assign token'>=</span> <span class='if if kw'>if</span> <span class='defined? defined kw'>defined?</span><span class='lparen token'>(</span><span class='colon3 op'>::</span><span class='MailSafe constant id'>MailSafe</span><span class='colon2 op'>::</span><span class='Config constant id'>Config</span><span class='rparen token'>)</span> <span class='and and kw'>and</span> <span class='colon3 op'>::</span><span class='MailSafe constant id'>MailSafe</span><span class='colon2 op'>::</span><span class='Config constant id'>Config</span><span class='dot token'>.</span><span class='replacement_address identifier id'>replacement_address</span>
|
210
210
|
<span class='colon3 op'>::</span><span class='MailSafe constant id'>MailSafe</span><span class='colon2 op'>::</span><span class='Config constant id'>Config</span><span class='dot token'>.</span><span class='get_replacement_address identifier id'>get_replacement_address</span><span class='lparen token'>(</span><span class='headers identifier id'>headers</span><span class='lbrack token'>[</span><span class='symbol val'>:to</span><span class='rbrack token'>]</span><span class='rparen token'>)</span>
|
211
211
|
<span class='else else kw'>else</span>
|
data/doc/file.README.html
CHANGED
@@ -157,7 +157,7 @@ it will used when generate resource url when upload zip file.</p>
|
|
157
157
|
<span class='user_class_name identifier id'>user_class_name</span><span class='colon op'>:</span> <span class='string val'>"User"</span> <span class='comment val'># Specify the User model in your system, which will used for mail schedule feature to find user groups and payloads.</span>
|
158
158
|
<span class='mount_at identifier id'>mount_at</span><span class='colon op'>:</span> <span class='string val'>"/admin/mail_engine"</span> <span class='comment val'># set the url path for mail engine.</span>
|
159
159
|
<span class='access_check_method identifier id'>access_check_method</span><span class='colon op'>:</span> <span class='string val'>"logged_in?"</span> <span class='comment val'># set a method name which will execute before each page action in mail engine.</span>
|
160
|
-
<span class='
|
160
|
+
<span class='intercept_email identifier id'>intercept_email</span><span class='colon op'>:</span> <span class='string val'>"dev@youdomain.com"</span> <span class='comment val'># if you want to send all mail to one email, like on staging server or development environment, you can set this, or else don't set it.</span>
|
161
161
|
<span class='sendgrid identifier id'>sendgrid</span><span class='colon op'>:</span> <span class='comment val'># Below you need to set the sendgrid account info.</span>
|
162
162
|
<span class='sendgrid_user identifier id'>sendgrid_user</span><span class='colon op'>:</span> <span class='string val'>"you send grid username"</span> <span class='comment val'># </span>
|
163
163
|
<span class='sendgrid_key identifier id'>sendgrid_key</span><span class='colon op'>:</span> <span class='string val'>"password"</span> <span class='comment val'># </span>
|
data/doc/index.html
CHANGED
@@ -157,7 +157,7 @@ it will used when generate resource url when upload zip file.</p>
|
|
157
157
|
<span class='user_class_name identifier id'>user_class_name</span><span class='colon op'>:</span> <span class='string val'>"User"</span> <span class='comment val'># Specify the User model in your system, which will used for mail schedule feature to find user groups and payloads.</span>
|
158
158
|
<span class='mount_at identifier id'>mount_at</span><span class='colon op'>:</span> <span class='string val'>"/admin/mail_engine"</span> <span class='comment val'># set the url path for mail engine.</span>
|
159
159
|
<span class='access_check_method identifier id'>access_check_method</span><span class='colon op'>:</span> <span class='string val'>"logged_in?"</span> <span class='comment val'># set a method name which will execute before each page action in mail engine.</span>
|
160
|
-
<span class='
|
160
|
+
<span class='intercept_email identifier id'>intercept_email</span><span class='colon op'>:</span> <span class='string val'>"dev@youdomain.com"</span> <span class='comment val'># if you want to send all mail to one email, like on staging server or development environment, you can set this, or else don't set it.</span>
|
161
161
|
<span class='sendgrid identifier id'>sendgrid</span><span class='colon op'>:</span> <span class='comment val'># Below you need to set the sendgrid account info.</span>
|
162
162
|
<span class='sendgrid_user identifier id'>sendgrid_user</span><span class='colon op'>:</span> <span class='string val'>"you send grid username"</span> <span class='comment val'># </span>
|
163
163
|
<span class='sendgrid_key identifier id'>sendgrid_key</span><span class='colon op'>:</span> <span class='string val'>"password"</span> <span class='comment val'># </span>
|
@@ -16,9 +16,9 @@ module ActionMailer
|
|
16
16
|
# Add sendgrid header before sending mail.
|
17
17
|
# Why here but not add to default_params of action_mailer? because the receiver email [:to] only can get here.
|
18
18
|
if self.sendgrid_config
|
19
|
-
# if add "
|
20
|
-
receiver = if (
|
21
|
-
headers[:to] =
|
19
|
+
# if add "intercept_email" option in config
|
20
|
+
receiver = if (intercept_email = MailEngine::Base.current_config["intercept_email"]).present?
|
21
|
+
headers[:to] = intercept_email
|
22
22
|
else
|
23
23
|
headers[:to]
|
24
24
|
end
|
@@ -1,14 +1,65 @@
|
|
1
1
|
module MailEngine
|
2
|
+
class ConfigurationError < StandardError; end
|
2
3
|
# Load configure file from config/mail_engine_config.yml
|
3
4
|
# you can access the config by MailEngine::Base.current_config[]
|
4
5
|
class Configuration
|
5
6
|
class << self
|
6
|
-
def
|
7
|
+
def load_and_check
|
7
8
|
require 'erb' # make config file support erb tags. like <% %>
|
8
9
|
config_path = File.join(Rails.root, "config", "mail_engine_config.yml")
|
9
10
|
MailEngine::Base.configurations = {}
|
10
11
|
MailEngine::Base.configurations = YAML::load(ERB.new(IO.read(config_path)).result) if File.exist?(config_path)
|
12
|
+
config_check
|
11
13
|
end
|
14
|
+
|
15
|
+
### Need check below config options
|
16
|
+
#
|
17
|
+
# log_mail: true
|
18
|
+
# user_class_name: "User"
|
19
|
+
# user_locale_column: "locale"
|
20
|
+
# mount_at: "/admin/mail_engine"
|
21
|
+
# intercept_email: "hlxwell@gmail.com"
|
22
|
+
# default_from: "hlxwell@gmail.com"
|
23
|
+
# access_check_method: "logged_in?"
|
24
|
+
# sendgrid:
|
25
|
+
# sendgrid_user: "a@theplant.jp"
|
26
|
+
# sendgrid_key: "plant^o^"
|
27
|
+
# sendgrid_category: "development"
|
28
|
+
#
|
29
|
+
def config_check
|
30
|
+
if MailEngine::Base.current_config.blank?
|
31
|
+
puts "\e[1;31;40m[Mail Engine Warning]\e[0m Not found mail_engine_config.yml, so mail_engine won't be able to work."
|
32
|
+
raise ConfigurationError.new("did't find config file at config/mail_engine_config.yml")
|
33
|
+
end
|
34
|
+
|
35
|
+
%w{log_mail user_class_name user_locale_column mount_at default_from access_check_method}.each do |option|
|
36
|
+
raise ConfigurationError.new("Please add :#{option} config into mail_engine_config.yml.") if MailEngine::Base.current_config[option].blank?
|
37
|
+
end
|
38
|
+
|
39
|
+
%w{sendgrid_category sendgrid_user sendgrid_key}.each do |option|
|
40
|
+
raise ConfigurationError.new("Please add :#{option} config under not :sendgrid into mail_engine_config.yml.") if MailEngine::Base.current_config["sendgrid"][option].blank?
|
41
|
+
end
|
42
|
+
rescue ConfigurationError => e
|
43
|
+
puts <<-NOTE
|
44
|
+
\e[1;31;40m[Mail Engine Warning - Below is a sample config]\e[0m
|
45
|
+
===============================================
|
46
|
+
log_mail: true
|
47
|
+
user_class_name: 'User'
|
48
|
+
user_locale_column: 'locale'
|
49
|
+
mount_at: '/admin/mail_engine'
|
50
|
+
intercept_email: 'hlxwell@gmail.com'
|
51
|
+
default_from: 'hlxwell@gmail.com'
|
52
|
+
access_check_method: 'logged_in?'
|
53
|
+
sendgrid:
|
54
|
+
sendgrid_user: 'a@theplant.jp'
|
55
|
+
sendgrid_key: 'plant^o^'
|
56
|
+
sendgrid_category: 'development'
|
57
|
+
===============================================
|
58
|
+
NOTE
|
59
|
+
|
60
|
+
raise e
|
61
|
+
end
|
62
|
+
|
12
63
|
end
|
13
64
|
end
|
14
65
|
end
|
data/lib/mail_engine/engine.rb
CHANGED
@@ -42,15 +42,9 @@ module MailEngine
|
|
42
42
|
|
43
43
|
config.to_prepare do
|
44
44
|
# load config
|
45
|
-
MailEngine::Configuration.
|
46
|
-
|
47
|
-
|
48
|
-
if MailEngine::Base.current_config.present?
|
49
|
-
raise "Please add :user_class_name config into mail_engine_config.yml." if MailEngine::Base.current_config["user_class_name"].blank?
|
50
|
-
MailEngine::USER_MODEL = MailEngine::Base.current_config["user_class_name"].constantize unless defined?(MailEngine::USER_MODEL)
|
51
|
-
else
|
52
|
-
puts "\e[1;31;40m[Mail Engine Warning]\e[0m Not found mail_engine_config.yml, so mail_engine won't be able to work."
|
53
|
-
end
|
45
|
+
MailEngine::Configuration.load_and_check
|
46
|
+
|
47
|
+
MailEngine::USER_MODEL = MailEngine::Base.current_config["user_class_name"].constantize unless defined?(MailEngine::USER_MODEL)
|
54
48
|
end
|
55
49
|
end
|
56
50
|
end
|
@@ -5,9 +5,8 @@ development:
|
|
5
5
|
mount_at: "/admin/mail_engine"
|
6
6
|
access_check_method: "logged_in?"
|
7
7
|
default_from: "your@email.address"
|
8
|
-
|
8
|
+
intercept_email: "dev@youdomain.com"
|
9
9
|
sendgrid:
|
10
|
-
category_name: "you category name"
|
11
10
|
sendgrid_user: "you send grid username"
|
12
11
|
sendgrid_key: "password"
|
13
12
|
sendgrid_category: "my sendgrid category"
|
@@ -18,10 +17,9 @@ test:
|
|
18
17
|
user_locale_column: "locale"
|
19
18
|
mount_at: "/admin/mail_engine"
|
20
19
|
access_check_method: "logged_in?"
|
21
|
-
|
20
|
+
intercept_email: "dev@youdomain.com"
|
22
21
|
default_from: "your@email.address"
|
23
22
|
sendgrid:
|
24
|
-
category_name: "you category name"
|
25
23
|
sendgrid_user: "you send grid username"
|
26
24
|
sendgrid_key: "password"
|
27
25
|
sendgrid_category: "my sendgrid category"
|
@@ -34,7 +32,6 @@ production:
|
|
34
32
|
access_check_method: "logged_in?"
|
35
33
|
default_from: "your@email.address"
|
36
34
|
sendgrid:
|
37
|
-
category_name: "you category name"
|
38
35
|
sendgrid_user: "you send grid username"
|
39
36
|
sendgrid_key: "password"
|
40
37
|
sendgrid_category: "my sendgrid category"
|
data/mail_engine.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mail_engine}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.13"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["michael he"]
|
12
|
-
s.date = %q{2011-03-
|
12
|
+
s.date = %q{2011-03-18}
|
13
13
|
s.description = %q{Rails system mail management solution.}
|
14
14
|
s.email = %q{hlxwell@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class UserMailer < ActionMailer::Base
|
2
2
|
default :from => MailEngine::Base.current_config["default_from"]
|
3
3
|
sendgrid_header do
|
4
|
-
category MailEngine::Base.current_config["sendgrid"]["
|
4
|
+
category MailEngine::Base.current_config["sendgrid"]["sendgrid_category"]
|
5
5
|
|
6
6
|
filters {
|
7
7
|
opentrack "enable" => 1
|
@@ -7,7 +7,7 @@ class UserMailerTest < ActionController::TestCase
|
|
7
7
|
end
|
8
8
|
|
9
9
|
should "send to safe mail address" do
|
10
|
-
MailEngine::Base.current_config["
|
10
|
+
MailEngine::Base.current_config["intercept_email"] = "xxx@xxx.com"
|
11
11
|
mail = UserMailer.notify("x@x.com").deliver
|
12
12
|
assert_equal mail.to, ["xxx@xxx.com"]
|
13
13
|
assert UserMailer.sendgrid_config.to_hash["X-SMTPAPI"].include?("[\"xxx@xxx.com\"]")
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mail_engine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 1
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 13
|
10
|
+
version: 0.1.13
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- michael he
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-03-
|
18
|
+
date: 2011-03-18 00:00:00 +08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|