我用Indy的TIdSMTP控件的例子发送邮件,发现邮件已经成功发送出去。
可是,我收邮件时却没有收到任何邮件,这是为什么?
如何解决这个问题?
可是,我收邮件时却没有收到任何邮件,这是为什么?
如何解决这个问题?
解决方案 »
- TForm.CreateParented 建窗体怎么丛容器中找到他
- delphi中的报表工具有哪些?
- 关于树与表格的问题,请赐教,在线等,谢谢
- 释放内存?
- 求高手解惑
- gif 图片,怎么让它显示时不出现窗体?????GIF图片还可以自由运动?不成静态
- 用API 函数SetPrinter 设置打印机出错??
- 有没有人碰到过这种情况(DELPHI ORACLE),有点怪我也是第一次碰到,进来看看
- 一些word里的字符不能拷贝到delphi控件的caption中,怎么办?
- 问一下TIdTcpClient的控件使用问题
- 能不能找出当前程序里有哪几个模式窗体在显示??
- 低价求《delphi4 编程技术内幕 》,《delphi3从入门到精通》李惟,六折起
with QQMeg do
begin
QQMeg.Body.Text:='';
QQMeg.From.Text:='[email protected]';
QQMeg.Recipients.EMailAddresses:=EdtEmail.Text;
QQMeg.Subject:='test';
QQMeg.ReceiptRecipient.Text:='';
end;
QQSmtp.UserId:='hh';
QQSmtp.Password:='hh';
QQSmtp.Port:=25;
QQSmtp.Host:=EdtSmtp.Text;
QQSmtp.AuthenticationType:=atLogin;
//TIdAttachment.Create(QQMeg.MessageParts,Dir+'Info.ini');发送附件
QQSmtp.Connect;
QQSmtp.Send(QQMeg);
Sleep(2000);
不信你们可以试试!
返回信息不是服务器忙就是内容被拒绝,而我使用我们公司的服务器
的话就可以正常发送,这是怎么回事?
===使用TNMSMTP控件在需认证服务器上发送邮件 CoolSlob(原作)
关键字 认证、NMSTMP
前言: 现在很多STMP服务器在发送邮件时均需重新认证一遍,而Delphi的TNMSMTP控件对它没有很“可视化”的支持,使很多人在开发过程中大打问号。 由于前段时间在做《CSDN查询助手》的时候,使用的也是需认证的服务器(163.com)。从其它地方摘取了部分代码得以解决,现在此发布与大家共享。实现:1、在NMSMTP的OnConnect事件中添加代码:var strUserName, strPassword: String;
begin
strUserName := EncodeString('CoolSlob');//CoolSlob是服务器的帐号
strPassword := EncodeString('Password');//Password是密码
{进行认证,输入编码后的用户名、密码}
nmsmtp1.Transaction('EHLO') ;
nmsmtp1.Transaction('AUTH LOGIN');
nmsmtp1.Transaction(strUserName);
nmsmtp1.Transaction(strPassword);
StatusBar1.SimpleText := '连接成功';
end;2、EncodeString函数实现过程:{对参数Decoded字符串进行Base64编码,返回编码后的字符串}
function EncodeString(Decoded:string):String;
var
mmTemp,mmDecoded:TMemoryStream;
strTemp:TStrings;
begin
mmTemp := TMemoryStream.Create;
mmDecoded:=TMemoryStream.Create;
strTemp:=TStringList.Create;
strTemp.Add(Decoded);
strTemp.SaveToStream(mmTemp);
mmTemp.Position := 0;
{剔除mmTemp从strTemp中带来的字符#13#10}
mmDecoded.CopyFrom(mmTemp,mmTemp.Size-2);
{对mmDecoded进行Base64编码,由mmTemp返回编码后的结果}
EncodeBASE64(mmTemp,mmDecoded);
{获得Base64编码后的字符串}
mmTemp.Position:=0;
strTemp.LoadFromStream(mmTemp);
{返回结果必须从strTemp[0]中获得,如果使用strTemp.Text会
带来不必要的字符#13#10}
Result:=strTemp[0];
end;3、EncodeBASE64函数实现过程:function EncodeBASE64(Encoded: TMemoryStream ; Decoded: TMemoryStream): Integer;
const
_Code64: String[64] =
('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/');
var
I: LongInt;
B: array[0..2279] of Byte;
J, K, L, M, Quads: Integer;
Stream: string[76];
EncLine: String;
begin
Encoded.Clear;
Stream := '';
Quads := 0;
{为提高效率,每2280字节流为一组进行编码}
J := Decoded.Size div 2280;
Decoded.Position := 0;
{对前J*2280个字节流进行编码}
for I := 1 to J do
begin
Decoded.Read(B, 2280);
for M := 0 to 39 do
begin
for K := 0 to 18 do
begin
L:= 57*M + 3*K;
Stream[Quads+1] := _Code64[(B[L] div 4)+1];
Stream[Quads+2] := _Code64[(B[L] mod 4)*16 + (B[L+1] div 16)+1];
Stream[Quads+3] := _Code64[(B[L+1] mod 16)*4 + (B[L+2] div 64)+1];
Stream[Quads+4] := _Code64[B[L+2] mod 64+1];
Inc(Quads, 4);
if Quads = 76 then
begin
Stream[0] := #76;
EncLine := Stream+#13#10;
Encoded.Write(EncLine[1], Length(EncLine));
Quads := 0;
end;
end;
end;
end; {对以2280为模的余数字节流进行编码}
J := (Decoded.Size mod 2280) div 3;
for I := 1 to J do
begin
Decoded.Read(B, 3);
Stream[Quads+1] := _Code64[(B[0] div 4)+1];
Stream[Quads+2] := _Code64[(B[0] mod 4)*16 + (B[1] div 16)+1];
Stream[Quads+3] := _Code64[(B[1] mod 16)*4 + (B[2] div 64)+1];
Stream[Quads+4] := _Code64[B[2] mod 64+1];
Inc(Quads, 4);
{每行76个字符}
if Quads = 76 then
begin
Stream[0] := #76;
EncLine := Stream+#13#10;
Encoded.Write(EncLine[1], Length(EncLine));
Quads := 0;
end;
end;
{“=”补位}
if (Decoded.Size mod 3) = 2 then
begin
Decoded.Read(B, 2);
Stream[Quads+1] := _Code64[(B[0] div 4)+1];
Stream[Quads+2] := _Code64[(B[0] mod 4)*16 + (B[1] div 16)+1];
Stream[Quads+3] := _Code64[(B[1] mod 16)*4 + 1];
Stream[Quads+4] := '=';
Inc(Quads, 4);
end; if (Decoded.Size mod 3) = 1 then
begin
Decoded.Read(B, 1);
Stream[Quads+1] := _Code64[(B[0] div 4)+1];
Stream[Quads+2] := _Code64[(B[0] mod 4)*16 + 1];
Stream[Quads+3] := '=';
Stream[Quads+4] := '=';
Inc(Quads, 4);
end; Stream[0] := Chr(Quads);
if Quads > 0 then
begin
EncLine := Stream+#13#10;
Encoded.Write(EncLine[1], Length(EncLine));
end; Result := Encoded.Size;
end;声明: 上述代码非本人所作,由于不知其原始出处,故仍作为“原创”!