如何从其他应用程序调用我的rails邮件程序功能?

时间:2016-07-07 19:15:39

标签: ruby-on-rails ruby-on-rails-4 actionmailer

我最近创建了一个rails应用,以便我可以通过ActionMailer使用SMTP Gmail 发送电子邮件。当创建新用户时,该应用程序将向用户发送电子邮件。一切都很成功。

现在我想知道如何使用这个“Mailer App”,或许是一个网络服务? 我如何从不同的应用程序调用我的邮件程序应用程序,从而无需在其他应用程序中设置所有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: "t@@@@@@@gmail.com"

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

1 个答案:

答案 0 :(得分:0)

您可能正在构想一种微服务架构。有很多资源,一个例子是this blog post

简而言之,在将功能组件移动到隔离块时,必须为它们提供相互通信的方法。有很多种方法可以实现这一点,最流行的是HTTP API或使用专用的消息代理。

相关问题