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

📅  最后修改于: 2020-10-20 05:19:43             🧑  作者: Mango


ActionMailer是Rails组件,使应用程序能够发送和接收电子邮件。在本章中,我们将看到如何使用Rails发送电子邮件。

让我们从使用以下命令创建电子邮件项目开始。

C:\ruby> rails -d mysql emails

在这里,我们使用-d mysql选项来指定使用MySQL数据库的兴趣。我们可以使用-d选项指定其他任何数据库名称,例如oraclepostgress 。默认情况下,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

行动邮件程序–配置

以下是在继续实际工作之前必须完成的配置步骤。 –

转到电子邮件项目的config文件夹,然后打开environment.rb文件,并在此文件底部添加以下行。

ActionMailer::Base.delivery_method = :smtp

它通知ActionMailer您要使用SMTP服务器。如果使用的是基于Unix的操作系统,例如Mac OS X或Linux,也可以将其设置为:sendmail。

还要在environment.rb的底部添加以下代码行。

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

将每个哈希值替换为简单邮件传输协议(SMTP)服务器的正确设置。如果您还不知道,可以从Internet服务提供商处获取此信息。如果使用标准SMTP服务器,则无需更改端口号25和身份验证类型。

您也可以更改默认电子邮件格式。如果您希望以HTML而非纯文本格式发送电子邮件,请将以下行也添加到config / environment.rb-

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

ActionMailer :: Base.default_content_type可以设置为“ text / plain”,“ text / html”和“ text / enriched”。默认值为“文本/纯文本”。

下一步是创建邮件程序。

产生邮件

使用以下命令生成邮件程序,如下所示:

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 = 'no-reply@yourdomain.com'
      @sent_on = sent_at
      @body["title"] = 'This is title'
      @body["email"] = 'sender@yourdomain.com'
      @body["message"] = message
      @headers = {}
   end
end

contact方法具有四个参数:收件人,主题,消息和send_at,它们定义了何时发送电子邮件。该方法还定义了六个标准参数,它们是每个ActionMailer方法的一部分-

  • @subject定义电子邮件主题。

  • @body是一个Ruby哈希,其中包含可用于填充邮件模板的值。您创建了三个键值对:标题,电子邮件和消息

  • @recipients是要向其发送消息的人员的列表。

  • @from定义电子邮件的来源。

  • @sent_on使用send_at参数并设置电子邮件的时间戳。

  • @headers是另一个哈希,使您可以修改电子邮件标题。例如,如果要发送纯文本或HTML电子邮件,则可以设置电子邮件的MIME类型。

创建控制器

现在,我们将为此应用程序创建一个控制器,如下所示:

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

让我们在app / controllers / emailer_controller.rb中定义一个控制器方法sendmail ,它将调用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

要使用邮递员的联系方法发送电子邮件,您必须在方法名称的开头添加delivery _。如果在request.xhr?中添加了return,那么如果浏览器不支持JavaScript,则可以转至Rails Java脚本(RJS),然后指示该方法呈现文本消息。

除了准备一个屏幕之前,您几乎已经完成了工作,您将从屏幕上获取用于发送电子邮件的用户信息。让我们在控制器中定义一个屏幕方法索引,然后在下一节中,我们将定义所有必需的视图-

在emailer_controller.rb文件中添加以下代码。

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

定义视图

在app \ views \ emails \ index.html.erb中定义一个视图。这将被称为应用程序的默认页面,并将允许用户输入消息并发送所需的电子邮件-

Send Email

'sendmail' do %>

:

:


除了以上视图之外,我们还需要一个模板,该模板将由Emailer的联系方法在发送消息时使用。这只是带有标准Rails <%=%>占位符的文本。

只需将以下代码放入app / views / contact.html.erb文件中。

Hi!
You are having one email message from  with a title 

and following is the message:

Thanks

休息测试

在测试之前,请确保您的计算机已连接到Internet,并且电子邮件服务器和Web服务器已启动并正在运行。

现在,使用http://127.0.0.1:3000/Emailer/index测试您的应用程序。它显示以下屏幕,通过使用此屏幕,您可以将消息发送给任何人。

发送电子邮件

发送消息后,它将显示文本消息“消息发送成功”。

使用Rails发送HTML电子邮件

要将邮件以HTML格式发送,请确保您的视图(.erb文件)生成HTML,然后在emails / app / models / emailer.rb文件中将内容类型设置为html,如下所示-

class Emailer < ActionMailer::Base
   def contact(recipient, subject, message, sent_at = Time.now)
      @subject = subject
      @recipients = recipient
      @from = 'no-reply@yourdomain.com'
      @sent_on = sent_at
      @body["title"] = 'This is title'
      @body["email"] = 'sender@yourdomain.com'
      @body["message"] = message
      @headers = {content_type => 'text/html'}
   end
end

有关ActionMailer的完整详细信息,请查阅标准Ruby文档。