728x90
반응형
사용자 회원가입, 주문 확인, 비밀번호 재설정… 모든 서비스에는 메일 발송 기능이 필요합니다.
Rails에서는 이를 위해 ActionMailer라는 전용 클래스가 제공되며, Gmail SMTP 서버를 이용하면 누구나 손쉽게 이메일을 전송할 수 있어요.
이번 글에서는 회원가입 확인 메일을 예시로 ActionMailer + Gmail SMTP
연동을 처음부터 끝까지 정리해볼게요.
📮 1. ActionMailer 클래스 생성
$ bin/rails generate mailer UserMailer
위 명령어를 실행하면 다음과 같은 파일이 생성됩니다:
app/mailers/user_mailer.rb
app/views/user_mailer/
(메일 템플릿 디렉토리)
✉️ 2. 메일 메서드 정의
# app/mailers/user_mailer.rb
class UserMailer < ApplicationMailer
default from: "no-reply@example.com"
def welcome_email(user)
@user = user
mail(to: @user.email, subject: "환영합니다! #{user.name}님 🎉")
end
end
@user
를 메일 템플릿에서 사용할 수 있게 넘겨줍니다.
🖋️ 3. 메일 템플릿 작성
# app/views/user_mailer/welcome_email.html.erb
<h1><%= @user.name %>님, 가입을 환영합니다! 🎉</h1>
<p>저희 서비스를 이용해 주셔서 감사합니다.</p>
또한, welcome_email.text.erb
를 함께 작성하면 HTML을 지원하지 않는 클라이언트에도 대응할 수 있어요.
⚙️ 4. Gmail SMTP 설정
config/environments/development.rb 설정
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'gmail.com',
user_name: ENV['GMAIL_USER'],
password: ENV['GMAIL_PASS'],
authentication: 'plain',
enable_starttls_auto: true
}
환경변수는 dotenv
또는 credentials.yml.enc
에 저장하는 것이 안전합니다.
.env 예시
GMAIL_USER=your_email@gmail.com
GMAIL_PASS=your_gmail_app_password
> ⚠️ Gmail 보안 설정에서 앱 비밀번호를 생성해야 합니다. 2단계 인증을 활성화하고 앱 전용 비밀번호를 발급받으세요.
🧪 5. 메일 발송 테스트
# 콘솔에서 직접 테스트
user = User.first
UserMailer.welcome_email(user).deliver_now
메일이 정상적으로 발송되면 Gmail 수신함에서 확인할 수 있습니다!
📥 6. 실제 액션과 연동하기
# app/controllers/users_controller.rb
def create
@user = User.new(user_params)
if @user.save
UserMailer.welcome_email(@user).deliver_later
redirect_to @user, notice: "가입을 환영합니다! 확인 메일을 발송했습니다."
else
render :new
end
end
deliver_now
는 즉시 발송, deliver_later
는 비동기 큐 처리입니다 (ActiveJob 필요).
🎯 마치며
메일 발송 기능은 사용자 경험의 완성도를 높이는 중요한 요소입니다.
Rails의 ActionMailer와 Gmail SMTP를 활용하면 복잡한 설정 없이도 깔끔하고 안전한 이메일 시스템을 만들 수 있어요.
이번 글을 기반으로 비밀번호 재설정, 문의 답변 등 다양한 상황에 활용해보세요!
728x90
반응형
'Ruby On Rails' 카테고리의 다른 글
Heroku로 Rails 앱 배포하기 — 빠르고 간단한 클라우드 배포 (2) | 2025.07.31 |
---|---|
Rails 앱 보안 점검 — CSRF, SQL Injection 막기 (2) | 2025.07.29 |
댓글 기능 추가하기 — 모델 연관관계 완전 정복 (4) | 2025.07.22 |
관리자 페이지 만들기 — RailsAdmin vs ActiveAdmin (0) | 2025.07.17 |
파일 업로드 구현 — ActiveStorage와 Cloudinary 활용하기 (1) | 2025.07.15 |