Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails mailer未定义的方法`编码';对于#<;散列:0x774b2d51>;_Ruby On Rails_Actionmailer - Fatal编程技术网

Ruby on rails Rails mailer未定义的方法`编码';对于#<;散列:0x774b2d51>;

Ruby on rails Rails mailer未定义的方法`编码';对于#<;散列:0x774b2d51>;,ruby-on-rails,actionmailer,Ruby On Rails,Actionmailer,我正在尝试用Rails发送电子邮件。 代码是 class UserMailer < ActionMailer::Base default :from => "from@example.com" def send_password_reset(player) Rails.logger.info "Password email" @player = player delivery_options = { user_name: 'sit

我正在尝试用Rails发送电子邮件。 代码是

class UserMailer < ActionMailer::Base
  default :from => "from@example.com"

  def send_password_reset(player)
    Rails.logger.info "Password email"
    @player = player
    delivery_options = { 
         user_name: 'sites.smtp@mymail.com',
         password: 'password',
         address: 'smtpout.secureserver.net' 
    }
    mail(to: player.email,
         subject: "Recover your Password.", 
         body: "Password email",
         delivery_method_options: delivery_options)
  end
end
型号

  def send_password_reset_token
    password_reset_token = SecureRandom.urlsafe_base64(nil, false)
    self.update_attribute(:password_reset_token, password_reset_token)
    UserMailer.send_password_reset(self).deliver #(line: 25)
  end
记录者说

Sent mail to ranasaani@gmail.com (25ms)

Completed   in 433ms

NoMethodError (undefined method `encoding' for #<Hash:0x774b2d51>):
app/models/player.rb:25:in `send_password_reset_token'
app/controllers/players_controller.rb:209:in `password_forgot'
已将邮件发送到ranasaani@gmail.com(25毫秒)
在433毫秒内完成
NoMethodError(未定义的#的“encoding”方法):
app/models/player.rb:25:in'send\u password\u reset\u token'
app/controllers/players\u controller.rb:209:in'password\u忘记'

但是我没有收到任何电子邮件,这里也没有任何编码方法。那么,是什么导致了这个错误呢?你是否像这样设置了mailer.rb

ActionMailer::Base.smtp_设置={
:address=>“smtp.gmail.com”,
:端口=>587,
:domain=>your.domain.com,
:user\u name=>ENV['MY\u GMAIL\u user\u name',
:password=>ENV['MY\u GMAIL\u password',
:身份验证=>“普通”,
:enable_starttls_auto=>true}


你在发送一些附件吗?不,只是简单的电子邮件,这些不是等价的吗?我们已经检查了这里的语法…你是否设置了你的
mailer.rb
像这样
ActionMailer::Base.smtp\u设置={:address=>“smtp.gmail.com”,:port=>587,:domain=>“mail.google.com”,:user\u name=>ENV['MY\u GMAIL\u user\u name'],:password=>ENV['MY\u GMAIL\u password'],:authentication=>“plain”,:enable\u starttls\u auto=>true}
您的smtp配置肯定有问题,您需要在mailer.rb文件中提到它,然后您可能不需要在
mail()中使用
delivery\u方法\u选项:delivery\u选项
method@amitkarsale谢谢你,太棒了。但是从设置中删除
:domain=>“mail.google.com”
之后
Sent mail to ranasaani@gmail.com (25ms)

Completed   in 433ms

NoMethodError (undefined method `encoding' for #<Hash:0x774b2d51>):
app/models/player.rb:25:in `send_password_reset_token'
app/controllers/players_controller.rb:209:in `password_forgot'