Rails 邮件程序内嵌附件错误

2023-12-25

我在 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>]],

我看了看mail来源。

仅当内容 ID 字段为零时才会发生此错误。然而打电话.url应该将内容 id 设置为空字符串,除非has_content_id?返回 true,这意味着多部分标头中已经有一个内容 id 字段。

这没有发生,所以我们一定有一个奇怪的情况,即标头对象正在报告has_content_id?true 还返回一个content_id of nil.

尝试在设置图形后明确设置内容 ID 字段。

attachments['visionamos.png'].header['content-id'] = 'logo.graphic'

如果这有效,那么为什么有必要这样做仍然是个谜。您是否对邮件程序配置或代码进行了任何其他更改?你升级了宝石吗?

添加回答问题编辑

标头解析器似乎失败,因为 id 中有空格...@MacBook Pro de Ruben.mail。尝试重新命名计算机,不要使用空格!我想这构成了一个错误mail。应删除空格或用合法字符替换空格。

我的猜测是,这也将解决原来的问题,并且您不需要设置content-id不再手动。因此,另一种猜测是:您更改了机器名称或将开发转移到新机器。这就是错误出现的时候!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 邮件程序内嵌附件错误 的相关文章

  • Nokogiri 保持 HTML 实体不变

    我希望 Nokogiri 保持 HTML 实体不变 但它似乎正在将实体转换为实际的符号 例如 Nokogiri HTML fragment p reg p to s 结果是 p p 似乎没有什么可以将原始 HTML 返回给我 inner h
  • 使用 Ruby aws-sdk 跟踪文件到 S3 的上传进度

    首先 我知道SO中有很多与此类似的问题 在过去的一周里 我读了大部分 如果不是全部 但我仍然无法让这项工作为我工作 我正在开发一个 Ruby on Rails 应用程序 允许用户将 mp3 文件上传到 Amazon S3 上传本身工作正常
  • 获取嵌套参数

    我有一个带有嵌套参数的表单 在下面的示例中 如何获取控制器中的 amount whole 值 Parameters utf8 gt authenticity token gt KCmBI6RLh0LdUsM2r5H1vhNykS1IXecF
  • 没有要加载的文件 - ffi_c (LoadError)

    这个问题困扰了我几天 每当我使用 bring to front 方法时 require rubygems require watir browser Watir Browser new browser bring to front 我收到此
  • Bundle 说 gem 丢失了 - 但事实并非如此?

    背景 我正在维护contentRuby On Rails 站点 但我确实没有 Rails 的经验 当尝试运行 Rails 服务器时 rails s我明白了 在任何来源中均找不到 activesupport 3 2 0 Run bundle
  • 在 ruby​​ 中下载多个 FTP 文件,如 d*.txt

    我需要连接到 ftp 站点并下载一堆名为 D txt 的文件 最多 6 个 你能帮我用 Ruby 编写这个代码吗 下面的代码只是 ftp Net FTP new ftp server site ftp login user pwd ftp
  • 我无法让 ruby​​ 开发工具包适用于 Windows XP

    所以 我一生都无法让它正常工作 我的最终目标是安装 dbd odbc gem 并使其正常工作 从我读过的多篇文章来看 我需要安装ODBC 绑定 http www ch werner de rubyodbc 对于 ruby 以及 dbd od
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 来自控制器的 Rails 验证

    有一个联系页面 可以输入姓名 电话 电子邮件和消息 然后发送到管理员的电子邮件 没有理由将消息存储在数据库中 问题 如何 在控制器中使用 Rails 验证 根本不使用模型 或者 在模型中使用验证 但没有任何数据库关系 UPD Model c
  • Ruby/Rails 集合到集合

    我有两个表与一个连接表连接 这只是伪代码 Library Book LibraryBooks 我需要做的是 如果我有一个图书馆的 id 我想获取该图书馆拥有的所有书籍所在的所有图书馆 因此 如果我有图书馆 1 图书馆 1 中有书籍 A 和
  • 我可以将 MAMP (MySQL) 或 XAMPP (MySQL) 与 Ruby on Rails 3 一起使用吗?

    我可以将 MAMP MySQL 或 XAMPP MySQL 与 Ruby on Rails 3 一起使用吗 我从 MYSQL com 安装了 MySQL 但遇到了很多麻烦 所以我喜欢使用 MAMP XAMPP Mysql 有人这样做吗 另外
  • 如何通过 UNIX mailx 命令发送电子邮件?

    如何通过 UNIX 发送电子邮件mailx命令 一个例子 echo something mailx s subject email protected cdn cgi l email protection 发送附件 uuencode fil
  • 如何从 Ruby 中的特定相对路径加载文件?

    我正在制作一颗供内部使用的宝石 在其中 我从另一个目录加载一些 YAML in
  • Ruby 是否有一个 Expect 等效 gem?

    Ruby 是否有一个 Expect 等效 gem 我尝试在 code google 和 ruby gems org 上搜索 但遗憾的是它没有出现 FYI Expect http en wikipedia org wiki Expect是一个
  • 我想要一个默认选择空白值的日期选择框

    我用了以下date select助手 但没有一个显示默认情况下选择空白值的日期选择框 通过以下所有代码 我得到了选择框 但选择了当前日期 我在 Rails 2 3 2 上
  • Shoulda/RSpec 匹配器 - 条件验证

    在我的代码中 我使用 Shoulda 匹配器进行了以下验证 效果很好 it should validate presence of name 在我的模型中 我已将条件添加到验证中 validates presence of name if
  • Rails 安全:完全避免大规模分配

    我倾向于不需要批量分配 http guides rubyonrails org security html mass assignment我的生产代码中的功能 在我的测试代码中 我经常使用它 但在这些情况下我do想要设置任意列 因此 如果在
  • 适用于移动设备的响应式订单确认电子邮件?

    我从未见过令人惊叹的订单确认 发票电子邮件 即使是最好的 html5 网站也会发送糟糕的订单确认电子邮件 有时是纯文本 我相信这是因为发票通常需要使用表格来显示购买的物品 这在移动设备上实现起来非常困难 我发现了一些让手机上的表格更易于管理
  • 让 Rails 生产在端口 80 上运行

    我正在尝试让我的 Rails 应用程序在生产模式下运行 但遇到了一些困难 我正在使用 Passenger 和 apache 并运行 Ubuntu 12 04 我已经配置和创建了生产数据库 并设置了乘客 状态如下 rvmsudo passen
  • Ruby 中的 url_encode

    I read 的文档url encode http rdoc info stdlib erb 1 9 3 ERB Util 3Aurl encode 是否有一个表可以准确地告诉我哪个字符被编码为什么 使用url encode ERB s u

