aws_email_bounce 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/CODE_OF_CONDUCT.md +49 -0
- data/Gemfile +53 -0
- data/Gemfile.lock +207 -0
- data/LICENSE.txt +21 -0
- data/README.md +41 -0
- data/README.rdoc +28 -0
- data/Rakefile +6 -0
- data/app/assets/images/.keep +0 -0
- data/app/assets/javascripts/application.js +16 -0
- data/app/assets/javascripts/email_responses.coffee +3 -0
- data/app/assets/stylesheets/application.css +15 -0
- data/app/assets/stylesheets/email_responses.scss +3 -0
- data/app/controllers/application_controller.rb +5 -0
- data/app/controllers/concerns/.keep +0 -0
- data/app/controllers/email_responses_controller.rb +78 -0
- data/app/helpers/application_helper.rb +2 -0
- data/app/helpers/email_responses_helper.rb +2 -0
- data/app/mailers/.keep +0 -0
- data/app/mailers/application_mailer.rb +4 -0
- data/app/mailers/user_mailer.rb +6 -0
- data/app/models/.keep +0 -0
- data/app/models/concerns/.keep +0 -0
- data/app/models/email_response.rb +3 -0
- data/app/views/layouts/application.html.erb +14 -0
- data/app/views/layouts/mailer.html.erb +5 -0
- data/app/views/layouts/mailer.text.erb +1 -0
- data/app/views/user_mailer/welcome.html.erb +0 -0
- data/aws_email_bounce.gemspec +32 -0
- data/bin/bundle +3 -0
- data/bin/console +14 -0
- data/bin/rails +9 -0
- data/bin/rake +9 -0
- data/bin/setup +29 -0
- data/bin/spring +15 -0
- data/config.ru +4 -0
- data/config/application.rb +36 -0
- data/config/boot.rb +3 -0
- data/config/database.yml +54 -0
- data/config/environment.rb +5 -0
- data/config/environments/development.rb +41 -0
- data/config/environments/production.rb +79 -0
- data/config/environments/test.rb +42 -0
- data/config/initializers/assets.rb +11 -0
- data/config/initializers/backtrace_silencers.rb +7 -0
- data/config/initializers/cookies_serializer.rb +3 -0
- data/config/initializers/filter_parameter_logging.rb +4 -0
- data/config/initializers/inflections.rb +16 -0
- data/config/initializers/invalid_email_interceptor.rb +9 -0
- data/config/initializers/mime_types.rb +4 -0
- data/config/initializers/session_store.rb +3 -0
- data/config/initializers/wrap_parameters.rb +14 -0
- data/config/locales/en.yml +23 -0
- data/config/routes.rb +58 -0
- data/config/secrets.yml +22 -0
- data/db/migrate/20160830102515_create_email_responses.rb +10 -0
- data/db/schema.rb +24 -0
- data/db/seeds.rb +7 -0
- data/lib/assets/.keep +0 -0
- data/lib/aws_email_bounce.rb +5 -0
- data/lib/aws_email_bounce/version.rb +3 -0
- data/lib/tasks/.keep +0 -0
- data/log/.keep +0 -0
- data/public/404.html +67 -0
- data/public/422.html +67 -0
- data/public/500.html +66 -0
- data/public/favicon.ico +0 -0
- data/public/robots.txt +5 -0
- data/vendor/assets/javascripts/.keep +0 -0
- data/vendor/assets/stylesheets/.keep +0 -0
- metadata +142 -0
@@ -0,0 +1,15 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
9
|
+
* compiled file so the styles you add here take precedence over styles defined in any styles
|
10
|
+
* defined in the other CSS/SCSS files in this directory. It is generally better to create a new
|
11
|
+
* file per style scope.
|
12
|
+
*
|
13
|
+
*= require_tree .
|
14
|
+
*= require_self
|
15
|
+
*/
|
File without changes
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# class EmailResponsesController < ApplicationController
|
2
|
+
|
3
|
+
# end
|
4
|
+
|
5
|
+
require 'json'
|
6
|
+
require 'aws-sdk'
|
7
|
+
|
8
|
+
class EmailResponsesController < ApplicationController
|
9
|
+
|
10
|
+
# skip_authorization_check
|
11
|
+
# skip_before_action :verify_authenticity_token
|
12
|
+
|
13
|
+
before_action :log_incoming_message
|
14
|
+
|
15
|
+
def bounce
|
16
|
+
# return render json: {} unless aws_message.authentic?
|
17
|
+
if type != 'Bounce'
|
18
|
+
Rails.logger.info "Not a bounce - exiting"
|
19
|
+
return render json: {}
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
bounce = message['bounce']
|
24
|
+
|
25
|
+
bouncerecps = bounce['bouncedRecipients']
|
26
|
+
bouncerecps.each do |recp|
|
27
|
+
email = recp['emailAddress']
|
28
|
+
extra_info = "status: #{recp['status']}, action: #{recp['action']}, diagnosticCode: #{recp['diagnosticCode']}"
|
29
|
+
Rails.logger.info "Creating a bounce record for #{email}"
|
30
|
+
|
31
|
+
EmailResponse.create ({ email: email, response_type: 'bounce', extra_info: extra_info})
|
32
|
+
end
|
33
|
+
|
34
|
+
render json: {}
|
35
|
+
end
|
36
|
+
|
37
|
+
def complaint
|
38
|
+
|
39
|
+
# return render json: {} unless aws_message.authentic?
|
40
|
+
|
41
|
+
if type != 'Complaint'
|
42
|
+
Rails.logger.info "Not a complaint - exiting"
|
43
|
+
return render json: {}
|
44
|
+
end
|
45
|
+
|
46
|
+
complaint = message['complaint']
|
47
|
+
recipients = complaint['complainedRecipients']
|
48
|
+
recipients.each do |recp|
|
49
|
+
email = recp['emailAddress']
|
50
|
+
extra_info = "complaintFeedbackType: #{complaint['complaintFeedbackType']}"
|
51
|
+
EmailResponse.create ( { email: email, response_type: 'complaint', extra_info: extra_info } )
|
52
|
+
end
|
53
|
+
|
54
|
+
render json: {}
|
55
|
+
end
|
56
|
+
|
57
|
+
protected
|
58
|
+
|
59
|
+
def aws_message
|
60
|
+
|
61
|
+
# @aws_message ||= AWS::SNS::Message.new request.raw_post
|
62
|
+
end
|
63
|
+
|
64
|
+
def log_incoming_message
|
65
|
+
print "----------"
|
66
|
+
Rails.logger.info request.raw_post
|
67
|
+
end
|
68
|
+
|
69
|
+
# Weirdly, AWS double encodes the JSON.
|
70
|
+
def message
|
71
|
+
|
72
|
+
@message ||= JSON.parse JSON.parse(request.raw_post)['Message']
|
73
|
+
end
|
74
|
+
|
75
|
+
def type
|
76
|
+
message['notificationType']
|
77
|
+
end
|
78
|
+
end
|
data/app/mailers/.keep
ADDED
File without changes
|
data/app/models/.keep
ADDED
File without changes
|
File without changes
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>AwsEmailBounce</title>
|
5
|
+
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
|
6
|
+
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
|
11
|
+
<%= yield %>
|
12
|
+
|
13
|
+
</body>
|
14
|
+
</html>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= yield %>
|
File without changes
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'aws_email_bounce/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "aws_email_bounce"
|
8
|
+
spec.version = AwsEmailBounce::VERSION
|
9
|
+
spec.authors = ["Sunil Kumar"]
|
10
|
+
spec.email = ["sunilkumar199198@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{It will help you to get bounce_email list from aws}
|
13
|
+
spec.description = %q{get Bounce email list}
|
14
|
+
spec.homepage = "https://gitlab.com/sunilascratech/aws_email_bounce"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
18
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
19
|
+
if spec.respond_to?(:metadata)
|
20
|
+
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
|
21
|
+
else
|
22
|
+
raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
23
|
+
end
|
24
|
+
|
25
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
26
|
+
spec.bindir = "exe"
|
27
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
|
+
spec.require_paths = ["lib"]
|
29
|
+
|
30
|
+
spec.add_development_dependency "bundler", "~> 1.12"
|
31
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
32
|
+
end
|
data/bin/bundle
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "aws_email_bounce"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/rails
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
begin
|
3
|
+
load File.expand_path('../spring', __FILE__)
|
4
|
+
rescue LoadError => e
|
5
|
+
raise unless e.message.include?('spring')
|
6
|
+
end
|
7
|
+
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
8
|
+
require_relative '../config/boot'
|
9
|
+
require 'rails/commands'
|
data/bin/rake
ADDED
data/bin/setup
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
# path to your application root.
|
5
|
+
APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
|
6
|
+
|
7
|
+
Dir.chdir APP_ROOT do
|
8
|
+
# This script is a starting point to setup your application.
|
9
|
+
# Add necessary setup steps to this file:
|
10
|
+
|
11
|
+
puts "== Installing dependencies =="
|
12
|
+
system "gem install bundler --conservative"
|
13
|
+
system "bundle check || bundle install"
|
14
|
+
|
15
|
+
# puts "\n== Copying sample files =="
|
16
|
+
# unless File.exist?("config/database.yml")
|
17
|
+
# system "cp config/database.yml.sample config/database.yml"
|
18
|
+
# end
|
19
|
+
|
20
|
+
puts "\n== Preparing database =="
|
21
|
+
system "bin/rake db:setup"
|
22
|
+
|
23
|
+
puts "\n== Removing old logs and tempfiles =="
|
24
|
+
system "rm -f log/*"
|
25
|
+
system "rm -rf tmp/cache"
|
26
|
+
|
27
|
+
puts "\n== Restarting application server =="
|
28
|
+
system "touch tmp/restart.txt"
|
29
|
+
end
|
data/bin/spring
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# This file loads spring without using Bundler, in order to be fast.
|
4
|
+
# It gets overwritten when you run the `spring binstub` command.
|
5
|
+
|
6
|
+
unless defined?(Spring)
|
7
|
+
require 'rubygems'
|
8
|
+
require 'bundler'
|
9
|
+
|
10
|
+
if (match = Bundler.default_lockfile.read.match(/^GEM$.*?^ (?: )*spring \((.*?)\)$.*?^$/m))
|
11
|
+
Gem.paths = { 'GEM_PATH' => [Bundler.bundle_path.to_s, *Gem.path].uniq.join(Gem.path_separator) }
|
12
|
+
gem 'spring', match[1]
|
13
|
+
require 'spring/binstub'
|
14
|
+
end
|
15
|
+
end
|
data/config.ru
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.expand_path('../boot', __FILE__)
|
2
|
+
|
3
|
+
require 'rails/all'
|
4
|
+
|
5
|
+
# Require the gems listed in Gemfile, including any gems
|
6
|
+
# you've limited to :test, :development, or :production.
|
7
|
+
Bundler.require(*Rails.groups)
|
8
|
+
|
9
|
+
module AwsEmailBounce
|
10
|
+
class Application < Rails::Application
|
11
|
+
# Settings in config/environments/* take precedence over those specified here.
|
12
|
+
# Application configuration should go into files in config/initializers
|
13
|
+
# -- all .rb files in that directory are automatically loaded.
|
14
|
+
|
15
|
+
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
16
|
+
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
17
|
+
# config.time_zone = 'Central Time (US & Canada)'
|
18
|
+
|
19
|
+
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
20
|
+
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
21
|
+
# config.i18n.default_locale = :de
|
22
|
+
|
23
|
+
# Do not swallow errors in after_commit/after_rollback callbacks.
|
24
|
+
config.active_record.raise_in_transactional_callbacks = true
|
25
|
+
|
26
|
+
config.action_mailer.smtp_settings = {
|
27
|
+
:user_name => "AKIAJOSHKBK7KGFMPJYA",
|
28
|
+
:password => "AqbKSiVThhZkdY+BZQ+LbP6SCNxIBosOugSnIB0UEcdo",
|
29
|
+
:domain => "localhost",
|
30
|
+
:address => "email-smtp.us-west-2.amazonaws.com",
|
31
|
+
:port => 587,
|
32
|
+
:authentication => :plain,
|
33
|
+
:enable_starttls_auto => true
|
34
|
+
}
|
35
|
+
end
|
36
|
+
end
|
data/config/boot.rb
ADDED
data/config/database.yml
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# MySQL. Versions 5.0+ are recommended.
|
2
|
+
#
|
3
|
+
# Install the MYSQL driver
|
4
|
+
# gem install mysql2
|
5
|
+
#
|
6
|
+
# Ensure the MySQL gem is defined in your Gemfile
|
7
|
+
# gem 'mysql2'
|
8
|
+
#
|
9
|
+
# And be sure to use new-style password hashing:
|
10
|
+
# http://dev.mysql.com/doc/refman/5.0/en/old-client.html
|
11
|
+
#
|
12
|
+
default: &default
|
13
|
+
adapter: mysql2
|
14
|
+
encoding: utf8
|
15
|
+
pool: 5
|
16
|
+
username: root
|
17
|
+
password: password
|
18
|
+
socket: /var/run/mysqld/mysqld.sock
|
19
|
+
|
20
|
+
development:
|
21
|
+
<<: *default
|
22
|
+
database: aws_email_bounce_development
|
23
|
+
|
24
|
+
# Warning: The database defined as "test" will be erased and
|
25
|
+
# re-generated from your development database when you run "rake".
|
26
|
+
# Do not set this db to the same as development or production.
|
27
|
+
test:
|
28
|
+
<<: *default
|
29
|
+
database: aws_email_bounce_test
|
30
|
+
|
31
|
+
# As with config/secrets.yml, you never want to store sensitive information,
|
32
|
+
# like your database password, in your source code. If your source code is
|
33
|
+
# ever seen by anyone, they now have access to your database.
|
34
|
+
#
|
35
|
+
# Instead, provide the password as a unix environment variable when you boot
|
36
|
+
# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database
|
37
|
+
# for a full rundown on how to provide these environment variables in a
|
38
|
+
# production deployment.
|
39
|
+
#
|
40
|
+
# On Heroku and other platform providers, you may have a full connection URL
|
41
|
+
# available as an environment variable. For example:
|
42
|
+
#
|
43
|
+
# DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase"
|
44
|
+
#
|
45
|
+
# You can use this database configuration with:
|
46
|
+
#
|
47
|
+
# production:
|
48
|
+
# url: <%= ENV['DATABASE_URL'] %>
|
49
|
+
#
|
50
|
+
production:
|
51
|
+
<<: *default
|
52
|
+
database: aws_email_bounce_production
|
53
|
+
username: aws_email_bounce
|
54
|
+
password: <%= ENV['AWS_EMAIL_BOUNCE_DATABASE_PASSWORD'] %>
|
@@ -0,0 +1,41 @@
|
|
1
|
+
Rails.application.configure do
|
2
|
+
# Settings specified here will take precedence over those in config/application.rb.
|
3
|
+
|
4
|
+
# In the development environment your application's code is reloaded on
|
5
|
+
# every request. This slows down response time but is perfect for development
|
6
|
+
# since you don't have to restart the web server when you make code changes.
|
7
|
+
config.cache_classes = false
|
8
|
+
|
9
|
+
# Do not eager load code on boot.
|
10
|
+
config.eager_load = false
|
11
|
+
|
12
|
+
# Show full error reports and disable caching.
|
13
|
+
config.consider_all_requests_local = true
|
14
|
+
config.action_controller.perform_caching = false
|
15
|
+
|
16
|
+
# Don't care if the mailer can't send.
|
17
|
+
config.action_mailer.raise_delivery_errors = false
|
18
|
+
|
19
|
+
# Print deprecation notices to the Rails logger.
|
20
|
+
config.active_support.deprecation = :log
|
21
|
+
|
22
|
+
# Raise an error on page load if there are pending migrations.
|
23
|
+
config.active_record.migration_error = :page_load
|
24
|
+
|
25
|
+
# Debug mode disables concatenation and preprocessing of assets.
|
26
|
+
# This option may cause significant delays in view rendering with a large
|
27
|
+
# number of complex assets.
|
28
|
+
config.assets.debug = true
|
29
|
+
|
30
|
+
# Asset digests allow you to set far-future HTTP expiration dates on all assets,
|
31
|
+
# yet still be able to expire them through the digest params.
|
32
|
+
config.assets.digest = true
|
33
|
+
|
34
|
+
# Adds additional error checking when serving assets at runtime.
|
35
|
+
# Checks for improperly declared sprockets dependencies.
|
36
|
+
# Raises helpful error messages.
|
37
|
+
config.assets.raise_runtime_errors = true
|
38
|
+
|
39
|
+
# Raises error for missing translations
|
40
|
+
# config.action_view.raise_on_missing_translations = true
|
41
|
+
end
|