关于用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,说到办到,都快急死我了。
...全文
1729 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,谢谢
内容概要:本文围绕“新型电力系统下多分布式电源接入配电网承载力评估方法”的研究,系统性地介绍了基于Matlab的仿真建模与代码实现方案,旨在评估高比例分布式电源(如光伏、风电等)接入背景下配电网的接纳能力。研究融合了智能优化算法(如蜣螂优化、灰狼优化、遗传算法)、多目标优化、鲁棒优化及双层优化模型,结合潮流计算、稳定性分析与故障仿真,构建了完的承载力评估体系。文档不仅提供核心算法实现,还拓展至微电网调度、储能配置、电氢耦合系统、电动汽车协同等前沿方向,强调“复现+创新”相结合的科研路径,助力研究者快速掌握高水平论文复现技巧并激发原创思路。; 适合人群:具备电力系统、自动化或相关专业背景,熟悉Matlab/Simulink仿真环境,正在从事科研或工程应用的研究生及初级科研人员(工作1-3年);; 使用场景及目标:①复现高水平期刊中关于配电网承载力的优化模型;②开展高比例可再生能源接入下的配电网规划与运行研究;③学习并应用智能优化算法解决复杂电力系统问题;④获取完科研资源包以加速课题进展与论文撰写; 阅读建议:建议读者关注公众号“荔枝科研社”获取网盘资源,下载全套代码与模型文件,按照文档结构循序渐进学习,重点理解算法设计逻辑与仿真建模细节,结合所提供的复现案例深化对优化模型与工程应用场景的理解,提升科研效率与创新能力。

1,317

社区成员

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

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