首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

This is a multi-part message in MIME format,该怎么解决

2012-03-16 
This is a multi-part message in MIME format用indy 收邮件时提示:This is a multi-part message in MIME

This is a multi-part message in MIME format
用indy 收邮件时提示:This is a multi-part message in MIME format.
如何解决?

[解决办法]
刚做过电子邮件客户端:
各种邮箱的邮件格式很不统一,如QQ邮箱,body里就一句话:
正文作为分两部分都是base64加密,一部分为html,另一部分为text。
以下是我程序的部分代码(delphi7、indy9,indy有bug,自己继承后修改的,如果你用的不深,可以不修改):
if idmsgMain.MessageParts.Count > 0 then
begin
for j := 0 to Pred(idmsgMain.MessageParts.Count) do
begin
if idmsgMain.MessageParts.Items[j] is TMyIdText then
begin
sTemp := idmsgMain.Body.Text;
if Pos('this is a multi-part message in mime format',LowerCase(sTemp)) > 0 then
begin
sTemp := TMyIdText(idmsgMain.MessageParts.Items[j]).Body.Text;
iIndex := Pos('base64',LowerCase(sTemp));
if iIndex > 0 then
begin
iIndex := Pos(#$D#$A#$D#$A,sTemp);
if Pos('html',LowerCase(sTemp)) > 0 then
begin
sTemp := Copy(sTemp,iIndex + Length(#$D#$A#$D#$A),Length(sTemp));
sTemp := Base64Decode(sTemp);
mmoHtml.Lines.Add(sTemp);
end else
begin
sTemp := Copy(sTemp,iIndex + Length(#$D#$A#$D#$A),Length(sTemp));
sTemp := Base64Decode(sTemp);
mmoText.Lines.Add(sTemp);
end;
end else
begin
sTemp := TMyIdText(idmsgMain.MessageParts.Items[j]).ContentType;
if Pos('html',LowerCase(sTemp)) > 0 then
begin
sTemp := TMyIdText(idmsgMain.MessageParts.Items[j]).Body.Text;
mmoHtml.Lines.Add(sTemp);
end else
begin
sTemp := idmsgMain.ContentType;
if Pos('html',LowerCase(sTemp)) > 0 then
begin
sTemp := TMyIdText(idmsgMain.MessageParts.Items[j]).Body.Text;
mmoHtml.Lines.Add(sTemp);
end else
begin
sTemp := TMyIdText(idmsgMain.MessageParts.Items[j]).OriginalHeaderText;
if Pos('html',LowerCase(sTemp)) > 0 then
begin
sTemp := TMyIdText(idmsgMain.MessageParts.Items[j]).Body.Text;
mmoHtml.Lines.Add(sTemp);
end else
begin
sTemp := TMyIdText(idmsgMain.MessageParts.Items[j]).Body.Text;
mmoText.Lines.Add(sTemp);
end;
end;
end;
end;
end else
begin
sTemp := TMyIdText(idmsgMain.MessageParts.Items[j]).ContentType;
if Pos('html',LowerCase(sTemp)) > 0 then
begin
sTemp := TMyIdText(idmsgMain.MessageParts.Items[j]).Body.Text;
mmoHtml.Lines.Add(sTemp);
end else
begin
sTemp := idmsgMain.ContentType;
if Pos('html',LowerCase(sTemp)) > 0 then
begin
sTemp := TMyIdText(idmsgMain.MessageParts.Items[j]).Body.Text;
mmoHtml.Lines.Add(sTemp);
end else
begin
sTemp := TMyIdText(idmsgMain.MessageParts.Items[j]).Body.Text;
mmoText.Lines.Add(sTemp);


end;
end;
end;
end else
if idmsgMain.MessageParts.Items[j] is TIdAttachment then // 附件
begin
sAttName := (idmsgMain.MessageParts.Items[j] as TIdAttachment).FileName;
sAttName := GetTitle(sAttName);
sContentID := (idmsgMain.MessageParts.Items[j] as TMyIdAttachment).contentID;
if sContentID <> '' then // 表示附件是嵌入网页里的
begin
if mmoHtml.Lines.Count > 0 then
begin
sTemp := mmoHtml.Text;
sContentID := LowerCase('cid:' + Copy(sContentID,2,Length(sContentID) - 2));
iIndex := Pos(sContentID,LowerCase(sTemp));
if iIndex > 0 then
begin
sTemp := Copy(sTemp,1,iIndex - 1) + sAttName + Copy(sTemp,iIndex + Length(sContentID),Length(sTemp));
mmoHtml.Text := sTemp;
end;
end;
end else
begin
if grPublic.FileIsImage(sAttName) then // 是图片
begin
if mmoHtml.Lines.Count > 0 then
begin
sTemp := mmoHtml.Text;
iIndex := Pos('</body>',LowerCase(sTemp));
if iIndex > 0 then
begin
sTemp := Copy(sTemp,1,iIndex - 1) + '<P><hr></P>'
+ '<P><CENTER><IMG SRC="' + sAttName + '"></CENTER>'
+ '<P><CENTER>(' + sAttName + ')</CERTER></P>'
+ Copy(sTemp,iIndex,Length(sTemp));
mmoHtml.Text := sTemp;
end else
begin
sTemp := '<P><hr></P>'
+ '<P><CENTER><IMG SRC="' + sAttName + '"></CENTER>'
+ '<P><CENTER>(' + sAttName + ')</CERTER></P>';
mmoHtml.Lines.Add(sTemp);
end;
end else
begin
mmoHtml.Lines.Add('<html>');
mmoHtml.Lines.Add(' <head>');
mmoHtml.Lines.Add(' <title>' + DecodeMailStr(idmsgMain.Subject) + '</title>');
mmoHtml.Lines.Add(' </head>');
mmoHtml.Lines.Add(' <body title="' + '' + '">');
for iIndex := 0 to mmoText.Lines.Count - 1 do
mmoHtml.Lines.Add(' ' + mmoText.Lines[iIndex] + '<br>');
mmoHtml.Lines.Add(' <P><hr></P>');
mmoHtml.Lines.Add(' <P><CENTER><IMG SRC="' + sAttName + '"></CENTER>');
mmoHtml.Lines.Add(' <P><CENTER>(' + sAttName + ')</CERTER></P>');
mmoHtml.Lines.Add(' </body>');
mmoHtml.Lines.Add('</html>');
end;
end;
end;

sAttName := grPublic.IETempPath + sAttName;
if FileExists(sAttName) then DeleteFile(sAttName);
(idmsgMain.MessageParts.Items[j] as TIdAttachment).SaveToFile(sAttName);
fMain.CdsDetailAdd(fMain.cdsInDt,
FieldByName('UIDL').AsString,
sAttName,
0,


j,
(idmsgMain.MessageParts.Items[j] as TMyIdAttachment).ContentID);
iHasAttachment := 1; // 表示存在附件
end;
end;
end else
begin
sTemp := idmsgMain.ContentType;
if Pos('html',LowerCase(sTemp)) > 0 then
begin
sTemp := Trim(idmsgMain.Body.Text);
mmoHtml.Text := sTemp;
end else
begin
sTemp := Trim(idmsgMain.Body.Text);
mmoText.Text := sTemp;
end;
end;

热点排行