Action Mailer是Rails組件,它允許應用程式發送和接收電子郵件。在本章中,我們將看到如何使用Rails發送電子郵件。讓我們使用下面的命令開始創建一個電子郵件項目。
tp> rails new mailtest
這將創建繼續所需的框架。現在,我們將從配置ActionMailer開始。
Action Mailer - Configuration
以下是在繼續實際工作之前完成配置所必須遵循的步驟;
轉到emails項目的config文件夾,打開environment.rb文件,並在該文件底部添加以下行。
config.action_mailer.delivery_method = :smtp
它告訴ActionMailer您要使用SMTP伺服器。如果您使用的是基於Unix的作業系統(如Mac OS X或Linux),也可以將其設置爲:sendmail。
在environment.rb的底部添加以下代碼行。
config.action_mailer.smtp_settings = { address: 'smtp.gmail.com', port: 587, domain: 'example.com', user_name: '<username>', password: '<password>', authentication: 'plain', enable_starttls_auto: true }
用簡單郵件傳輸協議(SMTP)伺服器的正確設置替換每個哈希值。如果您還不知道,可以從您的Internet服務提供商處獲取此信息。如果使用標準的SMTP伺服器,則不需要更改埠號25和身份驗證類型。
您也可以更改默認電子郵件格式。如果您希望用HTML而不是純文本格式發送電子郵件,請將以下行添加到config/environment.rb以及−
ActionMailer::Base.default_content_type = "text/html"
ActionMailer::Base.default_content_type可以設置爲「text/plain」、「text/html」和「text/enriched」。默認值爲「文本/純文本」。
下一步是創建一個郵件程序
Generate a Mailer
使用以下命令生成郵件程序,如下所示−
tp> cd emails emails> rails generate mailer Usermailer
這將在app\mailer目錄中創建一個文件user\mailer.rb。檢查此文件的內容,如下所示−
class Emailer < ActionMailer::Base end
讓我們創建一個方法,如下所示−
class UserMailer < ApplicationMailer default from: 'notifications@example.com' def welcome_email(user) @user = user @url = 'http://www.gmail.com' mail(to: @user.email, subject: 'Welcome to My Awesome Site') end end
默認哈希−這是您從此郵件程序發送的任何電子郵件的默認值的哈希。在本例中,我們將:from頭設置爲該類中所有消息的值。這可以在每個電子郵件的基礎上覆蓋
mail−實際的電子郵件,我們將傳入:to和:subject標題。
在app/views/user_mailer/中創建一個名爲welcome_email.html.erb的文件。這將是電子郵件使用的模板,格式爲HTML−
<html> <head> <meta content = 'text/html; charset = UTF-8' http-equiv = 'Content-Type' /> </head> <body> <h1>Welcome to example.com, <%= @user.name %></h1> <p> You have successfully signed up to example.com,your username is: <%= @user.login %>.<br> </p> <p> To login to the site, just follow this link: <%= @url %>. </p> <p>Thanks for joining and have a great day!</p> </body> </html>
接下來,我們將爲這個應用程式創建一個文本部分,如下所示−
Welcome to example.com, <%= @user.name %> =============================================== You have successfully signed up to example.com, your username is: <%= @user.login %>. To login to the site, just follow this link: <%= @url %>. Thanks for joining and have a great day!
Calling the Mailer
首先,讓我們創建一個簡單的用戶腳手架
$ bin/rails generate scaffold user name email login $ bin/rake db:migrate
Action Mailer與Active Job很好地集成在一起,因此您可以在請求-響應周期之外發送電子郵件,因此用戶不必等待它;
class UsersController < ApplicationController # POST /users # POST /users.json def create @user = User.new(params[:user]) respond_to do |format| if @user.save # Tell the UserMailer to send a welcome email after save UserMailer.welcome_email(@user).deliver_later format.html { redirect_to(@user, notice: 'User was successfully created.') } format.json { render json: @user, status: :created, location: @user } else format.html { render action: 'new' } format.json { render json: @user.errors, status: :unprocessable_entity } end end end end
現在,使用http://127.0.0.1:3000/users/new測試您的應用程式。它顯示以下螢幕,通過使用此螢幕,您將能夠向任何人發送您的消息。
這將發送您的消息,並顯示文本消息「message sent successfully」(消息發送成功)並輸出如下−
sent mail to kittuprasad700@gmail.com (2023.Sms) [ActiveJob] [ActionMailler::DeliveryJob] [2cfde3c-260e-4a33-1a6ada13a9b] Date: Thu, 09 Jul 2015 11:44:05 +0530 From: notification@example.com To: kittuprasad700@gmail.com Message-Id: <559e112d63c57_f1031e7f23467@kiranPro.mail> Subject: Welcome to My Awesome Site Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="--mimepart_559e112d601c8_f1031e7f20233f5"; charset=UTF-8 Content-Transfer-Encoding:7bit
有關如何使用Rails發送電子郵件的更多信息,請瀏覽ActionMailer。