tsmtp 发邮件,d2010下正常,bcb 2010却不行?

fxworld 2009-11-29 02:55:52
D2010的代码:
procedure SendEmail(const toAddress, subject, body: String; const attachment: String = '');
var
IdSSLIOHandlerSocketOpenSSL: TIdSSLIOHandlerSocketOpenSSL;
//IdIOHandlerStack: TIdIOHandlerStack;
IdSMTP: TIdSMTP;
IdMsg: TIdMessage;
begin
IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
try
IdSSLIOHandlerSocketOpenSSL.Destination := 'smtp.xxxx.com:25';
IdSSLIOHandlerSocketOpenSSL.Host := 'smtp.xxxx.com';
IdSSLIOHandlerSocketOpenSSL.MaxLineAction := maException;
IdSSLIOHandlerSocketOpenSSL.Port := 25;
IdSSLIOHandlerSocketOpenSSL.DefaultPort := 0;
IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1;
IdSSLIOHandlerSocketOpenSSL.SSLOptions.Mode := sslmUnassigned;
IdSSLIOHandlerSocketOpenSSL.SSLOptions.VerifyMode := [];
IdSSLIOHandlerSocketOpenSSL.SSLOptions.VerifyDepth := 0;

IdSMTP := TIdSMTP.Create(nil);
try
IdSMTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;
IdSMTP.Host := 'smtp.xxxx.com';
IdSMTP.Port := 25;
IdSMTP.UseTLS := utNoTLSSupport;//utUseExplicitTLS;

IdSMTP.Username := 'myname';
IdSMTP.Password := 'mypass';

IdSMTP.Connect;
try
IdMsg := TIdMessage.Create;
try
IdMsg.From.Address := 'xxxx@xxxx.com';

IdMsg.Recipients.EMailAddresses := toAddress;

IdMsg.Subject := subject;
IdMsg.Body.Text := body;

if attachment <> '' then
begin
if FileExists(attachment) then
TIdAttachmentFile.Create(IdMsg.MessageParts, attachment)
else
raise Exception.Create('"' + attachment + '" not found.');
end;

IdSMTP.Send(IdMsg);
finally
IdMsg.Free;
end;
finally
IdSMTP.Disconnect;
end;
finally
IdSMTP.Free;
end;
finally
IdSSLIOHandlerSocketOpenSSL.Free;
end;
end;


bcb2010的代码:
void __fastcall TSendMail::Send( )
{

if( m_AttachFileName.Trim().IsEmpty() )
{
throw Exception("AttachFileName is empty! ");
}

try{

m_IdSSLIOHandlerSocketOpenSSL = new TIdSSLIOHandlerSocketOpenSSL(NULL);

m_IdSSLIOHandlerSocketOpenSSL->Destination = m_Host+":"+IntToStr(m_Port);
m_IdSSLIOHandlerSocketOpenSSL->Host = m_Host;
m_IdSSLIOHandlerSocketOpenSSL->MaxLineAction = maException;
m_IdSSLIOHandlerSocketOpenSSL->Port = m_Port;
m_IdSSLIOHandlerSocketOpenSSL->DefaultPort = 0;
m_IdSSLIOHandlerSocketOpenSSL->SSLOptions->Method = sslvTLSv1;
m_IdSSLIOHandlerSocketOpenSSL->SSLOptions->Mode = sslmUnassigned;
m_IdSSLIOHandlerSocketOpenSSL->SSLOptions->VerifyMode.Clear();
//m_IdSSLIOHandlerSocketOpenSSL->SSLOptions->VerifyMode << sslvrfPeer;
m_IdSSLIOHandlerSocketOpenSSL->SSLOptions->VerifyDepth = 0;
m_IdSSLIOHandlerSocketOpenSSL->UseNagle = true;

m_IdSMTP = new TIdSMTP(NULL);
//m_IdSMTP->AuthType = satDefault ;//satNone;//Default;
m_IdSMTP->IOHandler = m_IdSSLIOHandlerSocketOpenSSL;
m_IdSMTP->Host = m_Host;
m_IdSMTP->Port = m_Port;
m_IdSMTP->UseTLS = utNoTLSSupport;//utUseExplicitTLS;
m_IdSMTP->Username = m_UserName;
m_IdSMTP->Password = m_Password;

m_IdSMTP->Connect();

try{
m_IdMessage = new TIdMessage(NULL);

try{
m_IdMessage->From->Address = m_FromAddress;
m_IdMessage->Recipients->EMailAddresses = m_ToAddress;
m_IdMessage->Subject = m_EmailSubject;
m_IdMessage->Body->Text = m_EmailBody;

if( !FileExists(m_AttachFileName) )
{
throw Exception("\"" + m_AttachFileName + "\" not found." );
}
m_IdAttachmentFile = new TIdAttachmentFile(m_IdMessage->MessageParts,m_AttachFileName );

//m_IdSMTP->AuthType = satSASL;//satDefault;
//m_IdSMTP->Authenticate();

//if( m_IdSMTP->DidAuthenticate )
{
m_IdSMTP->Send( m_IdMessage );
}

}
__finally
{
if( m_IdAttachmentFile )
{
delete m_IdAttachmentFile;
}

if( m_IdMessage )
delete m_IdMessage;

m_IdSMTP->Disconnect();
}

}
__finally
{
if( m_IdSMTP )
delete m_IdSMTP;
}

}
__finally
{

if( m_IdSSLIOHandlerSocketOpenSSL )
{
delete m_IdSSLIOHandlerSocketOpenSSL;
}

}

}
//------------------------------------------------------------------------------

