我在 Action Mailer 中有一个非常罕见的行为,我在 5 个月前实施了一个邮件操作,它正在工作,但昨天,由于某种奇怪的原因,它崩溃了。
问题
我有一个邮件布局,为了在我的所有电子邮件中使用它,我在其中渲染了之前由之前过滤器附加的图像
布局=app/views/layouts/email.html.erb
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Visionamos</title>
<link rel="stylesheet" type="text/css" href=<%="/assets/email.css" %>>
</head>
<body>
<table>
<tr>
<td id="head">
<table>
<tr class="image">
<td><%= image_tag(attachments['visionamos.png'].url) %></td>
...
..
.
用户邮件 =app/mailers/users.rb
class UsuariosMailer < ActionMailer::Base
include AbstractController::Callbacks # include controller callbacks
default :from => "[email protected] /cdn-cgi/l/email-protection"
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} <#{@usuario.email}>"
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'
<td><%= image_tag(attachments['visionamos.png'].url) %></td>
但图片已附加到电子邮件中
>> attachments['visionamos.png']
=> #<Mail::Part:70191451538040, Multipart: false, Headers: <Content-Type: image/png; filename="visionamos.png">, <Content-Transfer-Encoding: binary>, <Content-Disposition: inline; filename="visionamos.png">, <content-id: >>
我的开发环境
Mac 与小牛
Ruby 2.0 + Rails 3.2.16
Plus
- 该电子邮件正在我的同事环境(ubuntu 和 mac)中的亚马逊 ec2 实例中运行
- 如果我删除布局中的 image_tag 方法,则会发送电子邮件并且图像显示为附件,没有内联
更新!!!
我已经尝试过@Gene解决方案,但即使发送了电子邮件,图像也是普通附件,没有内联,所以深入查看,我发现了这个
>> attachments.inline['visionamos.png'].header
=> #<Mail::Header:0x00000106cf6870 @errors=[], @charset=nil, @raw_source="", @fields=[#<Mail::Field:0x00000106cf60c8 @field=#<Mail::ContentTypeField:0x00000106cf5fd8 @charset=nil, @main_type="image", @sub_type="png", @parameters={"filename"=>"visionamos.png"}, @name="Content-Type", @length=nil, @tree=nil, @element=#<Mail::ContentTypeElement:0x00000106cf5d30 @main_type="image", @sub_type="png", @parameters=[{"filename"=>"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=#<Mail::ContentTransferEncodingElement:0x00000106d16ff8 @encoding="binary">, @value="binary">, @field_order_id=24>, #<Mail::Field:0x00000106d14a78 @field=#<Mail::ContentDispositionField:0x00000106d14960 @charset=nil, @name="Content-Disposition", @length=nil, @tree=nil, @element=#<Mail::ContentDispositionElement:0x00000106d145c8 @disposition_type="inline", @parameters=[{"filename"=>"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 |<52fe636fae8a6_686085098c087130@MacBook Pro de Ruben.mail>|
原因是:需要 !、#、$、%、&、'、*、+、-、/、=、?、^、_、`、{、|、}、~、@、.、"、 之一> 在 ]] 之后的第 1 行第 40 列(字节 40),@charset=#、@name="content-id"、@length=nil、@tree=nil、@element=nil、@值=“”>,@field_order_id=100>]>
有趣的部分是
#<Mail::Field::ParseError: Mail::MessageIdsElement can not parse |<52fe636fae8a6_686085098c087130@MacBook Pro de Ruben.mail>|
Reason was: Expected one of !, #, $, %, &, ', *, +, -, /, =, ?, ^, _, `, {, |, }, ~, @, ., ", > at line 1, column 40 (byte 40) after <52fe636fae8a6_686085098c087130@MacBook>]],