求助:用Indy的TIdSMTP发送HTML格式的邮件,并且带附件。。。。
邮件要写一个程序,用于给用户发送邮件,邮件中带附件,考虑到美观,所以邮件内容用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);
则用户收到的邮件里,附件是正常的,但正文却没有任何内容,一片空白。。。
请各位帮忙指点一下,多谢!