如何从rails中的用户接收电子邮件?

时间:2015-04-17 04:10:42

标签: ruby-on-rails ruby email send

我有一个表单,允许用户输入他们的姓名,电子邮件添加,主题和消息。当用户点击SEND时,该消息应该发送给我(管理员)。 我的开发配置下有这个代码...

  config.action_mailer.delivery_method = :smtp
  # SMTP settings for gmail
  config.action_mailer.smtp_settings = {
     :address              => @user.email,
     :port                 => 587,
     :user_name            => ENV['sys.questdentalusa@gmail.com'],
     :password             => ENV['passwordhere'],
     :authentication       => 'plain',
     :enable_starttls_auto => true
 }

和我的user_mailer下的代码

def welcome_email(user)
  @user = user
  mg_client = Mailgun::Client.new ENV['api_key']
  message_params = {:from    => ENV[@user.email],
                  :to      => 'sys.questdentalusa@gmail.com',
                  :subject => @user.subject,
                  :text    => @user.text}
  mg_client.send_message ENV['domain'], message_params
end

它不会发送消息。就好像它没有执行一样。 规则是,不应涉及任何模型。 例如,您有一个现有的Gmail帐户并写了一封发给我的邮件。我应该从您输入的Gmail帐户收到您的消息。

2 个答案:

答案 0 :(得分:0)

developer configmessage_params看错了两件事,

message_params中的

:from => ENV[@user.email]应该与@user.email

相似 smtp_settings中的

:address => @user.email,"smtp.mailgun.org"类似。在here

结帐更多smtp_settings

答案 1 :(得分:0)

我现在得到了相当一段时间的答案,我决定不妨在这里分享。这就是我在development.rb中所做的。

  config.action_mailer.smtp_settings = {
  address: "smtp.gmail.com",
  port: 587,
  domain: "gmail.com",
  user_name: "sys.questdentalusa@gmail.com",
  password: "passwordhere",
  authentication: :plain,
  enable_starttls_auto: true
}

这是我在Mailer下的内容

class MessageMailer < ActionMailer::Base
  default from: "sys.questdentalusa@gmail.com"
  default to: "questdentalusa@gmail.com"

  def new_message(contact)
    @contact = contact

    mail subject: 'Inquiry from website: ' + @contact[:subject]
  end
end

我在new_message.text.erb

下得到了这个
Name: <%= @contact[:name] %>
Email: <%= @contact[:email] %>
Message: <%= @contact[:content] %>

这是我的控制器

class HomeController < ApplicationController
  skip_before_filter  :verify_authenticity_token
  def send_mail
    if MessageMailer.new_message(contact_params).deliver
      redirect_to contact_path
      flash[:notice] = 'Your messages has been sent.'
    end
  end
  private
  def contact_params
    params.require(:contact).permit(:name, :email, :subject, :content)
  end
end