使用TIdAttachmentFile将嵌入式图像添加到电子邮件中

时间:2018-08-10 19:46:33

标签: delphi indy indy10

我的问题是我使用TIdAttachmentFile向电子邮件中添加了嵌入式图像,到目前为止,该图像可以根据需要与Outlook配合使用,但不适用于Gmail。

已添加图像,Outlook看上去正确,但是在Gmail中,它显示为附件,我希望它成为电子邮件正文的一部分。

一个重要的事实是要添加的图像已在base64中进行了编码,但这不是问题。

这是我当前的代码:

Msg := TIdMessage.Create;
Msg.Subject := 'Testing';
Msg.FromList.AddItems(fromList);
Msg.Recipients.AddItems(recipientList);
Msg.Body.Clear;
Msg.ContentType := 'multipart/mixed';

htmlBody := TStringList.Create;
htmlBody.Add('<p>Sending an image</p>');
htmlBody.Add('<img src="cid:' + cid + '" /></p>');

bodyPart := TIdText.Create(Msg.MessageParts, htmlBody);
bodyPart.ContentType := 'text/html';

  crypt := Tcrypt.Create;
  imgBytes := TEncoding.UTF8.GetBytes(imgB64);
  imgBytes := crypt.Base64DecodeBytes(imgBytes);

  imgPart := TIdAttachmentFile.Create(Msg.MessageParts);
  imgPart.ContentType := 'image/jpeg';
  imgPart.ContentDisposition := 'inline';
  imgPart.ContentID := cid;
  imgPart.FileName := cid;
  imgPart.LoadFromStream(TBytesStream.Create(imgBytes));

if sendEmail(Msg, s) then //Function that sends the email
  Result := '{"status":true}'
else
  Result := '{"msg":"' + s + '"}';

以下代码用于最后调用的功能,配置SMTP并发送电子邮件:

function TFunciones.sendEmail(Msg: TIdMessage; out outMsgError : String) : Boolean;
var
  SMTP: TIdSMTP;
begin
  outMsgError := '';
  SMTP := TIdSMTP.Create(nil);

  try
    SMTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(SMTP);
    SMTP.UseTLS := utUseExplicitTLS;
    TIdSSLIOHandlerSocketOpenSSL(SMTP.IOHandler).SSLOptions.Method := sslvSSLv23;
    SMTP.AuthType := TIdSMTPAuthenticationType.satDefault;

    SMTP.Host := SMTP_HOST;
    SMTP.Port := SMTP_PORT;
    SMTP.Username := SMTP_USERNAME;
    SMTP.Password := SMTP_PASSWORD;

    SMTP.Connect;
    SMTP.Send(Msg);
    SMTP.Disconnect;
    Result := True;
  Except
    on E : Exception do begin
      Result := False;
      outMsgError := E.Message;
    end;
  end;

  SMTP.Free;
end;

0 个答案:

没有答案