2016-07-07 82 views
0

我最近創建了一個rails應用程序,以便我可以使用ActionMailerGmail通過SMTP發送電子郵件。當創建新用戶時,該應用程序將向用戶發送電子郵件。一切都很成功。如何從其他應用程序調用我的rails郵件程序功能?

現在我想知道如何使用這個「梅勒應用程序」,或許是一個網絡服務? 我會如何從其他應用程序調用我的郵件應用程序,從而無需在其他應用程序中設置所有ActionMailer代碼,但可以提供電子郵件。

其他應用程序可以像使用名稱和電子郵件註冊新用戶一樣簡單,就像我在Mailer App中所做的一樣。

這裏是我的代碼:

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 

配置/ ENV/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

你可能設想一個微服務架構。有很多資源,其中一個例子是this blog post

簡而言之,將功能組件移至獨立塊時,您必須提供相互通信的方法。有很多種方法可以實現,最流行的是HTTP API或使用專用的消息代理。

+0

感謝您的鏈接。我認爲對於我正在努力學習和完成的事情來說可能有點矯枉過正。我正在尋找如何使用'HTTParty'這樣的東西來調用Mailer App,並使用新應用程序的@name和@email變量發送一封電子郵件。 – Twdeveloper

相關問題