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

问题描述:

我最近创建了一个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 

你可能设想一个微服务架构。有很多资源,其中一个例子是this blog post

简而言之,将功能组件移至独立块时,您必须提供相互通信的方法。有很多种方法可以实现,最流行的是HTTP API或使用专用的消息代理。

+0

感谢您的链接。我认为对于我正在努力学习和完成的事情来说可能有点矫枉过正。我正在寻找如何使用'HTTParty'这样的东西来调用Mailer App,并使用新应用程序的@name和@email变量发送一封电子邮件。 – Twdeveloper