This is a multi-part message in MIME format,该怎么解决
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);
用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);