delphi 发邮件带附件怎么做?分享简单代码示例

吉云

说到用Delphi发邮件这事儿,前段时间正好自己琢磨一下,顺便记录下过程。

我也没头绪,感觉挺复杂的。后来翻翻Delphi自带的那些东西,发现Indy这套玩意儿。看着挺多组件的,有点晕。不过仔细瞅瞅,好像跟网络相关的它都能干。

要发邮件,我主要就是用到两个组件,一个叫TIdSMTP,另一个是TIdMessage。好像分别在那个Indy Clients和Indy Misc的面板里,反正我是给拖到界面上,不用显示出来的。

delphi 发邮件带附件怎么做?分享简单代码示例

配置发信的东西

然后就得配置那个TIdSMTP。你想,发邮件总得告诉它往哪个服务器发,用哪个邮箱账号发?所以就得设置那个Host(就是邮件服务器地址,比如*或者smtp.*这种)、Port(端口号,一般是25,但用SSL加密的话可能是465或587)。

最重要的,还得填你的邮箱用户名(Username)和密码(Password),不然人家服务器不让你发。这些都在TIdSMTP组件的属性里面找,点点鼠标填进去就行,还挺直观。

准备邮件内容

接着是TIdMessage,这个就是邮件本身。写邮件嘛总得有发件人(From),得有个邮箱地址对象填进去。然后是收件人(Recipients),这个可以加一个或多个,也是邮箱地址。还有主题(Subject),就是邮件标题。是正文(Body),就是邮件内容,直接写字符串就行。

这个TIdMessage组件的属性里也都有对应的地方让你填,一项项设置

delphi 发邮件带附件怎么做?分享简单代码示例

搞定加密连接 (SSL/TLS)

弄好上面两步,我寻思着直接调用TIdSMTP的Send方法应该就行?结果一试,不行!特别是现在很多邮箱,像腾讯、网易这些,都推荐或者强制要求用加密连接,就是那个SSL或者TLS。直接用普通方式连,端口号也不对,肯定失败。

后来又找找,发现Indy还有个叫TIdSSLIOHandlerSocketOpenSSL的组件。名字挺长。把它也拖到界面上,然后在TIdSMTP的属性里找到一个叫IOHandler的,把它设置成刚才拖上去的那个SSL组件。这样TIdSMTP就知道要用加密方式连接。

还不行,还得在那个TIdSSLIOHandlerSocketOpenSSL组件里设置一下,具体是用SSL还是TLS,还有端口号也要改成加密对应的(比如465)。具体用哪个看你邮箱服务商的要求,一般帮助文档里都有写。

对,这玩意儿还得要两个DLL文件支持,好像叫*和*,得放到你程序运行的目录下,或者系统路径下,不然那个SSL组件没法工作,程序一运行到那就报错。这个坑要注意!

带上附件

delphi 发邮件带附件怎么做?分享简单代码示例

有时候还得带附件发。这个也研究下。在那个TIdMessage里面,有个叫Attachments的属性,看名字就知道是管附件的。

用代码来操作,大概是这样:

  • 先创建邮件附件对象,用,把TIdMessageMessageParts传进去。
  • 然后指定这个附件对象对应的文件路径,比如* := 'D:\我的文档.txt';
  • delphi 发邮件带附件怎么做?分享简单代码示例

这样就把一个文件加到邮件附件里。要加多个,就重复创建和指定路径。

一步:发送!

所有东西都准备好:服务器信息配好(TIdSMTP),邮件内容写好(TIdMessage),加密方式设置对(TIdSSLIOHandlerSocketOpenSSL关联上),附件也加上(如果需要的话)。

一步就是在代码里调用发送命令。先把TIdSMTP连接上服务器,用Connect方法。如果连接成功,再调用Send方法,把配置好的那个TIdMessage对象传给它。


delphi 发邮件带附件怎么做?分享简单代码示例

try
  *(IdMessage1);
finally
  *;
end;

记得用try...finally...包起来,保证发送完或者出错都能断开连接Disconnect,这是好习惯。

delphi 发邮件带附件怎么做?分享简单代码示例

基本上就是这么个流程。配置好服务器信息,写好邮件内容,处理好加密和附件,调用Send方法,邮件就发出去。中间可能遇到点小坑,特别是SSL配置和那两个DLL文件,稍微注意下就行。用Delphi发邮件,靠Indy这套组件还是挺方便的,自己动手折腾一下就能搞定。

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]