我正在尝试使用用户输入的电子邮件地址,将其存储在数据库中,然后向该地址发送欢迎电子邮件。如果成功,则应将用户重定向回root
。在本地这种情况正确发生,但在我的Heroku生产服务器上,地址将保存在数据库中,但用户将被重定向回subscribers
。这是用于保存订户的API调用,但它没有相应的视图。
此电子邮件也未发送,但这可能是一个单独的问题。如果重要,我正在尝试使用MailGun发送电子邮件。
我不确定哪些文件是必要的,但是......
routes.rb中:
Rails.application.routes.draw do
root to: 'pages#home'
resources :subscribers, only: :create
end
/controllers/subscribers_controller.rb:
class SubscribersController < ApplicationController
def new
@subscriber = Subscriber.new
end
def create
@subscriber = Subscriber.new(subscriber_params)
if @subscriber.save
SubscribeMailer.subscribe_email(@subscriber).deliver
flash[:success] = "Success! Check your email."
redirect_to root_path
else
flash[:danger] = "Oops! That's not a valid email."
redirect_to root_path
end
end
private
def subscriber_params
params.require(:subscriber).permit(:email)
end
end
/models/subscriber.rb:
class Subscriber < ActiveRecord::Base
validates_email_format_of :email, uniqueness: true
end
/mailers/subscriber_mailer.rb:
class SubscribeMailer < ActionMailer::Base
default from: "email@gmail.com"
def subscribe_email(subscriber)
mail(to: subscriber.email, subject: 'Subject')
end
end
/config/environment.rb:
# Load the Rails application.
require File.expand_path('../application', __FILE__)
# Initialize the Rails application.
Rails.application.initialize!
ActionMailer::Base.smtp_settings = {
:port => ENV['MAILGUN_SMTP_PORT'],
:address => ENV['MAILGUN_SMTP_SERVER'],
:user_name => ENV['MAILGUN_SMTP_LOGIN'],
:password => ENV['MAILGUN_SMTP_PASSWORD'],
:domain => 'subdomain.herokuapp.com',
:authentication => :plain,
}
ActionMailer::Base.delivery_method = :smtp
在查看其他一些StackOverflow线程时,OP被要求提供prod日志。我跑了heroku logs
,但没有看到任何突出的东西。
答案 0 :(得分:0)
我终于明白了。我正在使用沙箱域用于Mailgun,我测试的电子邮件与我通过Mailgun授权使用的电子邮件不同。