关于用idsmtp发送电子邮件的问题,我都整了一周了还没解决,急死了,请大家帮忙呀

feixiang_ys 2006-10-30 10:20:05
我最近用c++builder开发邮件开发系统,用的控件是idsmtp,核心代码如下
IdSMTP1->Host = FormConfig->EditSMTP->Text;
IdSMTP1->AuthenticationType = atLogin;
IdSMTP1->UserId = FormConfig->EditUser->Text;
IdSMTP1->Password = FormConfig->MaskEditPw->Text;

IdMessage1->ContentType = "text/html";
IdMessage1->From->Text = FormConfig->EditUser->Text;

IdMessage1->ReplyTo->EMailAddresses = FormConfig->EditUser->Text ;
IdMessage1->From->Name = FormConfig->EditName->Text;
IdMessage1->Recipients->EMailAddresses = EditToAddress->Text;
IdMessage1->Subject = EditSubject->Text;
IdMessage1->Body->Assign(MemoNewMail->Lines);
IdMessage1->ReceiptRecipient->Text = FormConfig->EditUser->Text;
if(!IdSMTP1->Connected())
{
IdSMTP1->AuthenticationType = atLogin;

IdSMTP1->Connect();
Application->MessageBox("连接成功", "Look", MB_OK);


if( IdSMTP1->Authenticate()){
ShowMessage("授权成功,等待发送") ;

try
{IdSMTP1->Send(IdMessage1);
ShowMessage("邮件发送成功") ;
}
catch(Exception &E)
{ ShowMessage("发送邮件时出现异常");} ;

}else{
ShowMessage("Erreur d'authentification");
}
现在的问题是当我用163的邮箱给其他的邮箱发邮件时能够成功,但是当我用其他的邮箱,例如126,sina的,发送时却总是抱错,要么提示“550 user has been locked”,要么提示“501 input error”;总之不是IdSMTP1->Authenticate()不成功,就是IdSMTP1->Send(IdMessage1)不成功。真不知道是怎么回事
。请各位仁兄帮忙,我愿给分100,说到办到,都快急死我了。
...全文
1727 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
feixiang_ys 2006-10-31
  • 打赏
  • 举报
回复
楼上的“IdSMTP1->HeloName = "www.9ele.com";”是什么意思呀,idsmtp好像没有Heloname这个属性呀。还有我感觉是不是indy控件本身的问题呢
我不懂电脑 2006-10-31
  • 打赏
  • 举报
回复
http://tag.csdn.net/Article/b74f8cd8-797e-498f-aa8f-755d67a73771.html
do2008 2006-10-30
  • 打赏
  • 举报
回复
请参考dgyanyong的例子,代码我测试过了(BCB6+Updata4,indy v8.0.25),
可以发送邮件:http://blog.csdn.net/dgyanyong/archive/2004/09/11/101314.aspx
==================
在Form1中添加两个Indy控件:
IdSMTP(在Indy Clients标签页中)
IdMessage(在Indy Misc标签页中)
向窗体中添加一个Memo1,一个按钮button1,双击button1按钮,添加如下代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{

IdMessage1->Recipients->EMailAddresses = "dgyanyong@sina.com"; //邮件接收者的信箱
IdMessage1->From->Text = "dgyanyong@163.com"; //邮件发送者的信箱
IdMessage1->Subject = "测试发送电子邮件"; //邮件的标题
IdMessage1->Body->Add("利用C++Builder中的IdSMTP和IdMessage控件发送电子邮件");//邮件内容
IdMessage1->CCList->EMailAddresses = "dgyanyong@sohu.com,dgyanyong@msn.com"; //邮件的抄送地址
if (IdSMTP1->Connected())
{
IdSMTP1->Disconnect();
}
IdSMTP1->AuthenticationType = atLogin; //登录服务器类型选择
IdSMTP1->Host = "smtp.163.com"; //SMTP服务器
IdSMTP1->UserId = "dgyanyong"; //163邮箱的用户名
IdSMTP1->Password = "dgyanyong"; //163邮箱的密码
IdSMTP1->Port = 25; //端口
IdSMTP1->Connect(); //连接SMTP服务器
if (IdSMTP1->Authenticate()) //用户验证
{
Memo1->Lines->Add("登录服务器验证成功!");
IdSMTP1->Send(IdMessage1); //发送邮件
Memo1->Lines->Add("邮件发送成功");
}
IdSMTP1->Disconnect(); //中断连接SMTP服务器
}

上述邮箱、163邮箱的用户名和密码均属虚构,只是做个范例,用户可以根据自己的需要设定。

==================
小笨象 2006-10-30
  • 打赏
  • 举报
回复
楼上的全都不对!
我也有这样的问题,而且更邪乎,最后才发现了原因,就是在认证这块。
代码如下:

void __fastcall TSendMailForm::SendMail(void)
{
//TODO: 设置控件相应的参数,并发送信件。
if(IdSMTP1->Connected())
IdSMTP1->Disconnect();

IdMessage1->Clear();
IdMessage1->ClearBody();
//IdMessage1->ClearHeader();

//收条的回复地址
IdMessage1->ReceiptRecipient->Address = MailInfo.FromAddress;
IdMessage1->ReceiptRecipient->Text = MailInfo.FromAddress;

//组织名字。
IdMessage1->Organization = MailInfo.Organization;

//收件人的地址
IdMessage1->Recipients->EMailAddresses = MailAddress.Trim();

//发件人的地址
IdMessage1->From->Address = MailInfo.FromAddress;
IdMessage1->From->Text = MailInfo.FromAddress;

//信件内容
IdMessage1->Body->Text = BodyRichEdit->Text;

//信件标题
IdMessage1->Subject = TitleEdit->Text;

//附件
int iCount = FJList->Count;
for(int i=0;i<iCount;i++)
{
if(FileExists(FJList->Strings[i]))
{
IdMessage1->MessageParts->Add();
new TIdAttachment(IdMessage1->MessageParts,FJList->Strings[i]);
}
}

try
{
IdSMTP1->Host = MailInfo.SMTPSVR ; //邮件smtp服务器
IdSMTP1->AuthenticationType = atNone;
IdSMTP1->HeloName = "www.9ele.com";//这里也有点重要。试试看,就知道。
IdSMTP1->Connect();
//判断smtp服务器是否需要用户认证
if(IdSMTP1->AuthSchemesSupported->IndexOf("LOGIN")>-1)
{
ShowMsg("正在进行用户认证......");
IdSMTP1->AuthenticationType = atLogin;
IdSMTP1->Username = MailInfo.SMTPUSERID;
IdSMTP1->Password = MailInfo.SMTPUSERPSW;
if(!IdSMTP1->Authenticate())
{
IdSMTP1->Disconnect();
ShowMsg("用户认证不通过!");
SendMailAction->Enabled=true;
MessageBox(Handle,"用户认证不通过!","错误",MB_ICONINFORMATION|MB_OK);
return;
}
ShowMsg("用户认证完成。");
}
IdSMTP1->Send(IdMessage1) ;
ShowMsg("发送完毕!");
}__finally
{
IdSMTP1->Disconnect();
SendMailAction->Enabled=true;
MessageBox(Handle,"发送邮件全部完成!","完成",MB_ICONINFORMATION|MB_OK);

}
}
//---------------------------------------------------------------------------
feixiang_ys 2006-10-30
  • 打赏
  • 举报
回复
楼上兄弟,我的程序在用163发邮件时也没有错误但是当我用sina的邮箱发时就出现问题了
我,有时还出现这种异常“Project Mial.exe raised exception class EIdprotocolReplyError with Message'554 <unknow [60.16.63.27]>:Client host rejected:Access denied'.)”真搞不懂是什么原因,请赐教,如果有原程序请给我发到邮箱吧,地址feixiang_ys@163.com,谢谢
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

1,317

社区成员

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

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