我自己找到了解決方案,問題在於MIME。
之前,我是發送電子郵件只有一個MIME類型是:Content-type: text/html
而現在,我創建了一個包含一個TMimeMess
TMimepart
的爲Multiparts
:
var
m : TMimemess;
SubPartSignature,
mix ,
rel : TMimepart;
m := TMimemess.create;
mix := m.AddPartMultipart('mixed',nil);
rel := m.AddPartMultipart('related', mix);
m.AddPartHTML(FstlMensagemHTML, mix);//note that the FstlHTMLMessage is the body html of the email
SubPartSignature := m.AddPartHTMLBinary(cprdbutils.getBlob_StringStream(dts.FieldByName('bl_logo')), 'logo.jpg', 'CidKey', rel);
rel.AddSubPart;
rel.AssignSubParts(SubPartSignature);
cprdbutils.getBlob_StringStream(dts.FieldByName('bl_logo'))
返回功能來自數據庫blob字段的圖像流。
而且功能AddPartHTMLBinary()
是在這裏:
function TMimeMess.AddPartHTMLBinary(const Stream: TStream; const FileName, Cid: string; const PartParent: TMimePart): TMimepart;
begin
Result := AddPart(PartParent);
Result.DecodedLines.LoadFromStream(Stream);
Result.MimeTypeFromExt(FileName);
Result.Description := 'Included file: ' + FileName;
Result.Disposition := 'inline';
Result.ContentID := Cid;
Result.FileName := FileName;
Result.EncodingCode := ME_BASE64; //this is a constant containing base64
Result.EncodePart;
Result.EncodePartHeader;
end;
這裏是電子郵件的正文HTML:
the message
<hr>
<img width=213 height=120 src="cid:CidKey"/> <!-- Important! here is the cid reffered to the cid that i previously set on the code! -->
<hr>
some text
現在,它完美的作品。
可能的重複:http://stackoverflow.com/questions/4312687/how-to-embed-images-in-email或http://stackoverflow.com/questions/9110091/base64-encoded-images-in-電子郵件簽名 – John
不重複。你提到這個圖像的問題不是base64,開發語言是php而不是delphi –
,但是MIME部分很有趣,也很有用,謝謝。 –