随机推荐

  • 如何将参数传递到 Flex/actionscript 中的事件侦听器函数中?

    因为当使用 sql lite 时 如果你尝试同时执行一个函数 它会抛出一个错误 我只是想创建一个函数来检查它是否正在执行 如果它在 10 毫秒内重试 这个函数就可以正常工作如果我不必向函数传递任何参数 但我很困惑如何将变量传递回它将执行的函
  • Pandas 到 Excel 条件格式整列

    我想将 Pandas 数据框写入 Excel 并格式化 为此我正在使用xlsxwriter 我的问题有两个 首先 如何将条件格式应用于整列 在里面examples http xlsxwriter readthedocs io example
  • 如何在Python内部列表中运行嵌套循环,以便外部循环始终从列表的下一个元素开始,依此类推

    我有一个类似的列表 16777230 0 16777226 1 16777252 2 16777246 0 我想在 python 中的操作的循环 嵌套循环 内创建一个循环 以便内部循环始终从外部循环的下一个元素开始 例如 外循环将在每次迭代
  • '(' 或 '[' 预期

    尝试编译我的程序时出现以下错误 预期为 或 public AccountArrayList line one below is the hi lighted code ArrayList accounts new ArrayList acc
  • Python 模块初始化

    在模块代码中初始化模块中的对象是不好的做法吗 in Module py class Foo object def init self self x Foo Foo Foo 与用户代码相比 您可以 gt gt gt from Module i
  • 同时支持 Android 和 Android TV 的 Android Studio 项目

    我正在尝试创建一个同时支持 Android 手机 平板电脑 和 AndroidTV 的 AndroidStudio 项目 目标是在手机 平板电脑和 AndroidTV 上拥有类似的功能 同时不需要另一个来操作 并重用代码 当我创建一个新项目
  • 在 iPhone 上的 iOS Safari 中访问相机

    I have 单页网络应用程序 SPA 那个verifies用户作为注册过程的一部分 验证的一部分是捕获selfie用户的 为此 我实现了以下代码的一个版本来获取camera输入到一个video网页上的元素 然后我可以从中sample图像转
  • 如何在添加数据后调整android webview的大小

    在布局 线性 垂直 层次结构中 我有多个视图 其中之一是 WebView 它们都有相同的参数 android layout width fill parent android layout height wrap content 对于所有视
  • c++filt 不会分解 typeid 名称

    我正在 GCC 上运行代码C 编译器 输出 type info name include
  • SQLException:等待空闲的可用连接超时

    我正在用 java 构建一个应用程序Play Framework 2 0 4 该应用程序部署在heroku使用cleardb数据库 用户不断收到此偶尔的错误 PlayException Execution exception Persist
  • WPF 应用程序中的 IIS 平滑流处理

    我怎样才能玩IIS 平滑流式传输 http www iis net expand SmoothStreamingWPF 应用程序中的视频 我知道 Silverlight 对其有内置支持 但我找不到 WPF 的太多信息 会不会MediaEle
  • 为什么 grid-gap 会改变 CSS Grid 中列的宽度?

    使用 css grid 我在容器内设置了一个 1002px 宽的 24 列网格 在容器 div 内 有一个跨 21 列的子 div 我期望子 div 的宽度是 21 24 1002 876 75 当添加 grid gap 属性时 列的宽度减
  • 连续 GA 命中率下降

    我想使用 Google 分析和本地存储跟踪离线事件 这是我的代码 var gaq gaq gaq push setAccount UA 27966345 1 gaq push setDomainName none gaq push setS
  • 使用正则表达式匹配电视和电影文件名

    我一直在努力获取正则表达式来从视频文件名中获取电视节目或电影名称 播出年份 如果存在 季节 和剧集 我有一个正则表达式 如下 似乎对于电影和电视节目具有双年日期的节目 其中一个年份是节目 电影名称 另一个是它播出的年份 很有效 对于电视节目
  • 不支持的列数据类型 ODP.NET

    我正在尝试将基于 ODP NET 11g 构建的现有应用程序升级到 ODP NET 12c 希望它能够提高数据库调用和数据检索的性能 在这方面 我安装了最新的ODP NET 12c 并将所有Oracle项目引用更改为指向最新的Oracle
  • 当 Debug = False 时,Django 应用程序在本地主机上收到服务器错误 500

    我的 django 应用程序运行正常 没有任何错误 Debug True in 设置 py 但是当我将其切换到Debug False I get 服务器错误 500 另外我得到 HTML 文档的字符编码未声明 如果文档包含 US ASCII
  • Grails:request.JSON 从哪里来?如何使用 jQuery 的 .ajax() 或 .post() 将内容放在那里?

    我有一个控制器 它需要一些 json 请求正文 并用它做一些很棒的事情 def myController def myAction println Here is request JSON request JSON as JSON prin
  • 使用 babel 的简单 ES7 装饰器

    我无法运行此代码 https www npmjs com package core decorators readonly https www npmjs com package core decorators readonly 我使用 g
  • 关闭工作簿时的 VBA Excel 操作[重复]

    这个问题在这里已经有答案了 当有人关闭文件时 是否可以自动让 Excel 执行操作 情况 我有一个 Excel 文件 其他几个人也使用该文件 该文件在保存时发布一个 mhtml 文件 此 mhtml 文件将使用昨天的日期保存 如 Dashb
  • Rails 邮件程序内嵌附件错误

    我在 Action Mailer 中有一个非常罕见的行为 我在 5 个月前实施了一个邮件操作 它正在工作 但昨天 由于某种奇怪的原因 它崩溃了 问题 我有一个邮件布局 为了在我的所有电子邮件中使用它 我在其中渲染了之前由之前过滤器附加的图像