在 iPhone HTML 邮件中显示本地图像

Posted

技术标签:

【中文标题】在 iPhone HTML 邮件中显示本地图像【英文标题】:Display local image in iPhone HTML mail 【发布时间】:2011-02-01 19:35:15 【问题描述】:

在我的应用程序中,我正在使用 3.0+ MFMailComposeViewController 撰写 HMTL 电子邮件。 为此,我创建了一个带有一些占位符的 html 文件。 在我的代码中,我读取了 HTML 文件,并使用 replaceOccurrencesOfString 将占位符替换为来自应用程序的数据。 这样,我编写了我要发送的电子邮件的正文。 这一切都很好,除了在我的 HTML 文件中,我有一个 <img src='imageplaceholderpath' /> 标记。 不知何故,我不知道应该用什么替换这个imageplaceholderpath,以便引用驻留在我的应用程序中的图像。 这是一种有效的方法吗?如果是这样,我应该放在那里的路径背后的语法/逻辑是什么? 我很欣赏你的见解! 问候 谢克林

【问题讨论】:

【参考方案1】:

很遗憾,iPhone 3.x API 不支持此功能。

http://developer.apple.com/iphone/library/documentation/MessageUI/Reference/MFMailComposeViewController_class/Reference/Reference.html

它需要 Content-ID: 成为附件子部分的一部分,但它不是。

 - (void)addAttachmentData:(NSData*)attachment mimeType:(NSString*)mimeType fileName:(NSString*)filename

【讨论】:

【参考方案2】:

我找到了这篇回答了我大部分问题的帖子:http://www.iphonedevsdk.com/forum/iphone-sdk-development/25021-embedding-image-email-body.html。

【讨论】:

【参考方案3】:

请注意,使用data: URI 并不适用于所有邮件客户端。除非安装了 IE8,否则使用 IE 作为渲染引擎的那些根本不支持它,即使那样,according to Wikipedia、data: URI 也被限制为最大 32 KB。

实现此功能的最简单方法是将图像放在您自己的服务器上的某个位置,并使用完整的 http:// URI 引用它。如果您由于某种原因无法执行此操作(可能图像是作为使用您的应用程序的一部分生成的),那么您可以尝试将图像附加为 MIME 子部分并从 HTML 中引用它。

我的邮件客户端不会自动加载远程图像,但是当我打开某些垃圾邮件时,它仍然有图像。它是这样工作的:

按照 yonel 的建议,将图片附加到您的邮件中。不知何故,您还需要将 Content-ID: 标头添加到子部分。然后,此标头的内容将用作图像上的 src 属性。我的垃圾邮件在 HTML 中如下所示:

<img src="cid:image001.jpg@01CACC43.7035CE50">

附件子部分如下所示:

Content-Type: image/jpeg;
    name="image001.jpg"
Content-Transfer-Encoding: base64
Content-ID: <image001.jpg@01CACC43.7035CE50>

查看addAttachmentData:mimeType:fileName: 的文档,我猜您将无法使其正常工作,必须考虑使用原始 SMTP 发送电子邮件。

【讨论】:

【参考方案4】:

我不知道 HTML 格式是否对你来说是必须的,但实际上可以在电子邮件中嵌入图像使用 HTML,只需图片作为附件。

看看这里是怎么实现的:

http://iphone-dev-tips.alterplay.com/2009/11/attaching-image-of-uiview-to-email.html

关键部分是:

// ATTACHING A SCREENSHOT
NSData *myData = UIImagePNGRepresentation(screenshot);
[controller addAttachmentData:myData mimeType:@"image/png" fileName:@"route"];

您将获得UIImage 的PNG 表示形式(如NSData)并将其附加到您的电子邮件中。

【讨论】:

我认为 HTML 是我需要的,因为我想控制消息的文本格式。更重要的是,我希望图像内嵌在文本中的特定位置。【参考方案5】:

我认为您不能像普通电子邮件客户端那样将图像嵌入到电子邮件中。但是,您似乎可以将图像数据作为 base64 编码数据直接包含在 HTML 中。这是一种非常不标准的处理方式,因此电子邮件可能无法在所有电子邮件客户端上完美显示。

查看this question了解更多信息,以及this forum post上的示例代码

【讨论】:

以上是关于在 iPhone HTML 邮件中显示本地图像的主要内容,如果未能解决你的问题,请参考以下文章

SVG 图像未显示在 html 电子邮件中

编码图像未显示在本机 iPhone 邮件应用程序中

iPhone Mail 在 html 电子邮件中调整图像/div 的大小

HTML 电子邮件中的背景图像

使用phpmailer通过带有图像的html文件发送电子邮件

在 HTML 电子邮件 Django 中显示内联图像