在 bcb2010下运行时,身份验证都通过了,在执行到 m_IdSMTP->Send 发邮件时每次都会进入长时间等待,然后提示“range check error”或“timeout(#4.4.2)”

请高手指点一下,应该真么解决?





...全文
364 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fxworld 2009-12-03
  • 打赏
  • 举报
回复
快来接分,满20个回复结贴。
hemiya 2009-12-03
  • 打赏
  • 举报
回复
周药师 2009-12-03
  • 打赏
  • 举报
回复

接分
银点 2009-12-03
  • 打赏
  • 举报
回复
关注答案
fxworld 2009-12-02
  • 打赏
  • 举报
回复
不想等答案了,大家快来接分吧!
fxworld 2009-11-30
  • 打赏
  • 举报
回复
bs csdn !

我把贴子从delphi区搬到bcb区,扣了我20%的结贴率.

我靠csdn.
fxworld 2009-11-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wintergoes 的回复:]
放那两个SSL的动态库了吗
m_IdSSLIOHandlerSocketOpenSSL的host等不用设置
m_IdSSLIOHandlerSocketOpenSSL和smtp控件关联后那些信息自动能过来了
[/Quote]

你说的是libeay32.dll和ssleay.dll吧,有的。

另外我的 Email Server是不需要加密传输的,我把 TIdSSLIOHandlerSocketOpenSSL 换为 TIdIOHandlerStack也是在D2010下正常发送, bcb2010下显示同样的信息。

都弄了一天了,也不知道什么地方出的错,自己对 pascal 也比较菜,看源代码看得头晕脑涨。




wintergoes 2009-11-29
  • 打赏
  • 举报
回复
放那两个SSL的动态库了吗
m_IdSSLIOHandlerSocketOpenSSL的host等不用设置
m_IdSSLIOHandlerSocketOpenSSL和smtp控件关联后那些信息自动能过来了
基于滑模SMC-PID的二自由度机械臂轨迹跟踪控制仿真(Simulink仿真、Matlab代码)内容概要:本文详细介绍了基于滑模SMC-PID的二自由度机械臂轨迹跟踪控制仿真研究,结合Simulink仿真与Matlab代码实现,旨在复现相关期刊论文的核心内容。文中重点探讨了滑模控制(SMC)与PID控制相结合的复合控制策略在机械臂轨迹跟踪中的应用,通过设计合理的滑模面与控制律,提升系统对参数不确定性及外部干扰的鲁棒性,同时利用PID调节增强控制精度与动态响应性能。仿真模型构建完整,涵盖机械臂动力学建模、控制器设计、轨迹规划与跟踪效果可视化等环节,验证了所提控制方法的有效性与优越性。; 适合人群:具备自动控制理论基础、熟悉Matlab/Simulink环境,从事机器人控制、机电一体化或相关方向研究的研究生及科研人员。; 使用场景及目标:①学习并掌握滑模控制与PID融合的控制策略设计方法;②复现经典控制算法在机械臂轨迹跟踪中的仿真过程;③为科研项目或课程设计提供可参考的代码与实现框架; 阅读建议:建议读者结合文档目录顺序逐步学习,重点关注控制器设计原理与Simulink模块搭建细节,动手运行并调试配套代码,深入理解各参数对系统性能的影响,进而实现自主改进与优化。
内容概要:本文研究了一种在三维地形环境下基于Levy扰动粒子群优化(PSO)的无人机路径规划方法,旨在提升无人机在复杂地理环境中的自主导航能力与路径优化效率。通过引入Levy飞行机制对传统粒子群算法进行改进,增强了算法的全局搜索能力和跳出局部最优的能力,从而有效解决了无人机在三维空间中避障、能耗优化与路径最短化等多重约束下的路径规划难题。文中详细阐述了三维地形建模、适应度函数设计、Levy扰动策略融合及算法收敛性分析,并利用Matlab进行了仿真实验验证,结果表明该方法在路径平滑性、安全性与收敛速度方面均优于传统算法。; 适合人群:具备一定算法基础和Matlab编程能力,从事智能优化、无人机导航、路径规划等相关领域的科研人员及研究生。; 使用场景及目标:①应用于复杂地形下的无人机自主飞行任务,如灾害救援、地形勘测、军事侦察等;②为智能群体算法在高维空间优化问题中的改进与应用提供技术参考;③服务于高校与科研机构对智能优化算法的教学与实验仿真。; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注Levy扰动机制与粒子群算法的融合方式,并可通过调整地形参数与约束条件进行二次实验,以掌握算法的适应性与优化潜力。

551

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