Ruby on Rails 2.1-이메일 보내기

ActionMailer애플리케이션이 이메일을 보내고받을 수 있도록하는 Rails 구성 요소입니다. 이 장에서는 Rails를 사용하여 이메일을 보내는 방법을 살펴 보겠습니다.

생성부터 시작하겠습니다. emails 다음 명령을 사용하여 프로젝트.

C:\ruby> rails -d mysql emails

여기서 우리는 -d mysqlMySQL 데이터베이스 사용에 대한 관심을 지정하는 옵션입니다. oracle 또는 postgress 와 같은 다른 데이터베이스 이름을 지정할 수 있습니다 .-d선택권. 기본적으로 Rails는SQLite 데이터 베이스.

데이터베이스 설정

애플리케이션에서 데이터베이스를 사용하지 않지만 Rails는이를 계속 진행해야합니다. 따라서 이러한 추가 단계를 수행해 보겠습니다.

다음은 데이터베이스를 만드는 방법입니다.

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)

Rails가 데이터베이스를 찾도록 지시하려면 구성 파일 ~ \ upload \ config \ database.yml을 편집하고 데이터베이스 이름을 cookbook으로 변경합니다. 완료되면 다음과 같이 보일 것입니다.

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 – 구성

다음은 실제 작업을 진행하기 전에 구성을 완료하기 위해 따라야하는 단계입니다. −

이메일 프로젝트의 config 폴더로 이동하여 environment.rb 파일을 열고이 파일의 맨 아래에 다음 행을 추가하십시오.

ActionMailer::Base.delivery_method = :smtp

SMTP 서버를 사용할 것임을 ActionMailer에 알립니다. Mac OS X 또는 Linux와 같은 Unix 기반 운영 체제를 사용하는 경우 : sendmail로 설정할 수도 있습니다.

environment.rb의 맨 아래에도 다음 코드 줄을 추가하십시오.

ActionMailer::Base.smtp_settings = {
   :address => "smtp.tutorialspoint.com",
   :port => 25,
   :domain => "tutorialspoint.com",
   :authentication => :login,
   :user_name => "username",
   :password => "password",
}

각 해시 값을 SMTP (Simple Mail Transfer Protocol) 서버에 대한 적절한 설정으로 바꿉니다. 이미 모르는 경우 인터넷 서비스 제공 업체에서이 정보를 가져올 수 있습니다. 표준 SMTP 서버를 사용하는 경우 포트 번호 25와 인증 유형을 변경할 필요가 없습니다.

기본 이메일 메시지 형식을 변경할 수도 있습니다. 일반 텍스트 형식 대신 HTML로 이메일을 보내려면 다음 행을 config / environment.rb에도 추가하십시오.

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

ActionMailer :: Base.default_content_type은 "text / plain", "text / html"및 "text / enriched"로 설정할 수 있습니다. 기본값은 "text / plain"입니다.

다음 단계는 메일러를 만드는 것입니다.

메일러 생성

다음 명령을 사용하여 다음과 같이 메일러를 생성하십시오-

C:\ruby\> cd emails
C:\ruby\emails> ruby script/generate mailer Emailer

app / models 디렉토리에 emailer.rb 파일이 생성됩니다. 다음과 같이이 파일의 내용을 확인하십시오-

class Emailer < ActionMailer::Base
end

이제 다음과 같이 ActionMailer :: Base 클래스 내에 하나의 메서드를 생성 해 보겠습니다.

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

연락 방법에는 수신자, 제목, 메시지 및 이메일 전송시기를 정의하는 sent_at의 네 가지 매개 변수가 있습니다. 이 메서드는 또한 모든 ActionMailer 메서드의 일부인 6 개의 표준 매개 변수를 정의합니다.

  • @subject는 전자 메일 제목을 정의합니다.

  • @body는 메일 템플릿을 채울 수있는 값을 포함하는 Ruby 해시입니다. 제목, 이메일, 메시지의 세 가지 키-값 쌍을 만들었습니다.

  • @recipients는 메시지를받는 사람의 목록입니다.

  • @from은 이메일의 발신자를 정의합니다.

  • @sent_on은 sent_at 매개 변수를 취하고 이메일의 타임 스탬프를 설정합니다.

  • @headers는 전자 메일 헤더를 수정할 수있는 또 다른 해시입니다. 예를 들어 일반 텍스트 또는 HTML 전자 메일을 보내려는 경우 전자 메일의 MIME 유형을 설정할 수 있습니다.

컨트롤러 생성

이제 다음과 같이이 애플리케이션에 대한 컨트롤러를 생성합니다.

C:\ruby\emails> ruby script/generate controller Emailer

컨트롤러 메서드를 정의합시다 sendmail app / controllers / emailer_controller.rb에서 다음과 같이 실제 이메일을 보내기 위해 Model 메소드를 호출합니다.

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

메일러의 연락 방법을 사용하여 이메일을 전달하려면 다음을 추가해야합니다. deliver_를 메서드 이름의 시작 부분에 추가합니다. request.xhr? 인 경우 반환을 추가하여 브라우저가 JavaScript를 지원하지 않는 경우 Rails Java Script (RJS)로 이스케이프 한 다음 메서드에 텍스트 메시지를 렌더링하도록 지시 할 수 있습니다.

이메일을 보낼 사용자 정보를 얻을 화면을 준비하는 것 외에는 거의 완료되었습니다. 컨트롤러에서 하나의 화면 메서드 인덱스를 정의하고 다음 섹션에서 필요한 모든 뷰를 정의하겠습니다.

emailer_controller.rb 파일에 다음 코드를 추가합니다.

def index
   render :file => 'app\views\emailer\index.html.erb'
end

보기 정의

app \ views \ emails \ index.html.erb에서보기를 정의하십시오. 이것은 응용 프로그램의 기본 페이지로 호출되며 사용자가 메시지를 입력하고 필요한 이메일을 보낼 수 있습니다.

<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 %>

위의보기와 별도로 메시지를 보내는 동안 Emailer의 연락 방법에서 사용할 템플릿이 하나 더 필요합니다. 이것은 표준 Rails <% = %> 자리 표시자가 전체에 흩어져있는 텍스트입니다.

다음 코드를 app/views/contact.html.erb 파일.

Hi!
You are having one email message from <%= @email %> with a title 
<%= @title %>
and following is the message:
<%= @message %>
Thanks

테스트를위한 휴식

테스트하기 전에 컴퓨터가 인터넷에 연결되어 있고 이메일 서버와 웹 서버가 실행 중인지 확인하십시오.

이제 http://127.0.0.1:3000/Emailer/index를 사용하여 애플리케이션을 테스트합니다. 다음 화면이 표시되며이 화면을 사용하여 누구에게나 메시지를 보낼 수 있습니다.

메시지를 보낸 후 "메시지가 성공적으로 전송되었습니다"라는 텍스트 메시지가 표시됩니다.

Rails를 사용하여 HTML 이메일 보내기

메일을 HTML로 보내려면보기 (.erb 파일)에서 HTML을 생성하고 콘텐츠 유형을 HTML로 설정해야합니다. emails/app/models/emailer.rb 다음과 같이 파일-

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

에 대한 자세한 내용은 ActionMailer, 표준 Ruby 문서를 살펴보십시오.