发送邮件用什么控件?能不能直接填写邮箱地址、邮件标题和内容就可以调用控件方法发送出去的,在任意机子上?

ooolinux 2019-09-16 12:39:00
发送邮件用什么控件?能不能直接填写邮箱地址、邮件标题和内容就可以调用控件方法发送出去的,在任意机子上?
...全文
899 23 打赏 收藏 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
善待流浪猫 2019-11-26
  • 打赏
  • 举报
回复
procedure TfrmContactUs.btnSendMailClick(Sender: TObject); begin if edtMailTo.Text <> '' then if (Pos('@', edtMailTo.Text) = 0) or (Pos('.', edtMailTo.Text) = 0) then begin ShowMessage('收件人邮箱格式错误'); Exit; end; if edtMailFrom.Text = '' then begin ShowMessage('发件人不能为空'); Exit; end; if edtMailSubject.Text = '' then begin ShowMessage('邮件主题不能为空'); Exit; end; oMsg.From.Address := oSMTP.Username; if edtMailTo.Text <> '' then oMsg.Recipients.EMailAddresses := edtMailTo.Text else oMsg.Recipients.EMailAddresses := oSMTP.Username; oMsg.Subject := edtMailSubject.Text; oMsg.Body.Text := mmoMailBody.Text + #13 + #13 + '发件人:' + edtMailFrom.Text; try if not oSMTP.Connected then oSMTP.Connect; oSMTP.Send(oMsg); ShowMessage('邮件发送成功'); except on E: Exception do ShowMessage('ERROR: ' + E.Message); end; end;
ooolinux 2019-11-26
  • 打赏
  • 举报
回复
你这个界面不错,怎么弄的? @善待流浪猫
ooolinux 2019-11-09
  • 打赏
  • 举报
回复
引用 20 楼 advance_coder 的回复:
[quote=引用 19 楼 ooolinux的回复:][quote=引用 18 楼 advance_coder 的回复:] 不知道你自己是否会写socket,会写的话,可以百度RFC(里面有多方面的协议标准文档,都是英文的),再在rfc网站搜索smtp有详细介绍。祝好运。
那不是造轮子吗[/quote] 这还是最简单的呢! smtp 还需要扩展协议,如加密的时候。 如果你只是简单发邮件那就找控件,或者搜些简易代码,要是以后会用到加密发送,那还是自己造吧。 网上搜些简易发送邮件代码,对照SMTP协议看一下,你会发现很简单的![/quote] 我现在用Indy组件可以发送了。
advance_coder 2019-11-09
  • 打赏
  • 举报
回复
引用 19 楼 ooolinux的回复:
[quote=引用 18 楼 advance_coder 的回复:] 不知道你自己是否会写socket,会写的话,可以百度RFC(里面有多方面的协议标准文档,都是英文的),再在rfc网站搜索smtp有详细介绍。祝好运。
那不是造轮子吗[/quote] 这还是最简单的呢! smtp 还需要扩展协议,如加密的时候。 如果你只是简单发邮件那就找控件,或者搜些简易代码,要是以后会用到加密发送,那还是自己造吧。 网上搜些简易发送邮件代码,对照SMTP协议看一下,你会发现很简单的!
ooolinux 2019-11-09
  • 打赏
  • 举报
回复
引用 18 楼 advance_coder 的回复:
不知道你自己是否会写socket,会写的话,可以百度RFC(里面有多方面的协议标准文档,都是英文的),再在rfc网站搜索smtp有详细介绍。祝好运。
那不是造轮子吗
advance_coder 2019-11-09
  • 打赏
  • 举报
回复
不知道你自己是否会写socket,会写的话,可以百度RFC(里面有多方面的协议标准文档,都是英文的),再在rfc网站搜索smtp有详细介绍。祝好运。
ooolinux 2019-11-03
  • 打赏
  • 举报
回复
IdMessage1->CharSet="GBK";
ooolinux 2019-11-03
  • 打赏
  • 举报
