Ruby on Rails - ส่งอีเมล

Action Mailerเป็นส่วนประกอบ Rails ที่ช่วยให้แอปพลิเคชันสามารถส่งและรับอีเมลได้ ในบทนี้เราจะดูวิธีการส่งอีเมลโดยใช้ Rails มาเริ่มสร้างไฟล์emails โครงการโดยใช้คำสั่งต่อไปนี้

tp> rails new mailtest

สิ่งนี้จะสร้างกรอบที่จำเป็นเพื่อดำเนินการต่อ ตอนนี้เราจะเริ่มต้นด้วยการกำหนดค่า ActionMailer

Action Mailer - การกำหนดค่า

ต่อไปนี้เป็นขั้นตอนที่คุณต้องปฏิบัติตามเพื่อกำหนดค่าให้เสร็จสิ้นก่อนดำเนินการทำงานจริง -

ไปที่โฟลเดอร์ config ของโครงการอีเมลของคุณและเปิดไฟล์ environment.rb และเพิ่มบรรทัดต่อไปนี้ที่ด้านล่างของไฟล์นี้

config.action_mailer.delivery_method = :smtp

จะบอก ActionMailer ว่าคุณต้องการใช้เซิร์ฟเวอร์ SMTP คุณยังสามารถตั้งค่าให้เป็น: sendmail ได้หากคุณใช้ระบบปฏิบัติการที่ใช้ Unix เช่น Mac OS X หรือ Linux

เพิ่มบรรทัดของโค้ดต่อไปนี้ที่ด้านล่างของ 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  
}

แทนที่ค่าแฮชแต่ละค่าด้วยการตั้งค่าที่เหมาะสมสำหรับเซิร์ฟเวอร์ Simple Mail Transfer Protocol (SMTP) ของคุณ คุณสามารถรับข้อมูลนี้จากผู้ให้บริการอินเทอร์เน็ตของคุณหากคุณไม่ทราบ คุณไม่จำเป็นต้องเปลี่ยนพอร์ตหมายเลข 25 และประเภทการรับรองความถูกต้องหากคุณใช้เซิร์ฟเวอร์ SMTP มาตรฐาน

คุณยังสามารถเปลี่ยนรูปแบบข้อความอีเมลเริ่มต้นได้ หากคุณต้องการส่งอีเมลในรูปแบบ HTML แทนรูปแบบข้อความธรรมดาให้เพิ่มบรรทัดต่อไปนี้ใน config / environment.rb ด้วย -

ActionMailer::Base.default_content_type = "text/html"

ActionMailer :: Base.default_content_type สามารถตั้งค่าเป็น "text / plain", "text / html" และ "text / enriched" ค่าเริ่มต้นคือ "text / plain"

ขั้นตอนต่อไปคือการสร้างจดหมาย

สร้างจดหมาย

ใช้คำสั่งต่อไปนี้เพื่อสร้างจดหมายดังนี้ -

tp> cd emails
emails> rails generate mailer Usermailer

สิ่งนี้จะสร้างไฟล์ user_mailer.rb ในไดเร็กทอรี app \ mailer ตรวจสอบเนื้อหาของไฟล์นี้ดังนี้ -

class Emailer < ActionMailer::Base
end

มาสร้างวิธีการหนึ่งดังนี้ -

class UserMailer < ApplicationMailer
   default from: '[email protected]'
   
   def welcome_email(user)
      @user = user
      @url  = 'http://www.gmail.com'
      mail(to: @user.email, subject: 'Welcome to My Awesome Site')
   end
   
end
  • default Hash- นี่คือแฮชของค่าเริ่มต้นสำหรับอีเมลใด ๆ ที่คุณส่งจากจดหมายนี้ ในกรณีนี้เรากำลังตั้งค่า: from header เป็นค่าสำหรับข้อความทั้งหมดในคลาสนี้ สิ่งนี้สามารถแทนที่ได้ในแต่ละอีเมล

  • mail - ข้อความอีเมลจริงเรากำลังส่งส่วนหัว: ถึงและ: หัวเรื่องใน

สร้างไฟล์ชื่อ welcome_email.html.erb ใน app / views / user_mailer / นี่จะเป็นเทมเพลตที่ใช้สำหรับอีเมลโดยจัดรูปแบบเป็น 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!

โทรหาผู้ส่งจดหมาย

ก่อนอื่นมาสร้างโครงสำหรับผู้ใช้อย่างง่าย

$ 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 มันจะแสดงหน้าจอต่อไปนี้และเมื่อใช้หน้าจอนี้คุณจะสามารถส่งข้อความของคุณไปหาใครก็ได้

สิ่งนี้จะส่งข้อความของคุณและจะแสดงข้อความ "ส่งข้อความเรียบร้อยแล้ว" และผลลัพธ์ดังต่อไปนี้ -

sent mail to [email protected] (2023.Sms)
[ActiveJob] [ActionMailler::DeliveryJob] [2cfde3c-260e-4a33-1a6ada13a9b] Date: Thu, 09 Jul 2015 11:44:05 +0530
From: [email protected]
To: [email protected]
Message-Id: <[email protected]>
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