在 Delphi 中将 Base64 图像发送到 gmail
Base64 images to gmail in Delphi
我知道这个话题已经被提到过很多次,但并不是专门针对 Delphi 的。
我正在尝试通过邮件将生成的二维码作为内联 img 发送。
目前我正在成功地这样做,但只是 URL :
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABqQAAAakCAYAAA..." width="170" height="170">
但是对于 Gmail,它只添加了一个空方块。
我查了很多关于如何将 img 嵌入电子邮件的答案,例如这 2 个帖子:
Base64 images to gmail
Gmail blocking small embedded inline images in email template
但是我不明白如何实现Delphi中答案中的代码。
我还找到了从磁盘获取 img 作为附件的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
oSmtp : TMail;
cid : WideString;
begin
oSmtp := TMail.Create(Application);
// Add embedded image and return the unique identifier of the attachment
cid := oSmtp.AddInline('c:\test.jpg');
// Set HTML body format
oSmtp.BodyFormat := 1;
// Set HTML body
oSmtp.BodyText := '<html><body>Hello, this is an embedded <img src="cid:' +
cid + '"> picture.</body></html>';
end;
// i do not use this code it is just an example of what i have found thus far
目前我对 img 所做的一切是这样的:
HtmlBody = ReplaceStr(HtmlBody, [parameter_img],'<img src="data:image/png;base64,' + StreamToString(imgStream) + '"width="170" height="170"/>');
但是我不能保存imgs所以我想直接插入base64string。
更新
我已经设法在我的电子邮件中找到附件,它就在那里,但在文本区域只有一个空白方块。
代码的 img 部分和原始电子邮件消息:
<img src="cid:qrcode.png" width="170" height="170" />';
--wpn=_6hoco9kAT3gWlDy6D313EA3BETyyOfe
Content-Type: text/html; charset="windows-1250"
Content-Transfer-Encoding: base64
Content-Disposition: inline
PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv
L0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPjxtZXRhIGh0
dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRv
d3MtMTI1MCI+PGJvZHk+PGltZyBzcmM9Imh0dHBzOi8vbmFpcy1yYXp2b2ouaXBsdXMuc2kvX2Fz
...
--wpn=_6hoco9kAT3gWlDy6D313EA3BETyyOfe
Content-Type: image/png; name="qrcode.png"
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="qrcode.png"
Content-ID: qrcode.png
--wpn=_6hoco9kAT3gWlDyD6D313EA3BEyyOfe--
起初我以为是这个问题:PCFET0NUWVBFIGh0bWwgUFVCTElDICItL
因为它看起来不像以 iVBOR 开头的 png 的 base64 代码。
但问题出在这里:Content-ID: qrcode.png
当设置 Content-ID 时你必须小心,因为在某些版本中简单地用引号设置它是不够的,你必须像这样添加 <> 来设置它:Content-ID: <qrcode.png>
.
结果如愿以偿
我知道这个话题已经被提到过很多次,但并不是专门针对 Delphi 的。 我正在尝试通过邮件将生成的二维码作为内联 img 发送。 目前我正在成功地这样做,但只是 URL :
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABqQAAAakCAYAAA..." width="170" height="170">
但是对于 Gmail,它只添加了一个空方块。 我查了很多关于如何将 img 嵌入电子邮件的答案,例如这 2 个帖子:
Base64 images to gmail
Gmail blocking small embedded inline images in email template
但是我不明白如何实现Delphi中答案中的代码。
我还找到了从磁盘获取 img 作为附件的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
oSmtp : TMail;
cid : WideString;
begin
oSmtp := TMail.Create(Application);
// Add embedded image and return the unique identifier of the attachment
cid := oSmtp.AddInline('c:\test.jpg');
// Set HTML body format
oSmtp.BodyFormat := 1;
// Set HTML body
oSmtp.BodyText := '<html><body>Hello, this is an embedded <img src="cid:' +
cid + '"> picture.</body></html>';
end;
// i do not use this code it is just an example of what i have found thus far
目前我对 img 所做的一切是这样的:
HtmlBody = ReplaceStr(HtmlBody, [parameter_img],'<img src="data:image/png;base64,' + StreamToString(imgStream) + '"width="170" height="170"/>');
但是我不能保存imgs所以我想直接插入base64string。
更新
我已经设法在我的电子邮件中找到附件,它就在那里,但在文本区域只有一个空白方块。
代码的 img 部分和原始电子邮件消息:
<img src="cid:qrcode.png" width="170" height="170" />';
--wpn=_6hoco9kAT3gWlDy6D313EA3BETyyOfe
Content-Type: text/html; charset="windows-1250"
Content-Transfer-Encoding: base64
Content-Disposition: inline
PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv
L0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPjxtZXRhIGh0
dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRv
d3MtMTI1MCI+PGJvZHk+PGltZyBzcmM9Imh0dHBzOi8vbmFpcy1yYXp2b2ouaXBsdXMuc2kvX2Fz
...
--wpn=_6hoco9kAT3gWlDy6D313EA3BETyyOfe
Content-Type: image/png; name="qrcode.png"
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="qrcode.png"
Content-ID: qrcode.png
--wpn=_6hoco9kAT3gWlDyD6D313EA3BEyyOfe--
起初我以为是这个问题:PCFET0NUWVBFIGh0bWwgUFVCTElDICItL
因为它看起来不像以 iVBOR 开头的 png 的 base64 代码。
但问题出在这里:Content-ID: qrcode.png
当设置 Content-ID 时你必须小心,因为在某些版本中简单地用引号设置它是不够的,你必须像这样添加 <> 来设置它:Content-ID: <qrcode.png>
.
结果如愿以偿