No'*_*man 2 delphi indy delphi-7
我正在尝试向我的程序添加使用 Indy 9 通过 SMTP 发送 html 电子邮件的功能。如果该程序仅包含文本(文本将使用希伯来语,因此我需要从右到左显示,这意味着我使用 HTML 语句),则电子邮件将被正确发送。我的问题在于将图片嵌入到 HTML 流中。
HTML 流将使用类似的命令
<IMG SRC="cid:foo4atfoo1atbar.net" ALT="IETF logo">
Run Code Online (Sandbox Code Playgroud)
虽然 Indy 10 组件 TIdAttachmentFile 有一个 ComponentID 属性,其值必须设置为“cid”引用的值,但我找不到在 Indy 9 中设置 ComponentID 属性的位置。
目前,处理添加图片(其名称在 laPicture.text 中)的代码如下所示
if laPicture.text <> '' then
with TIdAttachment.Create (email.MessageParts, laPicture.text) do
begin
ContentDisposition:= 'inline';
ContentType:= 'image/jpeg';
DisplayName:= ExtractFileName (laPicture.text);
filename:= ExtractFileName (laPicture.text);
end;
Run Code Online (Sandbox Code Playgroud)
我在哪里定义 ContentID?
而且,虽然这是一个愚蠢的问题,但我怎么知道我拥有哪个版本的 Indy?
TIdAttachment派生自TIdMessagePart,它具有公共ContentID属性。如果您安装的 Indy 9 版本没有该属性,那么您使用的是过时的版本,因此请改用该ExtraHeaders属性Content-ID手动添加标题。
有关使用 HTML 电子邮件的更多信息,请查看 Indy 网站上的以下博客文章:
更新:因此,如果 HTML 说,cid:foo4atfoo1atbar.net那么您需要在代码中执行此操作以匹配它:
with TIdAttachment.Create (email.MessageParts, laPicture.text) do
begin
...
ContentID := '<foo4atfoo1atbar.net>';
// or this, if you do not have the ContentID property available:
// ExtraHeaders.Values['Content-ID'] := '<foo4atfoo1atbar.net>';
end;
Run Code Online (Sandbox Code Playgroud)
请注意,在 Indy 9 中,您必须手动提供括号。如果省略它们,Indy 10 会为您插入它们,例如:
ContentID := 'foo4atfoo1atbar.net';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3281 次 |
| 最近记录: |