我需要向gmail发送一封包含内嵌图片的电子邮件。
我使用perl和MIME:LITE,但Gmail会将我的图片显示为附件,而不是内联。
有什么问题?
这是我的代码,
use MIME::Lite;
my $texto = '<html><body>hola <img src="cid:image" /> adios </body></html>';
#
my $msg = MIME::Lite->new(
Date => "Xxx, 22 Oct 2012 17:45:00 CET",
From => "pruebachunga@aqui.com",
To => 'chimpun@forum.chimpun',
Subject => "En un lugar de la mancha",
'Message-ID' => '123456789012345656789@8888888888888ldkf',
Type =>'multipart/related'
);
$msg->attach(
Type => 'text/html',
Data => $texto,
Encoding => 'quoted-printable'
);
$msg->attach(
Encoding => 'base64',
Type => 'image/png',
Path => "image.png",
Id => "image"
);
$msg->scrub(['x-mailer', 'Content-Disposition']);
print $msg->as_string;
结果是这封电子邮件(我剥离图像部分)
Content-Transfer-Encoding: binary
Content-Type: multipart/related; boundary="_----------=_135100636840600"
MIME-Version: 1.0
Date: Xxx, 22 Oct 2012 17:45:00 CET
From: pruebachunga.com
To: chimpun@forum.chimpun
Subject: En un lugar de la mancha
Message-Id: 123456789012345656789@8888888888888ldkf
This is a multi-part message in MIME format.
--_----------=_135100636840600
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html
<html><body>hola <img src=3D"cid:image" /> adios </body></html>=
--_----------=_135100636840600
Content-Id: <image>
Content-Transfer-Encoding: base64
Content-Type: image/png; name="image.png"
iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAAEwO1XwAAAAB3RJTUUH1gYE
...
kmqg1wGgkx35p/KStnLuw2BGhXwIZqT+D8sxTLVK0VpuAAAAAElFTkSuQmCC
--_----------=_135100636840600--
修改:
在网上阅读后,我认为该图片是附件,并且存在称为“图像屏蔽”的问题:http://www.campaignmonitor.com/resources/will-it-work/image-blocking/
我坚持我的问题,因为人们可能会发现这个问题很有趣。现在,我认为这段代码是正确的,并且使用其他消息,其他ID,其他发件人......此代码可以正常运行。
答案 0 :(得分:1)
在网上阅读后,我认为该图片是附件,并且存在称为“图像屏蔽”的问题:http://www.campaignmonitor.com/resources/will-it-work/image-blocking/
我坚持我的问题,因为人们可能会发现这个问题很有趣。现在,我认为这段代码是正确的,并且使用其他消息,其他ID,其他发件人......此代码可以正常运行。
答案 1 :(得分:0)
你不应该擦洗'Content-Disposition'字段 - 这很重要!
MIME :: Lite默认使用内联内容处理, 但你也可以明确地设置它
$msg->attach(
Encoding => 'base64',
Type => 'image/png',
Path => 'image.png',
Id => 'image',
Disposition => 'inline',
);
它应该都可以。
答案 2 :(得分:0)
我使用 exter nal变体。
my $mailHTML = new MIME::Lite::HTML
From => $i_from,
To => $i_to,
Subject => $i_subj,
IncludeType => 'extern',
HTMLCharset => 'utf-8';
在这种情况下,您需要在HTML中指定
<img src="http://external_url/to_image">
http或https!