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

tsmtp 发邮件,d2010下正常,bcb 2010却不行?解决方案

2012-04-03 
tsmtp 发邮件,d2010下正常,bcb 2010却不行?D2010的代码:procedure SendEmail(const toAddress, subject, b

tsmtp 发邮件,d2010下正常,bcb 2010却不行?
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)”

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







[解决办法]
放那两个SSL的动态库了吗
m_IdSSLIOHandlerSocketOpenSSL的host等不用设置
m_IdSSLIOHandlerSocketOpenSSL和smtp控件关联后那些信息自动能过来了
[解决办法]

接分
[解决办法]

[解决办法]
关注答案

热点排行