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