我正在使用Delphi 7中的Indy idMessage对象通过SMTP协议发送邮件(因此Indy版本是9)。我用html格式发送消息没有问题,但现在我想在消息正文中嵌入一个图像。我看到,这不会像放进:
<img src='C:Fooimage.png'>
在我看来,您必须初始化一个IdAttach并在html中引用它,但我无法让它这样工作。
接下来,我将保留用于创建消息正文的代码
procedure TfmMail.SendMail;
var
IdMensaje: TIdMessage;
smtp: TIdSMTP;
begin
IdMensaje := TIdMessage.Create(nil);
IdMensaje.Clear;
IdMensaje.Body.Clear;
IdMensaje.ContentType := 'text';
IdMensaje.From.Text := 'Title from email';
IdMensaje.Body.Text := 'greeting';
IdMensaje.ContentType := 'text/html';
//<img src='C:Fooimage.png> -> Don't work
IdMensaje.Body.Text := IdMensaje.Body.Text + '<p> Other text to body </p>;
2条答案
按热度按时间bvhaajcl1#
对于Indy 9,您需要:
TIdMessage.ContentType
属性设置为multipart/related; type="text/html"
,TIdText
对象添加到TIdMessage.MessageParts
属性(而不是使用TIdMessasage.Body
),该对象包含HTML内容。HTML的<img>
标记可以使用src
属性中的cid:<content-id>
标识符来引用每个附件。TIdMessage.MessageParts
添加单独的TIdAttachment
对象,并为每个映像分配唯一的Content-ID
标头。试着这样做:
dced5bon2#
1.您可以将
img
标记指向外部url(请记住,除非用户明确单击“下载图像”,否则默认情况下Outlook将阻止图像下载)。1.您可以添加图像作为附件,在附件MIME部分设置它们的
Content-Id
MIME头(例如,设置为'xyz'
),然后通过该Content-id(例如,<img src="cid:xyz">
)在HTML体中引用该图像1.第三种选择是在
img
标记中嵌入图像数据,但并不是所有的电子邮件客户端都理解这一点-旧版本的Outlook不会像<img src="data:image/jpeg;base64, LzlqLzRBQ..." />
那样呈现图像