怎么对所收到的EMail文件标题进行解码???
本人用的是D6,曾试过用Indy的那套控件进行解码,但
由于水平太差,没有成功,BASE64的解码程序本人已经
有了,但是也解不开.
不知道大家有没有好办法或方法??
本人用的是D6,曾试过用Indy的那套控件进行解码,但
由于水平太差,没有成功,BASE64的解码程序本人已经
有了,但是也解不开.
不知道大家有没有好办法或方法??
解决方案 »
- 使用adoquery批量更新一个表,结果无法提交到数据库。
- 数据库查询出现错误-" 至少有一个参数没被指定值"
- 老大们,excel自动存盘咋写?!在线等!
- 使用select * into temp FROM OpenDataSource进行数据导入出现的问题
- 简单问题,进者有分。
- 相应别人号召,版主别删,有良知的都进来看看,
- 文件夹更名,为什么通不过?
- 啊啊啊啊啊啊啊啊啊啊阿
- 请推荐串口通讯控件(能在Delphi5中使用)!!!!谢谢!!!
- 有没有对 script decode 源码感兴趣的用户?请先下到http://ware.51.net下载此程序
- 大家知道银行ATM系统是用什么工具开发的吗,有什么好的这方面的书吗
- dbgrid问题有点难!!
标题:邮件解码之一
说明:Quoted Printable
设计:Zswang
日期:2002-02-19
支持:[email protected]
//*)///////Begin Source
function QuotedPrintableEncode(mSource: string): string;
var
I, J: Integer;
begin
Result := '';
J := 0;
for I := 1 to Length(mSource) do begin
if mSource[I] in [#32..#127, #13, #10] - ['='] then begin
Result := Result + mSource[I];
Inc(J);
end else begin
Result := Result + '=' + IntToHex(Ord(mSource[I]), 2);
Inc(J, 3);
end;
if mSource[I] in [#13, #10] then J := 0;
if J >= 70 then begin
Result := Result + #13#10;
J := 0;
end;
end;
end; { QuotedPrintableEncode }function QuotedPrintableDecode(mCode: string): string;
var
I, J, L: Integer;
begin
Result := '';
J := 0;
mCode := AdjustLineBreaks(mCode);
L := Length(mCode);
I := 1;
while I <= L do begin
if mCode[I] = '=' then begin
Result := Result + Chr(StrToIntDef('$' + Copy(mCode, I + 1, 2), 0));
Inc(J, 3);
Inc(I, 3);
end else if mCode[I] in [#13, #10] then begin
if J < 70 then Result := Result + mCode[I];
if mCode[I] = #10 then J := 0;
Inc(I);
end else begin
Result := Result + mCode[I];
Inc(J);
Inc(I);
end;
end;
end; { QuotedPrintableDecode }
///////End Source///////Begin Demo
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo2.Text := QuotedPrintableEncode(Memo1.Text);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Text := QuotedPrintableDecode(Memo2.Text);
end;
///////End Demo
(*//
标题:邮件解码之二
说明:Base64
设计:Zswang
日期:2002-02-21
支持:[email protected]
//*)///////Begin Source
const
cBase64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';function Base64Encode(mSource: string; mAddLine: Boolean = True): string;
var
I, J: Integer;
S: string;
begin
Result := '';
J := 0;
for I := 0 to Length(mSource) div 3 - 1 do begin
S := Copy(mSource, I * 3 + 1, 3);
Result := Result + cBase64[Ord(S[1]) shr 2 + 1];
Result := Result + cBase64[((Ord(S[1]) and $03) shl 4) + (Ord(S[2]) shr 4) + 1];
Result := Result + cBase64[((Ord(S[2]) and $0F) shl 2) + (Ord(S[3]) shr 6) + 1];
Result := Result + cBase64[Ord(S[3]) and $3F + 1];
if mAddLine then begin
Inc(J, 4);
if J >= 76 then begin
Result := Result + #13#10;
J := 0;
end;
end;
end;
I := Length(mSource) div 3;
S := Copy(mSource, I * 3 + 1, 3);
case Length(S) of
1: begin
Result := Result + cBase64[Ord(S[1]) shr 2 + 1];
Result := Result + cBase64[(Ord(S[1]) and $03) shl 4 + 1];
Result := Result + cBase64[65];
Result := Result + cBase64[65];
end;
2: begin
Result := Result + cBase64[Ord(S[1]) shr 2 + 1];
Result := Result + cBase64[((Ord(S[1]) and $03) shl 4) + (Ord(S[2]) shr 4) + 1];
Result := Result + cBase64[(Ord(S[2]) and $0F) shl 2 + 1];
Result := Result + cBase64[65];
end;
end;
end; { Base64Encode }function Base64Decode(mCode: string): string;
var
I, L: Integer;
S: string;
begin
Result := '';
L := Length(mCode);
I := 1;
while I <= L do begin
if Pos(mCode[I], cBase64) > 0 then begin
S := Copy(mCode, I, 4);
if (Length(S) = 4) then begin
Result := Result + Chr((Pos(S[1], cBase64) - 1) shl 2 +
(Pos(S[2], cBase64) - 1) shr 4);
if S[3] <> cBase64[65] then begin
Result := Result + Chr(((Pos(S[2], cBase64) - 1) and $0F) shl 4 +
(Pos(S[3], cBase64) - 1) shr 2);
if S[4] <> cBase64[65] then
Result := Result + Chr(((Pos(S[3], cBase64) - 1) and $03) shl 6 +
(Pos(S[4], cBase64) - 1));
end;
end;
Inc(I, 4);
end else Inc(I);
end;
end; { Base64Decode }
///////End Source///////Begin Demo
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo2.Text := Base64Encode(Memo1.Text);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Text := Base64Decode(Memo2.Text);
end;
///////End Demo
Function QuotedPrintableEncode(mSource: String): String;
Var
I, J: Integer;
Begin
Result := '';
J := 0;
For I := 1 To Length(mSource) Do Begin
If mSource[I] In [#32..#127, #13, #10] - ['='] Then Begin
Result := Result + mSource[I];
Inc(J);
End Else Begin
Result := Result + '=' + IntToHex(Ord(mSource[I]), 2);
Inc(J, 3);
End;
If mSource[I] In [#13, #10] Then J := 0;
If J >= 70 Then Begin
Result := Result + #13#10;
J := 0;
End;
End;
End; { QuotedPrintableEncode }Function QuotedPrintableDecode(mCode: String): String;
Var
I, J, L: Integer;
Begin
Result := '';
J := 0;
mCode := AdjustLineBreaks(mCode);
L := Length(mCode);
I := 1;
While I <= L Do Begin
If mCode[I] = '=' Then Begin
Result := Result + Chr(StrToIntDef('$' + Copy(mCode, I + 1, 2), 0));
Inc(J, 3);
Inc(I, 3);
End Else If mCode[I] In [#13, #10] Then Begin
If J < 70 Then Result := Result + mCode[I];
If mCode[I] = #10 Then J := 0;
Inc(I);
End Else Begin
Result := Result + mCode[I];
Inc(J);
Inc(I);
End;
End;
End; { QuotedPrintableDecode }
Function Base64Encode(mSource: String; mAddLine: Boolean = True): String;
Var
I, J: Integer;
S: String;
Begin
Result := '';
J := 0;
For I := 0 To Length(mSource) Div 3 - 1 Do Begin
S := Copy(mSource, I * 3 + 1, 3);
Result := Result + cBase64[Ord(S[1]) Shr 2 + 1];
Result := Result + cBase64[((Ord(S[1]) And $03) Shl 4) + (Ord(S[2]) Shr 4) + 1];
Result := Result + cBase64[((Ord(S[2]) And $0F) Shl 2) + (Ord(S[3]) Shr 6) + 1];
Result := Result + cBase64[Ord(S[3]) And $3F + 1];
If mAddLine Then Begin
Inc(J, 4);
If J >= 76 Then Begin
Result := Result + #13#10;
J := 0;
End;
End;
End;
I := Length(mSource) Div 3;
S := Copy(mSource, I * 3 + 1, 3);
Case Length(S) Of
1: Begin
Result := Result + cBase64[Ord(S[1]) Shr 2 + 1];
Result := Result + cBase64[(Ord(S[1]) And $03) Shl 4 + 1];
Result := Result + cBase64[65];
Result := Result + cBase64[65];
End;
2: Begin
Result := Result + cBase64[Ord(S[1]) Shr 2 + 1];
Result := Result + cBase64[((Ord(S[1]) And $03) Shl 4) + (Ord(S[2]) Shr 4) + 1];
Result := Result + cBase64[(Ord(S[2]) And $0F) Shl 2 + 1];
Result := Result + cBase64[65];
End;
End;
End; { Base64Encode }Function Base64Decode(mCode: String): String;
Var
I, L: Integer;
S: String;
Begin
Result := '';
L := Length(mCode);
I := 1;
While I <= L Do Begin
If Pos(mCode[I], cBase64) > 0 Then Begin
S := Copy(mCode, I, 4);
If (Length(S) = 4) Then Begin
Result := Result + Chr((Pos(S[1], cBase64) - 1) Shl 2 +
(Pos(S[2], cBase64) - 1) Shr 4);
If S[3] <> cBase64[65] Then Begin
Result := Result + Chr(((Pos(S[2], cBase64) - 1) And $0F) Shl 4 +
(Pos(S[3], cBase64) - 1) Shr 2);
If S[4] <> cBase64[65] Then
Result := Result + Chr(((Pos(S[3], cBase64) - 1) And $03) Shl 6 +
(Pos(S[4], cBase64) - 1));
End;
End;
Inc(I, 4);
End Else Inc(I);
End;
End; { Base64Decode }Function GetTitle(Const Value: String): String;
Var
iPos: integer;
Begin
Result := Value;
If Copy(Value, 1, 2) <> '=?' Then
Begin
Result := Value;
exit;
End;
//'?B?'前面的都要去掉
iPos := Pos('?B?', Value);
If iPos = 0 Then
Begin
iPos := Pos('?Q?', Value);
If iPos = 0 Then
Begin
Result := Value;
exit;
End;
Inc(iPos, 3);
//最后的'?='也要去掉
Result := Copy(Value, iPos, Length(Value) - iPos - 1);
Result := QuotedPrintableDecode(Result);
End
Else
Begin
Inc(iPos, 3);
//最后的'?='也要去掉
Result := Copy(Value, iPos, Length(Value) - iPos - 1);
Result := Base64Decode(Result);
End;End;