Ruby on Rails 2.1 - Gửi email
ActionMailerlà 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 với việc tạo emails dự án bằng cách sử dụng lệnh sau.
C:\ruby> rails -d mysql emails
Ở đây chúng tôi đang sử dụng -d mysqlđể xác định sở thích của chúng tôi để sử dụng cơ sở dữ liệu MySQL. Chúng tôi có thể chỉ định bất kỳ tên cơ sở dữ liệu nào khác như oracle hoặc postgress bằng cách sử dụng-dLựa chọn. Theo mặc định, Rails sử dụngSQLite cơ sở dữ liệu.
Thiết lập cơ sở dữ liệu
Mặc dù chúng tôi không sử dụng cơ sở dữ liệu trong ứng dụng của mình, nhưng Rails cần nó để tiếp tục. Vì vậy, hãy thực hiện các bước bổ sung này.
Dưới đây là cách tạo cơ sở dữ liệu -
mysql> create database emails;
Query OK, 1 row affected (0.01 sec)
mysql> grant all privileges on emails.*
to 'root'@'localhost' identified by 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
Để hướng dẫn Rails định vị cơ sở dữ liệu, hãy chỉnh sửa tệp cấu hình ~ \ upload \ config \ database.yml và thay đổi tên cơ sở dữ liệu thành sách dạy nấu ăn. Khi bạn hoàn thành, nó sẽ trông như sau:
development:
adapter: mysql
encoding: utf8
database: emails
username: root
password: password
host: localhost
test:
adapter: mysql
encoding: utf8
database: emails
username: root
password: password
host: localhost
production:
adapter: mysql
encoding: utf8
database: emails
username: root
password: password
host: localhost
Action Mailer - Cấu hình
Sau đây là các bước bạn phải làm để 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ở environment.rb và thêm dòng sau vào cuối tệp này.
ActionMailer::Base.delivery_method = :smtp
Nó thông báo cho ActionMailer rằng bạn muốn sử dụng máy chủ SMTP. Bạn cũng có thể đặt nó là: 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.
ActionMailer::Base.smtp_settings = {
:address => "smtp.tutorialspoint.com",
:port => 25,
:domain => "tutorialspoint.com",
:authentication => :login,
:user_name => "username",
:password => "password",
}
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 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:
C:\ruby\> cd emails
C:\ruby\emails> ruby script/generate mailer Emailer
Nó sẽ tạo một tệp emailer.rb trong thư mục app / models. Kiểm tra nội dung của tệp này như sau:
class Emailer < ActionMailer::Base
end
Bây giờ, hãy tạo một phương thức bên trong lớp ActionMailer :: Base như sau:
class Emailer < ActionMailer::Base
def contact(recipient, subject, message, sent_at = Time.now)
@subject = subject
@recipients = recipient
@from = '[email protected]'
@sent_on = sent_at
@body["title"] = 'This is title'
@body["email"] = '[email protected]'
@body["message"] = message
@headers = {}
end
end
Phương thức liên hệ có bốn tham số: người nhận, chủ đề, tin nhắn và sent_at, xác định thời điểm email được gửi. Phương thức này cũng xác định sáu tham số tiêu chuẩn là một phần của mọi phương thức ActionMailer -
@subject xác định chủ đề e-mail.
@body là một hàm băm Ruby chứa các giá trị mà bạn có thể điền vào mẫu thư. Bạn đã tạo ba cặp khóa-giá trị: tiêu đề, email và tin nhắn
@recipient là danh sách những người mà tin nhắn đang được gửi đến.
@from xác định e-mail đến từ ai.
@sent_on nhận tham số sent_at và đặt dấu thời gian của email.
@headers là một hàm băm khác cho phép bạn sửa đổi tiêu đề e-mail. Ví dụ: bạn có thể đặt kiểu MIME của e-mail nếu bạn muốn gửi e-mail văn bản thuần túy hoặc HTML.
Tạo bộ điều khiển
Bây giờ, chúng ta sẽ tạo một bộ điều khiển cho ứng dụng này như sau:
C:\ruby\emails> ruby script/generate controller Emailer
Hãy xác định một phương thức điều khiển sendmail trong app / controllers / emailer_controller.rb, phương thức này sẽ gọi phương thức Model để gửi một email thực như sau:
class EmailerController < ApplicationController
def sendmail
recipient = params[:email]
subject = params[:subject]
message = params[:message]
Emailer.deliver_contact(recipient, subject, message)
return if request.xhr?
render :text => 'Message sent successfully'
end
end
Để gửi e-mail bằng phương thức liên hệ của người gửi thư, bạn phải thêm deliver_ vào đầu của tên phương thức. Bạn thêm trả về nếu request.xhr ?, để bạn có thể thoát sang Rails Java Script (RJS) nếu trình duyệt không hỗ trợ JavaScript và sau đó hướng dẫn phương thức hiển thị tin nhắn văn bản.
Bạn gần như đã hoàn tất ngoại trừ việc chuẩn bị một màn hình mà từ đó bạn sẽ lấy thông tin người dùng để gửi email. Hãy xác định một chỉ mục phương thức màn hình trong bộ điều khiển và sau đó trong phần tiếp theo, chúng ta sẽ xác định tất cả các chế độ xem cần thiết -
Thêm mã sau vào tệp emailer_controller.rb.
def index
render :file => 'app\views\emailer\index.html.erb'
end
Xác định chế độ xem
Xác định chế độ xem trong app \ views \ email \ index.html.erb. Đây sẽ được gọi là trang mặc định cho ứng dụng và cho phép người dùng nhập tin nhắn và gửi email được yêu cầu -
<h1>Send Email</h1>
<% form_tag :action => 'sendmail' do %>
<p><label for="email_subject">Subject</label>:
<%= text_field 'email', 'subject' %></p>
<p><label for="email_recipient">Recipient</label>:
<%= text_field 'email', 'recipient' %></p>
<p><label for="email_message">Message</label><br/>
<%= text_area 'email', 'message' %></p>
<%= submit_tag "Send" %>
<% end %>
Ngoài giao diện trên, chúng ta cần thêm một mẫu nữa, sẽ được sử dụng bởi phương thức liên hệ của Người gửi email khi gửi tin nhắn. Đây chỉ là văn bản với các trình giữ chỗ Rails <% =%> tiêu chuẩn nằm rải rác khắp nơi.
Chỉ cần đặt mã sau vào app/views/contact.html.erb tập tin.
Hi!
You are having one email message from <%= @email %> with a title
<%= @title %>
and following is the message:
<%= @message %>
Thanks
Nghỉ ngơi để kiểm tra
Trước khi kiểm tra, hãy đảm bảo rằng máy của bạn được kết nối với Internet và Máy chủ Email và Máy chủ trang web của bạn đang hoạt động.
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/Emailer/index. 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.
Sau khi gửi tin nhắn, nó sẽ hiển thị thông báo văn bản - "Đã gửi tin nhắn thành công".
Gửi email HTML bằng Rails
Để gửi thư dưới dạng HTML, hãy đảm bảo rằng chế độ xem của bạn (tệp .erb) tạo HTML và đặt loại nội dung thành html trong emails/app/models/emailer.rb tập tin như sau -
class Emailer < ActionMailer::Base
def contact(recipient, subject, message, sent_at = Time.now)
@subject = subject
@recipients = recipient
@from = '[email protected]'
@sent_on = sent_at
@body["title"] = 'This is title'
@body["email"] = '[email protected]'
@body["message"] = message
@headers = {content_type => 'text/html'}
end
end
Để biết chi tiết đầy đủ về ActionMailer, hãy xem tài liệu chuẩn của Ruby.