2016-07-07 2 views
0

Недавно я создал приложение для рельсов, чтобы я мог отправлять электронные письма с помощью ActionMailer и Gmail, через SMTP. Приложение будет отправлять электронное письмо пользователю при создании нового пользователя. Все было успешно.Как я могу назвать функцию rails mailer из другого приложения?

Теперь мне было интересно, как я могу использовать это приложение «Mailer», как, возможно, веб-сервис? Как я могу позвонить в мое приложение для почтовой программы из другого приложения, тем самым устраняя необходимость настройки всего кода ActionMailer в дополнительных приложениях, но при этом отправляя электронную почту.

Другое приложение может быть таким же простым, как регистрация нового пользователя с именем и электронной почтой, как это было в приложении Mailer.

Вот мой код:

users_controller.rb

class UsersController < ApplicationController 
before_action :set_user, only: [:show, :edit, :update, :destroy] 

# POST /users 
# POST /users.json 
def create 
    @user = User.new(user_params) 

    respond_to do |format| 
    if @user.save 

     ExampleMailer.sample_email(@user).deliver 

     format.html { redirect_to @user, notice: 'User was successfully  created.' } 
     format.json { render :show, status: :created, location: @user } 
    else 
     format.html { render :new } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
    end 
    end 
end 

private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_user 
    @user = User.find(params[:id]) 
    end 

    def user_params 
    params.require(:user).permit(:name, :email) 
    end 
end 

конфигурации/окр/development.rb

Rails.application.configure do 
.... 
config.action_mailer.delivery_method = :smtp 
# SMTP settings for gmail 
config.action_mailer.smtp_settings = { 
:address    => "smtp.gmail.com", 
:port     => 587, 
:domain    => 'gmail.com', 
:user_name   => ENV['gmail_username'], 
:password    => ENV['gmail_password'], 
:authentication  => "plain", 
:enable_starttls_auto => true 
} 

# Raises error for missing translations 
# config.action_view.raise_on_missing_translations = true 
end 

sample_email.html.erb

<!DOCTYPE html> 
<html> 
<head> 
    <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' /> 
</head> 
    <body> 
    <h1>Hi <%= @user.name %></h1> 
    <p> 
    Sample mail sent using smtp. 
    </p> 
    </body> 
</html> 

example.mailer.rb

class ExampleMailer < ApplicationMailer 
default from: "[email protected]@@@@@@gmail.com" 

def sample_email(user) 
    @user = user 
    mail(to: @user.email, subject: 'Sample Email') 
end 
end 

ответ

0

Вы, вероятно, представляя архитектуру microservices. На это много ресурсов, один пример - this blog post.

Короче говоря, при перемещении ваших функциональных компонентов в изолированные блоки вам необходимо предоставить средства для общения друг с другом. Существует бесконечное множество способов достижения этого, наиболее популярным из которых является HTTP API или использование специализированных брокеров сообщений.

+0

Спасибо за ссылку. Я думаю, что то, что я пытаюсь узнать и выполнить, может быть немного переборщить. Я искал, как использовать что-то вроде «HTTParty», чтобы, возможно, вызвать приложение Mailer и доставить электронное письмо с использованием переменных @name и @email нового приложения. – Twdeveloper

Смежные вопросы