module JamRuby class EmailError < ActiveRecord::Base self.table_name = "email_errors" belongs_to :user, :class_name => 'JamRuby::User' default_scope :order => 'email_date DESC' ERR_BOUNCE = :bounce ERR_INVALID = :invalid SENDGRID_UNAME = 'jamkazam' SENDGRID_PASSWD = 'jamjamblueberryjam' def self.sendgrid_url(resource, action='get', params='') start_date, end_date = self.date_range "https://api.sendgrid.com/api/#{resource}.#{action}.json?api_user=#{EmailError::SENDGRID_UNAME}&api_key=#{EmailError::SENDGRID_PASSWD}&date=1&start_date=#{start_date.strftime('%Y-%m-%d')}&end_date=#{end_date.strftime('%Y-%m-%d')}&#{params}" end def self.date_range tt = Time.now if eerr = self.first return [eerr.email_date, tt] end [tt - 1.year, tt] end def self.did_capture?(email_addy) self.where(:email_address => email_addy).limit(1).first.present? end def self.bounce_errors uu = self.sendgrid_url('bounces') response = RestClient.get(uu) if 200 == response.code return JSON.parse(response.body).collect do |jj| next if self.did_capture?(jj['email']) ee = EmailError.new ee.error_type = 'bounces' ee.email_address = jj['email'] ee.user_id = User.where(:email => ee.email_address).pluck(:id).first ee.status = jj['status'] ee.email_date = jj['created'] ee.reason = jj['reason'] ee.save! # RestClient.delete(self.sendgrid_url('bounces', 'delete', "email=#{ee.email_address}")) ee end end end def self.invalid_errors uu = self.sendgrid_url('invalidemails') response = RestClient.get(uu) if 200 == response.code return JSON.parse(response.body).collect do |jj| next if self.did_capture?(jj['email']) ee = EmailError.new ee.error_type = 'invalidemails' ee.email_address = jj['email'] ee.user_id = User.where(:email => ee.email_address).pluck(:id).first ee.email_date = jj['created'] ee.reason = jj['reason'] ee.save! uu = # RestClient.delete(self.sendgrid_url('invalidemails', 'delete', "email=#{ee.email_address}")) ee end end end def self.capture_errors EmailError.bounce_errors EmailError.invalid_errors end end end