#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 упростит тестирование. Я предлагаю вам обсудить с вашим боссом причины, лежащие в основе этого дизайна.