【问题标题】:Sending mail with embedded image in Ruby在 Ruby 中发送带有嵌入图像的邮件
【发布时间】:2017-04-21 06:04:01
【问题描述】:

我想发送一封带有附加图片的邮件并将该图片嵌入到 html 中。作为标签的来源,我应该写什么,是否缺少诸如 content_type 之类的标题部分?

当我进行实际测试时,我会向我的 gmail 帐户发送邮件。我可以看到有一个名为“未命名”的附件,即使我下载也无法显示图像。

宝石:小马

require 'pony'
Pony.override_options = { :via => :test }
Pony.mail(
    :to => 'foo@bar',
    :from => 'abc@abc.com',
    :subject => 'test123',
    :body =>   "<h1><strong>Dear X, check the newsletter ,<br></strong></h1> <img src='attached image' />",
    :attachments => {"happy_image.jpg" => File.read("happy_image.jpg")}
)
puts Mail::TestMailer.deliveries

输出:

Date: Tue, 06 Dec 2016 17:23:05 +0300

From: abc@abc.com

To: foo@bar

Message-ID: <5846c9ca183d6_5983c9fd899060@MW7BIQ12TKYHQC.mail>

Subject: test123

Mime-Version: 1.0

Content-Type: multipart/mixed;

boundary="--==_mimepart_5846c9caf15a_5983c9fd8989e5";

charset=UTF-8

Content-Transfer-Encoding: 7bit





----==_mimepart_5846c9caf15a_5983c9fd8989e5

Content-Type: text/plain;

charset=UTF-8

Content-Transfer-Encoding: 7bit



<h1><strong>Dear X, check the newsletter ,<br></strong></h1> <img src='' />

----==_mimepart_5846c9caf15a_5983c9fd8989e5

Content-Type: image/jpeg;

 filename=happy_image.jpg

Content-Transfer-Encoding: base64

Content-Disposition: attachment;

filename=happy_image.jpg

Content-ID: <happy_image.jpg@MW7BIQ12TKYHQC>



/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQE

BQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/

2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU

FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAHiAuMDASIAAhEBAxEB/8QA

HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUF

BAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK

FhcYGQ==



----==_mimepart_5846c9caf15a_5983c9fd8989e5--

【问题讨论】:

    标签: ruby-on-rails ruby html-email pony


    【解决方案1】:

    您应该能够对图像进行 BASE64 编码,并将生成的字符串用作img 标记的src

    例如:

    <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWQAAAD8CAYAAAB..."/>
    

    还要确保您的内容类型设置为 text/html 而不是 text/plain。查看邮件,似乎它设置为后者,因此为什么图像不呈现而标签呈现为文本。将以下内容添加到您的参数中以使用 text/html 内容类型:

    :headers =&gt; { 'Content-Type' =&gt; 'text/html' }

    【讨论】:

    • 您好,我已经尝试过这种方法,但是当我显示邮件时,它会显示带有 img 标签的纯字符串,例如 ""
    • 啊。您需要在标题中将内容类型设置为 HTML,否则它将作为文本处理。查看您的原始问题,似乎内容类型当前设置为text/plain。我已更新问题以添加此内容。
    • 正如你所说,我添加了 headers 选项,但结果对我来说是一样的。就像这个纯字符串 '' :(
    • GMail 删除嵌入数据的 imgs。
    猜你喜欢
    • 2011-06-01
    • 2012-04-07
    • 2021-10-31
    • 2013-01-30
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 2015-07-29
    • 2015-04-14
    相关资源
    最近更新 更多