Ruby on Rails - Gửi email

Action Mailerlà thành phần Rails cho phép các ứng dụng gửi và nhận email. Trong chương này, chúng ta sẽ xem cách gửi email bằng Rails. Hãy bắt đầu tạo mộtemails dự án bằng cách sử dụng lệnh sau.

tp> rails new mailtest

Điều này sẽ tạo ra khuôn khổ cần thiết để tiến hành. Bây giờ, chúng ta sẽ bắt đầu với việc cấu hình ActionMailer.

Action Mailer - Cấu hình

Sau đây là các bước bạn phải làm theo để hoàn thành cấu hình của mình trước khi tiếp tục công việc thực tế -

Đi tới thư mục cấu hình của dự án email của bạn và mở tệp môi trường.rb và thêm dòng sau vào cuối tệp này.

config.action_mailer.delivery_method = :smtp

Nó cho ActionMailer biết rằng bạn muốn sử dụng máy chủ SMTP. Bạn cũng có thể đặt nó thành: sendmail nếu bạn đang sử dụng hệ điều hành dựa trên Unix như Mac OS X hoặc Linux.

Thêm các dòng mã sau vào cuối môi trường của bạn.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  
}

Thay thế mỗi giá trị băm bằng các cài đặt thích hợp cho máy chủ Giao thức truyền thư đơn giản (SMTP) của bạn. Bạn có thể lấy thông tin này từ Nhà cung cấp dịch vụ Internet của mình nếu bạn chưa biết. Bạn không cần thay đổi số cổng 25 và loại xác thực nếu bạn đang sử dụng máy chủ SMTP tiêu chuẩn.

Bạn cũng có thể thay đổi định dạng email mặc định. Nếu bạn muốn gửi email bằng HTML thay vì định dạng văn bản thuần túy, hãy thêm dòng sau vào config / environment.rb -

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

ActionMailer :: Base.default_content_type có thể được đặt thành "văn bản / thuần túy", "văn bản / html" và "văn bản / được làm giàu". Giá trị mặc định là "văn bản / thuần túy".

Bước tiếp theo sẽ là tạo một bưu phẩm

Tạo một Mailer

Sử dụng lệnh sau để tạo một bưu phẩm như sau:

tp> cd emails
emails> rails generate mailer Usermailer

Thao tác này sẽ tạo tệp user_mailer.rb trong thư mục app \ mailer. Kiểm tra nội dung của tệp này như sau:

class Emailer < ActionMailer::Base
end

Hãy tạo một phương thức như sau:

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- Đây là giá trị băm mặc định cho bất kỳ email nào bạn gửi từ bưu phẩm này. Trong trường hợp này, chúng tôi đang đặt: từ tiêu đề thành một giá trị cho tất cả các thư trong lớp này. Điều này có thể được ghi đè trên cơ sở mỗi email

  • mail - Thông điệp email thực tế, chúng tôi đang chuyển các tiêu đề: đến và: chủ đề vào.

Tạo tệp có tên welcome_email.html.erb trong app / views / user_mailer /. Đây sẽ là mẫu được sử dụng cho email, được định dạng bằng 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>

Tiếp theo, chúng ta sẽ tạo một phần văn bản cho ứng dụng này như sau:

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!

Gọi cho Người đưa thư

Trước tiên, hãy tạo một khung Người dùng đơn giản

$ bin/rails generate scaffold user name email login
$ bin/rake db:migrate

Action Mailer được tích hợp độc đáo với Active Job để bạn có thể gửi email ngoài chu kỳ yêu cầu-phản hồi, vì vậy người dùng không phải chờ đợi -

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

Bây giờ, hãy kiểm tra ứng dụng của bạn bằng cách sử dụng http://127.0.0.1:3000/users/new. Nó hiển thị màn hình sau và bằng cách sử dụng màn hình này, bạn sẽ có thể gửi tin nhắn của mình cho bất kỳ ai.

Thao tác này sẽ gửi tin nhắn của bạn và sẽ hiển thị thông báo văn bản "Đã gửi tin nhắn thành công" và xuất ra như sau -

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

Để biết thêm thông tin về cách gửi email bằng Rails, vui lòng truy cập ActionMailer .