我的问题是我使用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;