关于indy控件发smtp邮件的问题?请各位指点!

angowb 2003-09-11 05:21:27
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();
}
}
//---------------------------------------------------------------------------
...全文
83 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
angowb 2003-09-12
  • 打赏
  • 举报
回复
up
angowb 2003-09-12
  • 打赏
  • 举报
回复
up
angowb 2003-09-12
  • 打赏
  • 举报
回复
to invalid(空心菜) 大侠:
我想应该调用登陆验证,如果验证成功则发送邮件,否则不发送邮件,所以不能在send()之后调用Authenticate()啊
invalid 2003-09-12
  • 打赏
  • 举报
回复
IdSMTP是在发送前才进行身份验证的吧。
那么你调用验证是就是失败了(因为还没有验证)。
你试试在发送后调用一下。
angowb 2003-09-12
  • 打赏
  • 举报
回复
请各位高手指点啊
thp 2003-09-11
  • 打赏
  • 举报
回复
关注

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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