ruby on rails爬坑(五):配置邮件服务器

前言

一个月前就完成的功能,现在才放上来算是补上吧,之前挖了很多坑,慢慢填

需求比较简单,就是当用户在平台上报名成功后,邮件服务器会将报名信息发送到我们客服的邮箱。

ruby on rails爬坑(五):配置邮件服务器_第1张图片

超级简单的功能,但是因为一些配置问题,还是折腾了半个小时,希望这篇简单的配置博客能帮大家省下20分钟。

配置

①生成mailer相关文件

rails generate mailer NAME [method method] [options]

上面是命令格式,下面是命令,命名可根据个人喜好:

rails g mailer MyMailer

②注册邮箱并开通SMTP
怎么注册就不说了,这里以网易邮箱为例(我注册了一个[email protected]),注册完之后在设置里开启SMTP服务,并设置客户端授权密码(很重要,后面要用到)。

ruby on rails爬坑(五):配置邮件服务器_第2张图片

ruby on rails爬坑(五):配置邮件服务器_第3张图片

ruby on rails爬坑(五):配置邮件服务器_第4张图片

这一步记住两个信息:

客户端授权密码
服务器地址,见图二红框部分(不同邮箱服务器有不同的地址,请自己查询)

③rails中简单配置
执行了①中的命令后,rails会在app目录中生成一个mailers文件夹,里面包含了所有的相关文件。

application_mailer.rb
my_mailer.rb(根据名字自动生成)

这两个文件的简单配置如下:

#application_mailer.rb

class ApplicationMailer < ActionMailer::Base
  default from: "[email protected]"
  layout 'mailer' #指定了邮件的HTML模板,对应views/layouts/mailer.html.slim,也可以指定其他模板
end
#my_mailer.rb

class MyMailer < ApplicationMailer

  #自定义发送邮件函数
  def send_mail(to, title, u_id, m_id)
    #发送的内容取决于你的业务逻辑,仅供参考
    #这里发送了用户和任务的信息
    @user = User.select("name, phone").find(u_id)
    @user.phone = "tel:" + @user.phone
    @mission = Mission.select("title").find(m_id) 
    title = title +" "+ @user.name + "-" + @mission.title

    #返回mail对象
    mail( 
      :subject => title,   
      :to => to,   
      :from => "[email protected]",   
      :date => Time.now  
    )   
  end
end

补充,mailer.html.slim(用了slim模板):

body
  h3 报名通知
  div = @user.name
  div
    a [href=@user.phone] =<> @user.phone
  div = @mission.title

④rails邮件环境配置(重要)

#production.rb
Rails.application.configure do
    #...只是为了演示邮箱配置的位置,所以省略了其余的配置...
    ActionMailer::Base.delivery_method = :smtp  
    config.action_mailer.perform_deliveries = true  
    config.action_mailer.raise_delivery_errors = true  
    config.action_mailer.default :charset => "utf-8"  
    ActionMailer::Base.smtp_settings = {    
        :address => "smtp.yeah.net", #邮件服务器地址 
        :port => 25,  
        :domain => "yeah.net", #服务器域名,如xxx@yeah.net域名就是yeah.net
        :authentication => :login,   
        :user_name => "xxx",  #邮件用户名,如xxx@yeah.net用户名就是xxx
        :password => "your_smtp_code",  #与登录密码不同,此处是客户端授权密码,切记!
  }
end

⑤发送邮件

    #调用之前定义的函数
    MyMailer.send_mail("这是收件人地址", "这是标题", params[:user_id], params[:mission_id]).deliver 

建议

既然rails的环境有development,test,production三种,那么邮箱的配置也可以配置三份,邮箱的配置参考上面的配置即可,下面主要讲讲客服邮箱地址的配置(收件人)。

在相应配置文件中加入:

#development.rb
config.x.service_mail = "[email protected]"
#production.rb
config.x.service_mail = "[email protected]"

发送邮件时:

send_to = Rails.configuration.x.service_mail
MyMailer.send_mail(send_to, "这是标题", params[:user_id], params[:mission_id]).deliver

这样在开发环境和产品环境的收件人就不一样了,有利于测试和正常运营。

一些想法

很简单的东西,但每次实践都有新的想法。

  • 邮件内容是HTML文档,看来自己知识面太窄了。既然是HTML文档,那可玩性就很高啦。
  • 有时候发邮件会被分到垃圾邮件里面,现在的邮件过滤器大多使用基于贝叶斯概率的学习算法吧,注意邮件用词能减少成为垃圾的可能。
  • 上面虽然只实现了用户报名通知客服的简单功能,但是邮件的玩法还有很多,例如通知用户一些活动,作为找回/修改密码的验证都可以。

多做多思考。

你可能感兴趣的:(ruby)