如何在rails中发送电子邮件

时间:2016-09-09 10:21:57

标签: ruby-on-rails ruby ruby-on-rails-4 model-view-controller actionmailer

以下是我的控制器文件:

class BiodataController < ApplicationController
  def store
    @user=params[:username]
    @age=params[:age]
    @gender=params[:gender]
    @mstatus=params[:mstatus]
    @language=params[:language]
    @email=params[:email]
    @mobile=params[:mobile]

    if params[:username].present? && params[:age].present? && params[:gender].present? && params[:mstatus].present? && params[:language].present? && params[:email].present? && params[:mobile].present?
        Biodatum.create(name: @user, age: @age, gender: @gender, mstatus: @mstatus, language: @language, email: @email, mobile: @mobile)
    Infomail.sendmail(@email)
    render 'store'
    else
        render 'Error'
    end
  end
end

我的要求是向@email中存储的地址发送电子邮件。所以我创建了邮件程序&#39; Infomail&#39;。以下是我的邮件文件。

class Infomail < ApplicationMailer
    default from: 'abc@xyz.co.in'

    def sendmail(user)
        @user = user
        mail(to: @user.email, subject: 'sample mail')
    end
end

我还在app / views / infomail / sendmail.html.erb&#39;下面有html文件。但它不起作用。任何人都可以解释我的错误是什么 我的代码。

3 个答案:

答案 0 :(得分:0)

我建议你先看看http://guides.rubyonrails.org/action_mailer_basics.html作为初学者。

对于发送邮件,您必须使用deliver_now(立即)或deliver_later(工作队列)方法,如下所示:

InfoMailer.sendmail(@user).deliver_now

请注意,我将其重命名为InfoMailer,因为这是邮寄者的标准命名。

答案 1 :(得分:0)

您正在发送@email String这是Object段,而您期望.email可以拨打@bio = Biodatum.create(name: @user, age: @age, gender: @gender, mstatus: @mstatus, language: @language, email: @email, mobile: @mobile) Infomail.sendmail(@bio)

Biodatum

这会传递.email实例,您可以在其上调用def sendmail(bio) @bio = bio mail(to: @bio.email, subject: 'sample mail') end

另外,为了避免混淆,您可以更改邮件程序方法

sendmail.html

如果您要进行这些更改,则还需要在/config/environments/development.rb

中进行更改

修改

确保您已在/config/environments/production.rbconfig.action_mailer.delivery_method = :smtp # SMTP settings for gmail config.action_mailer.smtp_settings = { :address => "smtp.gmail.com", :port => 587, :user_name => ENV['gmail_username'], :password => ENV['gmail_password'], :authentication => "plain", :enable_starttls_auto => true }

中配置了设置
SELECT '0-100' AS NUM,
       SUM(CASE WHEN NUM <= 100 THEN CNT ELSE 0 END) AS CNT
FROM  tableName
UNION
SELECT '100-400' AS NUM,
       SUM(CASE WHEN NUM > 100 THEN CNT ELSE 0 END) AS CNT
FROM  tableName

答案 2 :(得分:0)

如果您想测试邮件进入开发环境,只需打开您的development.rb文件并在下面编写代码以进行smtp配置。

  config.action_mailer.default_url_options  = { host: 'url of your application' }
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address:              'address of your mailer',
    port:                 465,
    domain:               ENV['YOUR_DOMAIN_NAME'],
    user_name:            ENV['YOUR_USER_NAME'],
    password:             ENV['YOUR_PASSWORD'],
    authentication:       :plain,
    ssl:                  true,
    tls:                  true,
    enable_starttls_auto: true
  }

请根据您的邮件程序smtp设置更改以上配置。 现在根据您的要求创建邮件的tamp let。文件路径如下: app - &gt;查看 - &gt; common_mailer里面的这个请发sendmail.html.erb文件。