回复
用: IdMessage1->From->Address=IdSMTP1->Username; IdMessage1->Subject=Edit1->Text; // IdMessage1->Body->Assign(Memo1->Lines); IdMessage1->Body->Text=Memo1->Text; 邮件发送成功了,但是win10下收到邮件内容乱码,全是 ??????? ????? 而标题显示正常。不知道是啥问题?
ooolinux 2019-11-03
  • 打赏
  • 举报
回复
引用 14 楼 nikotin 的回复:
qq的邮箱,要在邮箱设置里面启用smtp服务才能发送邮件,163的也是类似。另外qq邮箱的smtp端口不是默认的,要设置成qq邮箱推荐的端口。你网上搜下看看。
163的邮箱,我启用了smtp,现在连接没问题了,发送部分出错:mail from must equal authorized user 我代码: IdMessage1->From->Name=IdSMTP1->Username; 不知道啥问题了?
nikotin 2019-11-02
  • 打赏
  • 举报
回复
qq的邮箱,要在邮箱设置里面启用smtp服务才能发送邮件,163的也是类似。另外qq邮箱的smtp端口不是默认的,要设置成qq邮箱推荐的端口。你网上搜下看看。
  • 打赏
  • 举报
回复
就是hello,握手命令,把自己的域名告诉接收者
ooolinux 2019-09-18
  • 打赏
  • 举报
回复
引用 12 楼 早打大打打核战争 的回复:
就是hello,握手命令,把自己的域名告诉接收者


好像还有一个EHLO命令的?
ooolinux 2019-09-17
  • 打赏
  • 举报
回复
引用 2 楼 老大i 的回复:
https://blog.csdn.net/zhouky1993/article/details/60953892
我连接 mail.163.com ,出现: Socket Error # 10061 Connection refused. 不知道什么原因?
ooolinux 2019-09-17
  • 打赏
  • 举报
回复
问个题外的,SMTP有关的HELO name是啥,英文缩写什么的?
ooolinux 2019-09-17
  • 打赏
  • 举报
回复
引用 9 楼 ouyongke 的回复:
[quote=引用 8 楼 ooolinux 的回复:]
[quote=引用 2 楼 老大i 的回复:]
https://blog.csdn.net/zhouky1993/article/details/60953892


我连接 mail.163.com ,出现:
Socket Error # 10061
Connection refused.
不知道什么原因?[/quote]
很多年不玩发邮件了,因为历史原因(当年最方便开发垃圾邮件工具的就是Delphi),所以现在无法用Delphi搞发邮件工具也正常,因为人家服务器就是禁止你Delphi过来连接。
我记得早年的时候,要修改id控件底层的一段代码,好像是邮件通讯握手协议什么的,让服务器不认为是IdSmtp控件过来连接,而且你的情况需要再测试一下,看具体是什么原因连不上163。
比如QQ邮箱和其他的邮箱都正常,就只是163连接不正常,那就是人家和协Delphi;如果都连不上,那就是配置有问题。[/quote]

我参考了链接里的代码,Host为mail.163.com或者mail.qq.com都连接不上,用户名和密码应该是对的,我去掉了try语句,让上层的Application消息循环自己捕捉异常,这样可以显示异常原因。
  • 打赏
  • 举报
回复
引用 8 楼 ooolinux 的回复:
[quote=引用 2 楼 老大i 的回复:]
https://blog.csdn.net/zhouky1993/article/details/60953892


我连接 mail.163.com ,出现:
Socket Error # 10061
Connection refused.
不知道什么原因?[/quote]
很多年不玩发邮件了,因为历史原因(当年最方便开发垃圾邮件工具的就是Delphi),所以现在无法用Delphi搞发邮件工具也正常,因为人家服务器就是禁止你Delphi过来连接。
我记得早年的时候,要修改id控件底层的一段代码,好像是邮件通讯握手协议什么的,让服务器不认为是IdSmtp控件过来连接,而且你的情况需要再测试一下,看具体是什么原因连不上163。
比如QQ邮箱和其他的邮箱都正常,就只是163连接不正常,那就是人家和协Delphi;如果都连不上,那就是配置有问题。
老大i 2019-09-16
  • 打赏
  • 举报
