【问题标题】:NoMethodError: undefined method ascii_only? - Error with mail 2.5.4 and rails 4.0NoMethodError:未定义的方法 ascii_only? - 邮件 2.5.4 和 rails 4.0 出错
【发布时间】:2014-09-23 13:59:38
【问题描述】:

当我尝试使用 mail 2.5.4 / rails 4.0.0 / ruby​​ 1.9.3-p125 配置发送邮件时,请查看以下错误消息。

SubscriptionMailer.send_email(Subscription.last).deliver
  Subscription Load (0.6ms)  SELECT `subscriptions`.* FROM `subscriptions` ORDER BY `subscriptions`.`id` DESC LIMIT 1
  User Load (0.3ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
  Rendered subscription_mailer/send_email.text.erb (0.6ms)
  Rendered subscription_mailer/send_email.html.haml (5.7ms)
NoMethodError: undefined method `ascii_only?' for nil:NilClass
  from /opt/blog/vendor/ruby/1.9.1/gems/mail-2.5.4/lib/mail/encodings.rb:68:in `param_encode'
  from /opt/blog/vendor/ruby/1.9.1/gems/mail-2.5.4/lib/mail/fields/content_type_field.rb:95:in `block in stringify'
  from /opt/blog/vendor/ruby/1.9.1/gems/mail-2.5.4/lib/mail/fields/content_type_field.rb:95:in `each'
  from /opt/blog/vendor/ruby/1.9.1/gems/mail-2.5.4/lib/mail/fields/content_type_field.rb:95:in `map'
  from /opt/blog/vendor/ruby/1.9.1/gems/mail-2.5.4/lib/mail/fields/content_type_field.rb:95:in `stringify'
  from /opt/blog/vendor/ruby/1.9.1/gems/mail-2.5.4/lib/mail/fields/content_type_field.rb:88:in `value'
  from /opt/blog/vendor/ruby/1.9.1/gems/mail-2.5.4/lib/mail/fields/content_type_field.rb:28:in `parse'
  from /opt/blog/vendor/ruby/1.9.1/gems/mail-2.5.4/lib/mail/fields/content_type_field.rb:24:in `initialize'
  from /opt/blog/vendor/ruby/1.9.1/gems/mail-2.5.4/lib/mail/field.rb:203:in `new'
  from /opt/blog/vendor/ruby/1.9.1/gems/mail-2.5.4/lib/mail/field.rb:203:in `new_field'
  from /opt/blog/vendor/ruby/1.9.1/gems/mail-2.5.4/lib/mail/field.rb:192:in `create_field'
  from /opt/blog/vendor/ruby/1.9.1/gems/mail-2.5.4/lib/mail/field.rb:149:in `update'
  from /opt/blog/vendor/ruby/1.9.1/gems/mail-2.5.4/lib/mail/header.rb:170:in `[]='
  from /opt/blog/vendor/ruby/1.9.1/gems/mail-2.5.4/lib/mail/message.rb:588:in `content_type='
  from /opt/blog/vendor/ruby/1.9.1/gems/actionmailer-4.0.0/lib/action_mailer/base.rb:695:in `mail'
  from /opt/blog/app/mailers/subscription_mailer.rb:19:in `send_email'
... 8 levels...
  from /opt/blog/vendor/ruby/1.9.1/gems/actionmailer-4.0.0/lib/action_mailer/base.rb:497:in `initialize'
  from /opt/blog/vendor/ruby/1.9.1/gems/actionmailer-4.0.0/lib/action_mailer/base.rb:480:in `new'
  from /opt/blog/vendor/ruby/1.9.1/gems/actionmailer-4.0.0/lib/action_mailer/base.rb:480:in `method_missing'
  from (irb):4
  from /opt/blog/vendor/ruby/1.9.1/gems/railties-4.0.0/lib/rails/commands/console.rb:90:in `start'
  from /opt/blog/vendor/ruby/1.9.1/gems/railties-4.0.0/lib/rails/commands/console.rb:9:in `start'
  from /opt/blog/vendor/ruby/1.9.1/gems/railties-4.0.0/lib/rails/commands.rb:64:in `<top (required)>'
  from /opt/blog/vendor/ruby/1.9.1/gems/railties-4.0.0/lib/rails/app_rails_loader.rb:43:in `require'
  from /opt/blog/vendor/ruby/1.9.1/gems/railties-4.0.0/lib/rails/app_rails_loader.rb:43:in `block in exec_app_rails'
  from /opt/blog/vendor/ruby/1.9.1/gems/railties-4.0.0/lib/rails/app_rails_loader.rb:32:in `loop'
  from /opt/blog/vendor/ruby/1.9.1/gems/railties-4.0.0/lib/rails/app_rails_loader.rb:32:in `exec_app_rails'
  from /opt/blog/vendor/ruby/1.9.1/gems/railties-4.0.0/lib/rails/cli.rb:6:in `<top (required)>'
  from /opt/blog/vendor/ruby/1.9.1/gems/railties-4.0.0/bin/rails:9:in `require'
  from /opt/blog/vendor/ruby/1.9.1/gems/railties-4.0.0/bin/rails:9:in `<top (required)>'
  from bin/rails:16:in `load'
  from bin/rails:16:in `<main>'1.9.1 :005 > 

【问题讨论】:

  • 我怀疑您的电子邮件配置中的电子邮件标题中的某些字段为空。如果您粘贴了邮件程序类和邮件程序配置,将会很有帮助。

标签: ruby ruby-on-rails-4 rubygems


【解决方案1】:

我在发送附件时遇到了类似的问题。

我需要将attachments[:report] 更改为attachments['report']

旧:

def email_report(email, report) attachments[:report] = File.read(report) mail(to: email, subject: 'report') end

新:

def email_report(email, report) attachments['report'] = File.read(report) mail(to: email, subject: 'report') end

我怀疑你正在发生类似的事情。

【讨论】:

【解决方案2】:

我遇到了这个问题,因为我在“收件人”字段中设置了一个用户实例,而不是 user.email 值。

【讨论】:

  • 我遇到了类似的问题,这是因为地址不是实际的电子邮件地址
【解决方案3】:

我有同样的问题。 我有以下内容:

include HTTParty

改成

require 'httparty'

它对我有用。

希望这会有所帮助。

【讨论】:

    【解决方案4】:

    我在发送 activestorage 附件时遇到此错误消息 作为邮件附件。问题出在文件名中:

    files.each do |file|
      # this next line does not work, throws NoMethodError: undefined method ascii_only?
      filename = file.filename  
      attachments[filename] = {
        mime_type: file.blob.content_type,
        content: file.blob.download
      }
    end
    

    当我将文件名显式转换为字符串时,错误消失了:

    files.each do |file|
      # convert to string and it does work!
      filename = file.filename.to_s
      attachments[filename] = {
        mime_type: file.blob.content_type,
        content: file.blob.download
      }
    end
    

    【讨论】:

      猜你喜欢
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      • 2017-12-09
      相关资源
      最近更新 更多