您好我的代码中出现了一个错误的模板错误,我正在制作一个联系表单尽管文件位于我认为合适的位置,其他一切与我遵循的动作邮件基础知识教程完全一样。我甚至重新编辑了邮件,它仍然无法正常工作。
contactmailer
class ContactMailer < ApplicationMailer
default from: 'test@example.com'
layout 'mailer'
def notify(contact)
@contact = contact
mail(to: 'text@example.com', subject: 'Notification')
end
end
联系人控制器
def create
@contact = Contact.new(contact_params)
if @contact.save
ContactMailer.notify(@contact).deliver_now
redirect_to root_path
else
render :new
end
end
视图/ contact_mailer / notify.text.erb 测试
配置/ development.rb
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
# In the development environment your application's code is reloaded on
# every request. This slows down response time but is perfect for development
# since you don't have to restart the web server when you make code changes.
config.cache_classes = false
# Do not eager load code on boot.
config.eager_load = false
# Show full error reports and disable caching.
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
# Don't care if the mailer can't send.
config.action_mailer.raise_delivery_errors = true
# Print deprecation notices to the Rails logger.
config.active_support.deprecation = :log
# Raise an error on page load if there are pending migrations.
config.active_record.migration_error = :page_load
# Debug mode disables concatenation and preprocessing of assets.
# This option may cause significant delays in view rendering with a large
# number of complex assets.
config.assets.debug = true
# Asset digests allow you to set far-future HTTP expiration dates on all assets,
# yet still be able to expire them through the digest params.
config.assets.digest = true
# Adds additional error checking when serving assets at runtime.
# Checks for improperly declared sprockets dependencies.
# Raises helpful error messages.
config.assets.raise_runtime_errors = true
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
# SMTP settings for gmail
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "gmail.com",
:enable_starttls_auto => true,
:user_name => 'example@gmail.com',
:password => 'examplepassword',
:authentication => "plain",
:ssl => false
:openssl_verify_mode => 'none'
}
end
如果我在邮件中添加了一个正文参数,那么它可以正常工作,但不起作用。
编辑:我收到的错误
ContactMailer#notify: processed outbound mail in 31.9ms
Completed 500 Internal Server Error in 61ms (ActiveRecord: 3.7ms)
ActionView::MissingTemplate (Missing template layouts/mailer with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :slim, :coffee, :jbuilder]}. Searched in:
* "/home/ubuntu/workspace/autosales2/app/views"
):
app/mailers/contact_mailer.rb:7:in `notify'
app/controllers/contacts_controller.rb:15:in `create'
Rendered /usr/local/rvm/gems/ruby-2.2.2/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/templates/rescues/_source.erb (11.1ms)
Rendered /usr/local/rvm/gems/ruby-2.2.2/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (5.2ms)
Rendered /usr/local/rvm/gems/ruby-2.2.2/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.3ms)
Rendered /usr/local/rvm/gems/ruby-2.2.2/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb within rescues/layout (93.5ms)
答案 0 :(得分:1)
您只有纯文本模板。怎么样.html.erb
?
尝试使用此代码将邮件限制为仅发送纯文本电子邮件(如果您想要的话):
def notify(contact)
@contact = contact
mail(to: 'text@example.com', subject: 'Notification') do |format|
format.text
end
end
否则,如果你想要html电子邮件,也要提供他们的模板。
<强>更新强>
从错误文本中可以看出,无法找到邮件程序的布局模板。你的邮件是这样的:
layout 'mailer'
这意味着任何特定的操作模板都将呈现为上述布局模板的一部分。因此,您需要使用此布局模板。您可以看到邮件程序期望它被称为layouts/mailer
并在app/views
中查找它,这使它成为
app/views/layouts/mailer.html.erb # for html emails
app/views/layouts/mailer.text.erb # for plain text emails
如果您不需要电子邮件的通用布局,则只需删除layout 'mailer'
行即可。