回复
引用 3 楼 ooolinux 的回复:

procedure TForm1.btnSendMailClick(Sender: TObject);
begin
//------------------------------------
//设置登录信息
//ZkyIdSMTP为控件名,
//可自己更改为与上面的一样的名字。
//格式为:
//<TIdSMIP控件名>.<属性>:=<自己的信息>
//------------------------------------
ZkyIdSMTP.AuthenticationType := atLogin;//设置登录类型,一般不变动
ZkyIdSMTP.Host := 'mail.qq.com'; //设置SMTP地址
ZkyIdSMTP.UserId := '1111@qq.com'; //设置登录账号
ZkyIdSMTP.Password := '1111'; //设置登录密码
ZkyIdSMTP.Port := 25; //设置端口,必须要整形型
try
ZkyIdSMTP.Connect; //连接服务器
except //如果连接失败,提示并退出程序
ShowMessage('连接服务器失败');
Exit;
end;
ShowMessage('成功连接服务器。'+#10#13+'点击确认后准备发邮件。');


//------------------------------------
//配置发送的内容,格式为:
//<TIdMessage的控件名> . <属性>:=
//------------------------------------
ZkyIdMessage.From.name := '1111@qq.com';//设置发件人姓名
ZkyIdmessage.Recipients.EMailAddresses:='2222@qq.com';//设置收件人邮箱地址(此为单发邮件的语句,群发时需去掉)
Zkyidmessage.Subject := '这是邮件的主题'; //设置邮件主题
Zkyidmessage.body.text := '这是邮件的内容';//设置邮件内容


//------------------------------------
//群发邮件:
//ZkyIdMessage.Recipients.add.Text:='<收件人邮箱>';
//ZkyIdMessage.BCCList.Add.Address := '<抄送人邮箱>' ;
//ZkyIdMessage.CCList.Add.Address := '<密送人邮箱>' ;
//发送给多人的时候,多打几遍语句。
//------------------------------------


try //发邮件
ZkyIdSMTP.Send(ZkyIdMessage);
Showmessage('邮件发送成功!');
except
Showmessage('邮件发送失败!');
end;


end;

————————————————
版权声明:本文为CSDN博主「楠珂伊梦千里月」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhouky1993/article/details/60953892


[quote=引用 2 楼 老大i 的回复:]
https://blog.csdn.net/zhouky1993/article/details/60953892


必须把登录密码也写进去吗?不登录能发送吗?[/quote]
当然要的,用于登录,并且用这个号发邮件(没登录账号用什么发呢)
ooolinux 2019-09-16
  • 打赏
  • 举报
回复

procedure TForm1.btnSendMailClick(Sender: TObject);
begin
  //------------------------------------
  //设置登录信息
  //ZkyIdSMTP为控件名,
  //可自己更改为与上面的一样的名字。  
  //格式为:
  //<TIdSMIP控件名>.<属性>:=<自己的信息>  
  //------------------------------------
  ZkyIdSMTP.AuthenticationType := atLogin;//设置登录类型,一般不变动  
  ZkyIdSMTP.Host := 'mail.qq.com';   //设置SMTP地址
  ZkyIdSMTP.UserId := '1111@qq.com';   //设置登录账号
  ZkyIdSMTP.Password := '1111';      //设置登录密码
  ZkyIdSMTP.Port := 25;                   //设置端口,必须要整形型
  try
    ZkyIdSMTP.Connect;                    //连接服务器
  except                               //如果连接失败,提示并退出程序  
    ShowMessage('连接服务器失败');  
    Exit;
  end;
  ShowMessage('成功连接服务器。'+#10#13+'点击确认后准备发邮件。');  
  
  
  //------------------------------------
  //配置发送的内容,格式为:
  //<TIdMessage的控件名> . <属性>:=  
  //------------------------------------
  ZkyIdMessage.From.name := '1111@qq.com';//设置发件人姓名
  ZkyIdmessage.Recipients.EMailAddresses:='2222@qq.com';//设置收件人邮箱地址(此为单发邮件的语句,群发时需去掉)
  Zkyidmessage.Subject := '这是邮件的主题'; //设置邮件主题
  Zkyidmessage.body.text := '这是邮件的内容';//设置邮件内容  
  
  
  //------------------------------------  
  //群发邮件:
  //ZkyIdMessage.Recipients.add.Text:='<收件人邮箱>';
  //ZkyIdMessage.BCCList.Add.Address := '<抄送人邮箱>' ;
  //ZkyIdMessage.CCList.Add.Address := '<密送人邮箱>' ;
  //发送给多人的时候,多打几遍语句。
  //------------------------------------
  
  
  try  //发邮件
    ZkyIdSMTP.Send(ZkyIdMessage);
    Showmessage('邮件发送成功!');  
  except
    Showmessage('邮件发送失败!');
  end;
 
 
end;

————————————————
版权声明:本文为CSDN博主「楠珂伊梦千里月」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhouky1993/article/details/60953892
引用 2 楼 老大i 的回复:
https://blog.csdn.net/zhouky1993/article/details/60953892
必须把登录密码也写进去吗?不登录能发送吗?
ooolinux 2019-09-16
  • 打赏
  • 举报
回复
引用 5 楼 早打大打打核战争 的回复:
把TIdSMTP->Host设置为收件人的邮件服务器的主机即可,可以用Indy的DNS解析组件获取
我找了一个老帖子的代码,不过差别有点大: https://bbs.csdn.net/topics/20453816 老概有成功的代码吗?能直接发到qq邮箱或者163邮箱都可以的。
加载更多回复(3)
内容概要:本文基于Matlab/Simulink平台,对电励磁同步电机在异步牵入、稳态运行及能耗制动三个阶段的全周期动态特性进行建模仿真与系统研究。研究构建了完整的电机数学模型与仿真系统,重点分析了电机从异步启动到同步运行的过渡过程、稳态运行时的电磁与机械性能,以及执行能耗制动时的减速特性与能量耗散机理。通过仿真,揭示了励磁电流、负载转矩与转速在不同工况下的动态响应规律与耦合关系,为电机的控制策略设计与性能优化提供了理论依据和数据支持。; 适合人群:具备电机学、电力电子与电力拖动基础知识的电气工程及相关专业的研究生、科研人员与工程技术人员。; 使用场景及目标:①研究电励磁同步电机的启动特性,解决异步牵入过程不稳定或失败的问题;②分析电机在不同负载下的稳态运行性能,优化运行效率;③设计和验证能耗制动策略,精确控制制动过程的减速时间和能量消耗。; 阅读建议:在学习过程中,应结合电机的基本原理,深入理解仿真模型中各模块(如电机本体、励磁控制、负载模型)的搭建逻辑,并通过调整仿真参数(如励磁电压、负载大小)来观察和分析系统动态响应,以加深对电机全周期运行特性的理解。
内容概要:通过介绍短时倒谱(Cepstrogram)计算方法,开展时-倒频分析研究,深入探讨倒谱分析机理、短时倒谱构建逻辑及时-倒频分析的内涵。文中系统对比了时-倒频分析与全局倒谱、传统时频分析方法的差异,阐明其在卷积特征解耦、非平稳信号跟踪、微弱周期特征增强及多维特征融合方面的技术优势,并分析其在语音识别、机械故障诊断、音频处理和非平稳时序信号分析中的典型应用,同时指出其在分辨率、计算复杂度等方面的局限性并提出优化方向。; 适合人群:具备一定信号处理或数据分析基础,从事机械、通信、声学或自动化等领域研究的研发人员及研究生。; 使用场景及目标:① 掌握短时倒谱与时-倒频分析的理论基础与实现方法;② 应用于语音信号处理、机械设备故障诊断、音频相似性检测等工程实践;③ 对比传统方法,提升对复杂非平稳信号中隐含周期特征的识别能力; 阅读建议:此资源以Matlab代码实现为核心,强调理论与实践结合,建议读者在理解核心算法原理的基础上,动手运行代码并调试参数,结合具体应用场景深化对方法适用性与局限性的认识。

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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