说到用Delphi发邮件这事儿,前段时间正好自己琢磨一下,顺便记录下过程。
我也没头绪,感觉挺复杂的。后来翻翻Delphi自带的那些东西,发现Indy这套玩意儿。看着挺多组件的,有点晕。不过仔细瞅瞅,好像跟网络相关的它都能干。
要发邮件,我主要就是用到两个组件,一个叫TIdSMTP,另一个是TIdMessage。好像分别在那个Indy Clients和Indy Misc的面板里,反正我是给拖到界面上,不用显示出来的。
配置发信的东西
然后就得配置那个TIdSMTP。你想,发邮件总得告诉它往哪个服务器发,用哪个邮箱账号发?所以就得设置那个Host(就是邮件服务器地址,比如*或者smtp.*这种)、Port(端口号,一般是25,但用SSL加密的话可能是465或587)。
最重要的,还得填你的邮箱用户名(Username)和密码(Password),不然人家服务器不让你发。这些都在TIdSMTP组件的属性里面找,点点鼠标填进去就行,还挺直观。
准备邮件内容
接着是TIdMessage,这个就是邮件本身。写邮件嘛总得有发件人(From),得有个邮箱地址对象填进去。然后是收件人(Recipients),这个可以加一个或多个,也是邮箱地址。还有主题(Subject),就是邮件标题。是正文(Body),就是邮件内容,直接写字符串就行。
这个TIdMessage组件的属性里也都有对应的地方让你填,一项项设置
搞定加密连接 (SSL/TLS)
弄好上面两步,我寻思着直接调用TIdSMTP的Send方法应该就行?结果一试,不行!特别是现在很多邮箱,像腾讯、网易这些,都推荐或者强制要求用加密连接,就是那个SSL或者TLS。直接用普通方式连,端口号也不对,肯定失败。
后来又找找,发现Indy还有个叫TIdSSLIOHandlerSocketOpenSSL的组件。名字挺长。把它也拖到界面上,然后在TIdSMTP的属性里找到一个叫IOHandler的,把它设置成刚才拖上去的那个SSL组件。这样TIdSMTP就知道要用加密方式连接。
还不行,还得在那个TIdSSLIOHandlerSocketOpenSSL组件里设置一下,具体是用SSL还是TLS,还有端口号也要改成加密对应的(比如465)。具体用哪个看你邮箱服务商的要求,一般帮助文档里都有写。
对,这玩意儿还得要两个DLL文件支持,好像叫*和*,得放到你程序运行的目录下,或者系统路径下,不然那个SSL组件没法工作,程序一运行到那就报错。这个坑要注意!
带上附件
有时候还得带附件发。这个也研究下。在那个TIdMessage里面,有个叫Attachments的属性,看名字就知道是管附件的。
用代码来操作,大概是这样:
- 先创建邮件附件对象,用,把TIdMessage的
MessageParts
传进去。 - 然后指定这个附件对象对应的文件路径,比如
* := 'D:\我的文档.txt';
这样就把一个文件加到邮件附件里。要加多个,就重复创建和指定路径。
一步:发送!
所有东西都准备好:服务器信息配好(TIdSMTP),邮件内容写好(TIdMessage),加密方式设置对(TIdSSLIOHandlerSocketOpenSSL关联上),附件也加上(如果需要的话)。
一步就是在代码里调用发送命令。先把TIdSMTP连接上服务器,用Connect
方法。如果连接成功,再调用Send
方法,把配置好的那个TIdMessage对象传给它。
try
*(IdMessage1);
finally
*;
end;
记得用try...finally...
包起来,保证发送完或者出错都能断开连接Disconnect
,这是好习惯。
基本上就是这么个流程。配置好服务器信息,写好邮件内容,处理好加密和附件,调用Send方法,邮件就发出去。中间可能遇到点小坑,特别是SSL配置和那两个DLL文件,稍微注意下就行。用Delphi发邮件,靠Indy这套组件还是挺方便的,自己动手折腾一下就能搞定。