当前位置: 首页 > 知识库问答 >
问题:

Rails mailer预览显示正确,但在发送电子邮件时出现未验证的方法错误

暴博远
2023-03-14

我是rails的新手,一直在学习一些关于使用Action Mailer发送电子邮件的教程。我正在使用的应用程序包括添加维修通知单,并在单击按钮时向客户发送电子邮件通知。我可以在创建新的维修单时发送电子邮件,但在尝试通过按钮发送电子邮件时遇到问题。如果您能就此问题提出任何建议,我将不胜感激。

Rails 4.2.0 Ruby 2.1.5 Ubuntu 14.0.4 PostgreSQL

我通过从repair_tickets中的create方法调用my mail函数,确认邮件服务器设置正确。rb当保存新的维修工单时。我希望在单击按钮时发送相同的电子邮件通知。

    def create
      @repair_ticket = RepairTicket.new(repair_ticket_params)
respond_to do |format|
  if @repair_ticket.save
    ExampleMailer.sample_email(@repair_ticket.customer.email).deliver_now

    format.html { redirect_to @repair_ticket, notice: 'Repair ticket was successfully created.' }
    format.json { render :show, status: :created, location: @repair_ticket }
  else
    format.html { render :new }
    format.json { render json: @repair_ticket.errors, status: :unprocessable_entity }
  end
end
end

目前,我可以通过预览页面在浏览器中成功查看超文本标记语言和纯文本电子邮件。(rails/邮件/example_mailer/sample_mail_preview)但是,当我点击“电子邮件客户”按钮时,我会收到以下错误消息

NoMethodError in RepairTicketsController#send_order_mail
undefined method `customer' for nil:NilClass

 def send_order_mail
ExampleMailer.sample_email(@repair_ticket.customer.email).deliver_now

end
# GET /repair_tickets/1 

Rails.root: /home/vmann/newiab/iab-v2

Application Trace | Framework Trace | Full Trace
app/controllers/repair_tickets_controller.rb:13:in `send_order_mail'

电子邮件模型邮件/example_mailer.rb

class ExampleMailer < ActionMailer::Base
 default from: "default@gmail.com"

def sample_email(customer)
  @customer = customer
  mail(to: @customer, subject: 'Sample Email')
 end
end

repair_tickets_controller.rb

def send_order_mail
  ExampleMailer.sample_email(@repair_ticket.customer.email).deliver_now
end

路线。铷

 get :send_order_mail, to: 'repair_tickets#send_order_mail', as: :send_order_mail

修理车票\表演。html。erb(按钮所在位置)

<%= link_to 'Email Customer', send_order_mail_path , class: "btn btn-primary" %>

共有1个答案

聂季同
2023-03-14

repair_tickets_controller.rb

def send_order_mail
  ExampleMailer.sample_email(@repair_ticket.customer.email).deliver_now
end

错误消息是@repair\u ticket==nil,实际上您还没有给它赋值,这需要发生在send\u order\u mail方法的第一行。要做到这一点,您需要发送一个id,其中包含由按钮生成并发送的url,然后由控制器访问该url以创建维修单。例如,@repair\u ticket=RepairTicket。查找(参数[:id])。

 类似资料:
  • 我正在试验Cognito,但我似乎不知道如何让Cognito向用户发送验证电子邮件,让他们验证他们的电子邮件地址。 这是在我的后端服务器中,我从新用户那里收到了用户名、电子邮件和密码。我正在抑制消息操作,因为我不希望用户收到临时密码。相反,我想将密码设置为他们已经提供给我的密码。 然而,用户从未收到验证其电子邮件地址的电子邮件。在用户池配置中,我在“要验证哪些属性”下选择了“电子邮件”我已经在SE

  • 当我注册一个用户,或单击“单击此处请求另一个”时,不会发送验证邮件,尽管它的回答是“一个新的验证链接已发送到您的电子邮件地址”。我检查了我的和文件,并使用tinker和

  • 我有以下代码: 我无法连接到gmail,连接出现错误,但是所有连接信息都是正确的,不知道是什么阻止了我发送电子邮件的代码中的连接,我无法发送简单的电子邮件,我一点也不知道它是什么。 感谢您的帮助

  • 我正在尝试使用Amazon SES发送电子邮件。我在地区工作过,刚刚把我的地区切换到,我无法向我的个人gmail账户发送电子邮件。我已经从地址验证了的

  • 问题内容: 我有一台在Linux VM上运行的Jenkins服务器。我希望我的Jenkins每次开始构建时都给我发送电子邮件。我已经如下设置了电子邮件服务。由于我在Google帐户中使用2因子身份验证,因此我为Jenkins创建了一个应用密码,但仍然显示“需要身份验证”。我还安装了扩展电子邮件通知插件,并以完全相同的方式设置了相同的结果。有谁知道这里可能是什么问题? 问题答案: 我进行了测试设置,

  • 我通过SMTP服务发送电子邮件时收到以下错误消息: 我的系统上有以下SMTP设置: 操作系统:Windows 7家庭高级版 IIS:IIS 7 如何解决这个问题? 谢谢。