📜  Ruby on Rails 2.1-发送电子邮件(1)

📅  最后修改于: 2023-12-03 15:19:51.914000             🧑  作者: Mango

Ruby on Rails 2.1-发送电子邮件

在Web应用程序中,发送电子邮件是非常常见的操作,它可以用来处理用户注册确认、重置密码、发送广告等任务。Ruby on Rails框架中集成了Action Mailer组件,可以非常方便地实现发送电子邮件操作。

配置邮件

首先,我们需要在config/environments目录下的相应环境文件中配置邮件设置。例如,在development.rb文件中可以添加以下代码:

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :address => "smtp.gmail.com",
  :port => 587,
  :domain => "example.com",
  :user_name => "example",
  :password => "password",
  :authentication => :login,
  :enable_starttls_auto => true
}

其中,delivery_method表示邮件发送方式,这里是使用SMTP方式;smtp_settings配置SMTP服务器的相关信息。

创建邮件

可以通过命令行工具rails generate mailer来创建一个邮件。例如,我们想要创建一个发送欢迎邮件的邮件,可以运行以下命令:

rails generate mailer UserMailer welcome_email

该命令将在app/mailers目录下创建一个名为UserMailer的邮件类,以及一个名为welcome_email的方法。

在该welcome_email方法中,可以定义邮件的发送者、接收者、主题、正文等内容。例如:

class UserMailer < ActionMailer::Base
  default :from => 'admin@example.com'

  def welcome_email(user)
    @user = user
    @url  = 'http://example.com/login'
    mail(:to => user.email,
         :subject => 'Welcome to My Awesome Site')
  end
end

该代码中的@user和@url变量可以在邮件正文中使用,例如:

Hello <%= @user.name %>,

Welcome to My Awesome Site! Please click on the following link to login:

<%= @url %>

Thank you for joining us!

Sincerely,
The My Awesome Site Team
发送邮件

邮件创建好后,我们就可以在各个控制器中使用该邮件类来发送邮件了。例如,在用户注册成功后,我们可以发送一封欢迎邮件:

class UsersController < ApplicationController
  def create
    @user = User.new(params[:user])
    if @user.save
      UserMailer.welcome_email(@user).deliver
      redirect_to root_url, :notice => "Thank you for signing up!"
    else
      render "new"
    end
  end
end

注意到邮件发送的方法名是deliver,而不是deliver_now,这是因为邮件发送是在后台进行的,不需要等待邮件发送完成才返回页面。

结论

通过Action Mailer组件,我们可以非常方便地在Ruby on Rails应用程序中实现发送电子邮件的功能。使用Rails配置邮件、创建邮件、发送邮件的流程非常简单明了,能够大幅度提升Web应用程序的用户体验。