отправка электронной почты с задержкой

#ruby-on-rails #amazon-web-services #email

#ruby-on-rails #amazon-веб-сервисы #Адрес электронной почты

Вопрос:

Я написал свой веб-сайт с помощью Ruby on Rails. Я хочу добавить почтовые службы в свое приложение, чтобы в определенном состоянии пользователь получал электронное письмо, содержащее некоторые подробности для них. Моя проблема в том, что когда я тестирую в режиме разработки, я получаю электронные письма по крайней мере с задержкой в один час, и я не знаю, почему? Зависит ли это от конфигурации сервера?

Я использую Amazon в качестве своего почтового шлюза

Это мой код для отправки электронных писем

  module Api
   module V1
     module User
      module DailyCheckin
       class Create


      attribute :state, ::String
      attribute :user, ::User

      validates :state, presence: true
      validates :user, presence: true

      def call

        add_error!(I18n.t('messages.daily_checkin.errors.state_invalid')) unless state.present?
        @checkin = ::DailyCheckin.create!(
            mood: ::Mood.find_by(state: state),
            user: user
        )
        if state == "overwhelmed" || state == "not_coping"
          logs = {
              user_id: user.id,
              email: user.profile.email,
              organisation: user.organisation.name,
              phone_number: user.profile.phone,
              mood: state
          }

          ::Api::V1::ApiGateway::Mail::DailyCheckinRiskNotice.call(logs: logs) if ENV.fetch("SEND_GATEWAY_MAIL", "true").eql? "true"
          DailyCheckinRiskWorker.perform_async(user.profile.email, user.profileamp;.current_first_name, "daily_checkin_risk")
        end
        add_error!(Helpers::ErrorsHandler.parse(@checkin.errors)) unless @checkin.valid?
        context[:mood] = @checkin.mood
      end
    end
  end
end
 end
 end
  

и это мои шлюзы

 module Api
  module V1
    module ApiGateway
      module Mail
       class DailyCheckinRiskNotice
         include HTTParty
          attribute :logs

      validates :logs, presence: true

      def call
        options = {
            headers: {
                'Content-Type' => 'application/json',
                'x-api-key' => ENV.fetch('MAIL_API_GATEWAY_API_KEY', '')
            },
            body: {
                email_id: ENV.fetch('USER_ACTIVITY_NOTICE_MAIL_ID', ''),
                content: {
                    logs: logs
                }
            }.to_json
        }
        response = HTTParty.post('', options)
        add_error!(response.body) unless [201, 200].include?(response.code.to_i)

        context[:body] = response.parsed_response
      end
    end
    end
   end
  end
end
  

это моя модель настроения

 class Mood < ApplicationRecord
  enum state: %i[not_coping overwhelmed ok good great]

  has_many :daily_checkins
 end
  

и этот мой метод создания, который создает мои журналы, является состоянием, которое не справлялось или перегружено

  def create
    result = ::Api::V1::User::DailyCheckin::Create.call(create_checkin_params.merge(user: @current_user))
    return render json: Helpers::ErrorsHandler.view_parse(result.errors), status: :bad_request if result.errors

    @mood = result.mood
    render 'api/v1/moods/show'
  end
  

Комментарии:

1. Есть ли причина, по которой вы не используете ActionMailer для отправки электронных писем?

2. Я бы посоветовал не использовать SES непосредственно на локальном. Проще тестировать с помощью чего-то вроде Mailcatcher или Mailhog — и дешевле.

3. @TheGeorgeous на месте. Протестируйте фактического поставщика электронной почты в рабочем или промежуточном режиме.

4. @TheGeorgeous Нет, я просто слежу за разработкой проектов, которые хочет мой босс

5. @HadiVarposhti для задержки может быть несколько причин. Опубликованный вами код содержит множество неидиоматических шаблонов для проекта Rails. Без дополнительной информации трудно понять, почему вы столкнулись с этой задержкой. Тем не менее, SMTP упростит тестирование. Я предлагаю вам обсудить с вашим боссом причины, лежащие в основе этого дизайна.