[Lgz].Delphi6+Outlook2000=半自动迂回发送邮件
近来有需要,想通过编程自动:从配置文件或数据库中读取收件人地址信息、加入想发送的内容、发送邮件。在网上找了很多资料,通常都是介绍利用FastNet控件页上的NMSMTP控件,或Indy上的IdSMTP控件发送。但NMSMTP太陈旧了,以前的文章介绍时,居然不用键入密码?!有的文章也说,不少免费邮箱对Indy控件进行了限制,不知道是不是这么回事。反正网上提到的这两种典型的方法我都试了很多遍,全都失败了。排除了系统的原因后,冷静考虑了一下,现在电子邮件使用非常广泛,似乎没有哪个邮箱不再不需要认证就让用户发送邮件,而且现在的邮箱全都有反垃圾邮件的功能,安全功能越来越强,以前的方式就显得落伍了。
那还有没有其它办法呢?后来找到了一个,相当简单,但是稍微绕了点弯。
大部分通常是使用Outlook(Express)等客户端软件进行收发软件,微软的东西基本上还是比较通用的,如果Outlook都不能收发邮件,基本上就是远方邮箱服务器的问题了。那么就可以把要发送的邮件先加入到Outlook的发件箱中,然后启动Outlook,点一下发送全部就行了。有人会问——那干脆直接用Outlook写信、发信不就得了?一两封可以,但很多封就比较麻烦了,也许有简单的方法,只是我还没有找到吧?
实现的具体方法是,从Servers控件栏上,拖动一个TOutlookApplication组件放到窗体中,然后写入下面的代码:
procedure TForm1.nClick(Sender: TObject);
var MI: _MailItem;
begin
Try OutlookApplication1.AutoQuit:=True;
OutlookApplication1.Connect;
MI := OutlookApplication1.CreateItem(olMailItem) as MailItem;
//邮件发给谁
MI.Recipients.Add('WhoWillReceive@his.pop3.com');
MI.Subject := '这是邮件的主题或者题目';
MI.Body := '这是邮件的正文';
//MI.Attachments.Add(Path, EmptyParam, EmptyParam,MI.Display(null); //Path是图片 的路径
MI.Send;
Showmessage('邮件存入到了Outlook的发件箱');
except
Showmessage('没有安装或不能启动OutLook!');
end;
end;
以上代码在我的163邮箱测试成功,几个收件人都收到了我半自动发出的邮件。
Qq:7⒐⑼⑤㈦ⅸⅣ.4