Rails邮件程序错误与内联附件
我在Action Mailer中有一个非常罕见的行为,我在5个月前实施了一个邮件动作并且它正在运行,但是昨天,由于一些奇怪的原因,它崩溃了。
问题
我有一个邮件布局,为了在我的所有电子邮件中使用它,在其中我渲染之前由filter附加的图像
Layout = app/views/layouts/email.html.erb
Visionamos <link rel="stylesheet" type="text/css" href=> ... .. .
用户邮件app/mailers/users.rb
= app/mailers/users.rb
class UsuariosMailer "monitoreo@visionamos.com" layout "mail" #Set email layout before_filter :add_inline_attachments! # Add image header for all actions def otp_password(user, otp_key) @usuario = user @code = otp_key email_with_name = "#{@usuario.nombre} " mail(:to => email_with_name, :subject => "One time password, Plataforma Visionamos") end private def add_inline_attachments! attachments.inline['visionamos.png'] = File.read("#{Rails.root}/app/assets/images/visionamos.png") end end
现在,当我尝试发送电子邮件时,我收到此错误
NoMethodError - undefined method `match' for nil:NilClass: mail (2.5.4) lib/mail/utilities.rb:112:in `unbracket' mail (2.5.4) lib/mail/part.rb:29:in `cid' mail (2.5.4) lib/mail/part.rb:33:in `url' app/views/layouts/mail.html.erb:13:in `_app_views_layouts_mail_html_erb__573848672563180413_70191451095440'
但图像附在电子邮件中
>> attachments['visionamos.png'] => #<Mail::Part:70191451538040, Multipart: false, Headers: , , , >
我的DevEnv
Mac with Maverics Ruby 2.0 + Rails 3.2.16
加
- 电子邮件正在我的amazon ec2实例中工作,在我的同事环境中(ubuntu和mac)
- 如果我删除布局中的image_tag方法,则会发送电子邮件,图像显示为附件,不显示内联
更新!
我已经尝试过@Gene解决方案但是即使发送了电子邮件,图像也是正常的附件,没有内联,所以看起来很深,我发现了这个
>> attachments.inline['visionamos.png'].header => #<Mail::Header:0x00000106cf6870 @errors=[], @charset=nil, @raw_source="", @fields=[#<Mail::Field:0x00000106cf60c8 @field=#"visionamos.png"}, @name="Content-Type", @length=nil, @tree=nil, @element=#"visionamos.png"}]>, @value="image/png; filename=\"visionamos.png\"", @filename="visionamos.png">, @field_order_id=23>, #<Mail::Field:0x00000106d17390 @field=#<Mail::ContentTransferEncodingField:0x00000106d172a0 @charset=nil, @name="Content-Transfer-Encoding", @length=nil, @tree=nil, @element=#, @value="binary">, @field_order_id=24>, #<Mail::Field:0x00000106d14a78 @field=#<Mail::ContentDispositionField:0x00000106d14960 @charset=nil, @name="Content-Disposition", @length=nil, @tree=nil, @element=#"visionamos.png"}]>, @value="inline; filename=\"visionamos.png\"", @parameters={"filename"=>"visionamos.png"}, @filename="visionamos.png">, @field_order_id=26>, #<Mail::Field:0x00000106d3e8f0 @field=#<Mail::UnstructuredField:0x00000106d5ef60 @errors=[["content-id", nil, #<Mail::Field::ParseError: Mail::MessageIdsElement can not parse ||
原因是:预期的一个!,#,$,%,&,’,*,+, – ,/,=,?,^,_,`,{,|,},〜,@,。,“, >在]之后的第1行第40列(字节40),@ charset =#,@ name =“content-id”,@ length = nil,@ tree = nil,@ element = nil,@ value =“”>,@ field_order_id = 100>]>
有趣的是
#<Mail::Field::ParseError: Mail::MessageIdsElement can not parse || Reason was: Expected one of !, #, $, %, &, ', *, +, -, /, =, ?, ^, _, `, {, |, }, ~, @, ., ", > at line 1, column 40 (byte 40) after ]],
我查看了mail
来源。
仅当内容标识字段为nil时才会发生此错误。 但是,调用.url
应该将内容id设置为空字符串,除非has_content_id?
返回true,表示multipart标头中已有一个内容id字段。
这没有发生,所以我们必须有一个奇怪的情况,标题对象报告has_content_id?
是的,但是返回的内容nil
。
在设置图形后,请尝试显式设置内容ID字段。
attachments['visionamos.png'].header['content-id'] = 'logo.graphic'
如果这样可行,那么仍然存在为什么必要的难题。 您是否对邮件程序配置或代码进行了任何其他更改? 你升级了任何gem吗?
添加回复问题编辑
标题解析器似乎失败了,因为id中有空格...@MacBook Pro de Ruben.mail
。 尝试重命名计算机,没有空格! 我想这构成了mail
的错误。 空间应该被省略或替换为合法的特征。
我的猜测是,这也将解决原始问题,您不再需要手动设置content-id
。 因此,另一个猜测:您更改了计算机名称或将开发移至新计算机。 那就是虫子出现的时候!
sudo scutil --set HostName 'mymachine'
为我修好了。
scutil --get HostName
回来了(没有设定)