求助:用Indy的TIdSMTP发送HTML格式的邮件,并且带附件。。。。

weyoung weyoung 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
邮件要写一个程序,用于给用户发送邮件,邮件中带附件,考虑到美观,所以邮件内容用HTML格式,
却老是搞不定,请各位帮忙。

代码如下:

Var
html: TStrings;
htmlPart: TIdText;
begin
html := TStringList.Create();
html.Append('<html>');
html.Append('<head>');
html.Append('<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">');
html.Append('<title id="ridTitle">' + BUS_NAME + '</title>');
html.Append('<style><!-- body { font-family: "宋体", "黑体"; font-size: 12pt; color: #000000; margin-top: 0px; margin-left: 10px; } td {');
html.Append('font-size: 12px;');
html.Append('}');
html.Append('--></style>');
html.Append('</head>');
html.Append('<body topmargin="0">');
html.Append('<table width="678" height="394" border="0" align="center" cellpadding="0" cellspacing="0">');
html.Append(' <tr>');
html.Append(' <td height="84"><img src="' + BUS_MAIL_IMAGE + 'banner.jpg" width="793" height="124"></td>');
html.Append(' </tr>');
html.Append(' <tr>');
html.Append(' <td height="108" valign="top" background="' + BUS_MAIL_IMAGE + 'background.gif">');
html.Append(' <div align="center"></div>');
html.Append(' <font size=2>');
html.Append('   对方电话:' + sGuestPhone + '<br>');
html.Append('   传真时间:' + sTime + '<br>');
html.Append(' </font>');
html.Append(' </td>');
html.Append(' </tr>');
html.Append(' <tr>');
html.Append(' <td height="158" valign="top" background="' + BUS_MAIL_IMAGE + 'background.gif">');
html.Append(' <div align="center"></div></td>');
html.Append(' </tr>');
html.Append(' <tr>');
html.Append('</table>');
html.Append('</body>');
html.Append('</html>');

Try
Try
With IdMessage1 do
begin
Clear;
Body.Clear;
CCList.Clear;
MessageParts.Clear;
Charset := 'gb2312';

ContentType := 'text/html';
Body.Assign(html);

From.Text := SMTP_USEREMAIL;
ReplyTo.EMailAddresses := SMTP_USEREMAIL;
Subject := '您的朋友' + sGuestPhone + '给您的传真';
Priority := TIdMessagePriority(0);
ReceiptRecipient.Text := '';
end;
if FileExists(sAttach) then TIdAttachment.Create(IdMsgSend.MessageParts, sAttach); //附件

SMTP.AuthenticationType := atLogin; {Simple Login}
SMTP.Username := SMTP_USERNAME;
SMTP.Password := SMTP_PASSWORD;
SMTP.Host := SMTP_ADDR;
SMTP.Port := SMTP_PORT;

SMTP.Connect;
Try
SMTP.Send(IdMsgSend);
WriteLog('发送成功!' + sLogMsg);
finally
SMTP.Disconnect;
end;
Except
On E:Exception do
begin
WriteLog('在发送邮件通知时发生错误,错误消息:' + E.Message);
Exit;
end;
end;
Finally
html.Free;
end;
end;

问题主要出在ContentType这段上面。
一、
上面这段代码,发送出去后,用户收到的邮件中,HTML格式不能正确显示(显示的是HTML的源代码),附件能正常显示。
如果把if FileExists(sAttach) 这一行屏蔽掉,则用户收到的邮件虽然没有附件,但HTML内容能正常显示。

//ContentType := 'multipart/mixed';
//htmlPart := TIdText.Create(IdMsgSend.MessageParts, html);
//htmlPart.ContentType := 'text/html; charset=gb2312';
//htmlPart.Body.Assign(html);

二、
如果把
ContentType := 'text/html';
Body.Assign(html);
屏蔽掉,改为:
ContentType := 'multipart/mixed';
htmlPart := TIdText.Create(IdMsgSend.MessageParts, html);
htmlPart.ContentType := 'text/html; charset=gb2312';
htmlPart.Body.Assign(html);
则用户收到的邮件里,附件是正常的,但正文却没有任何内容,一片空白。。。

请各位帮忙指点一下,多谢!
...全文

相关推荐

评论 3
收藏 已收藏
分享
返回顶部