关于indy控件发smtp邮件的问题?请各位指点!
1。用smtp.163.com做发件服务器,老是被163smtp服务器阻塞,但用foxmail发就不会有这个问题,请指点?
2。smtp服务器需要验证,调用Authenticate() 调用结果为false,却能发送???为什么(我想先调用Authenticate()函数,检查是否通过验证)
代码:
//---------------------------------------------------------------------------
void __fastcall TfrmMail::bbtnOkClick(TObject *Sender)
{
if(ADODataSet1->Active)
{
ADODataSet1->Close();
}
ADODataSet1->CommandText = "select * from UserTable where UserID = " + IntToStr(CUID);
ADODataSet1->Open();
SmtpUserEmail = ADODataSet1->FieldByName("email")->Value;
SmtpAuthType = ADODataSet1->FieldByName("SmtpAuthType")->Value ? 1 : 0;
SmtpUserId = ADODataSet1->FieldByName("SmtpUserId")->Value;
SmtpPwd = ADODataSet1->FieldByName("SmtpPwd")->Value;
SmtpHost = ADODataSet1->FieldByName("SmtpHost")->Value;
SmtpPort = ADODataSet1->FieldByName("SmtpPort")->Value;
IdMsgSend->Clear();
IdMsgSend->Subject = edtSubject->Text; //{ Subject: header }
IdMsgSend->Body->Assign(Memo1->Lines);
IdMsgSend->Recipients->EMailAddresses = edtTo->Text; //{ To: header }
IdMsgSend->CCList->EMailAddresses = edtCC->Text;// {CC}
IdMsgSend->BccList->EMailAddresses = edtBCC->Text; //{BBC}
IdMsgSend->Priority = TIdMessagePriority(cboPriority->ItemIndex);// { Message Priority }
SetAttachment();
switch (SmtpAuthType)
{
// {authentication settings}
case 0:
SMTP->AuthenticationType = atNone;
break;
case 1:
SMTP->AuthenticationType = atLogin; //{Simple Login}
break;
}
SMTP->Host = SmtpHost; //SmtpServerName;
SMTP->Port = SmtpPort; //SmtpServerPort;
SMTP->UserId = SmtpUserId; //SmtpServerUser;
SMTP->Password = SmtpPwd; //SmtpServerPassword;
IdMsgSend->From->Text = SmtpUserEmail; //from address UserEmail;
if (chkReturnReciept->Checked)
{
IdMsgSend->ReceiptRecipient->Text = IdMsgSend->From->Text; //{We set the recipient to the From E-Mail address }
}
else
{
IdMsgSend->ReceiptRecipient->Text = ""; //{indicate that there is no receipt recipiant}
}
if(!SMTP->Connected())
{
SMTP->Connect();
}
if(!SMTP->Connected())
{
MessageBox(this->Handle,"连接失败", "Infomation", MB_OK | MB_ICONINFORMATION);
}
// TStringList *strs = SMTP->AuthSchemesSupported;
// for(int i = 0; i < strs->Count; i++)
// {
// ShowMessage(strs->Strings[i]);
// }
//?????????????????????????????????????????????????????????????????
//调用结果为false,却能发送???
//?????????????????????????????????????????????????????????????????
if(SMTP->Authenticate())
{
MessageBox(this->Handle,"SMTP服务器需要身份验证", "Infomation", MB_OK | MB_ICONINFORMATION);
}
try
{
SMTP->Send(IdMsgSend);
MessageBox(this->Handle,"发送成功", "Infomation", MB_OK | MB_ICONINFORMATION);
}
catch(...)
{
MessageBox(this->Handle,"发送失败", "Infomation", MB_OK | MB_ICONINFORMATION);
}
if(SMTP->Connected())
{
SMTP->Disconnect();
}
}
//---------------------------------------------------------------------------