Delphi - Indy 创建邮件自动发送服务
服务器自动邮件线程
功能:此程序主要实现对Oracle数据库表tableName(存放需要发送邮件的相关信息)里面相关信息的邮件发送。
优点:开发人员可以直接再数据库后台对tableName表进行插入操作,前台会自动发送相关邮件,高效开发。
界面布局:


代码实现如下:
unit uSendMail; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DB, DBAccess, Ora, MemDS, RzButton, StdCtrls, RzPanel,
RzLabel, RzCmboBx, IdComponent, IdTCPConnection, IdTCPClient,
IdMessageClient, IdSMTP, IdBaseComponent, IdMessage, RzEdit, Mask, RzTabs; type
TForm1 = class(TForm)
RzPanel1: TRzPanel;
Memo1: TMemo;
Btn_Start: TRzBitBtn;
Btn_Finish: TRzBitBtn;
SEND_MAIL: TOraStoredProc;
Qry_GetMail: TOraQuery;
OraSession_sendmail: TOraSession;
tmr1: TTimer;
RzBitBtn1: TRzBitBtn;
RzLabel1: TRzLabel;
OraQuery1: TOraQuery;
RzComboBox1: TRzComboBox;
RzLabel2: TRzLabel;
RzLabel3: TRzLabel;
RzPageControl1: TRzPageControl;
RzTabSheetTabSheet1: TRzTabSheet;
rzgrpbxPl_to: TRzGroupBox;
TRzLabelDis_to: TRzLabel;
TRzLabelDis_attach: TRzLabel;
TRzLabelDis_sub: TRzLabel;
TRzLabelDis_cc: TRzLabel;
TRzLabelDis_body: TRzLabel;
rz_attach: TRzEdit;
Rz_body: TRzMemo;
TRzBitBtn_send: TRzBitBtn;
TRzBitBtn_open: TRzBitBtn;
Rz_to: TRzMemo;
Rz_cc: TRzMemo;
Rz_sub: TRzMemo;
rzgrpbxPl_from: TRzGroupBox;
TRzLabelDis_from: TRzLabel;
TRzLabelDis_server: TRzLabel;
TRzLabelDis_password: TRzLabel;
rz_from: TRzEdit;
rz_server: TRzEdit;
rz_password: TRzEdit;
IdMsgSend: TIdMessage;
SMTP: TIdSMTP;
RzTabSheetTabSheet3: TRzTabSheet;
procedure Btn_StartClick(Sender: TObject);
procedure Btn_FinishClick(Sender: TObject);
procedure tmr1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure RzBitBtn1Click(Sender: TObject);
procedure TRzBitBtn_sendClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Btn_StartClick(Sender: TObject);
begin
OraSession_sendmail.Connected := True;
tmr1.Enabled := True;
Btn_Start.Enabled := False;
Btn_Start.Caption := '运行中';
end; procedure TForm1.Btn_FinishClick(Sender: TObject);
begin
tmr1.Enabled := False;
Btn_Start.Enabled := True;
Btn_Start.Caption := '启动';
OraSession_sendmail.Connected := False;
end; procedure TForm1.tmr1Timer(Sender: TObject);
begin
Qry_GetMail.Close;
Qry_GetMail.SQL.Text := 'select t.* from tableName t where sended =0 and rownum=1';
Qry_GetMail.Open;
if Qry_GetMail.RecordCount > then
begin
Memo1.Text := Memo1.Text + chr() + chr() + '邮件发送中...' + DateTimeToStr(Now);
//tmr1.Enabled := false;
Rz_to.Text := Qry_GetMail.FieldByName('receiver').AsString;
Rz_sub.Text := Qry_GetMail.FieldByName('sub').AsString;
Rz_body.Text := Qry_GetMail.FieldByName('txt').AsString;
TRzBitBtn_send.Click;
OraQuery1.SQL.Text := ' update tableName t set t.sended = 1, t.sendtime = sysdate where t.sysid = :sysid';
OraQuery1.ParamByName('sysid').AsString := Qry_GetMail.FieldByName('sysid').AsString;
OraQuery1.ExecSQL;
Memo1.Text := Memo1.Text + chr() + chr() + '成功发送邮件!' + DateTimeToStr(Now);
// tmr1.Enabled := True;
end;
end; procedure TForm1.FormCreate(Sender: TObject);
begin
Btn_Start.Click;
end; procedure TForm1.RzBitBtn1Click(Sender: TObject);
begin
if RzComboBox1.Text = '' then
begin
ShowMessage('请选择重发时间段!');
Exit;
end;
if RzComboBox1.Text = '' then
begin
OraQuery1.Close;
OraQuery1.SQL.Text := 'update tableName t set t.sended=0 where t.inserttime>sysdate-1/24*6';
OraQuery1.ExecSQL;
end;
if RzComboBox1.Text = '' then
begin
OraQuery1.Close;
OraQuery1.SQL.Text := 'update tableName t set t.sended=0 where t.inserttime>sysdate-1/24*12';
OraQuery1.ExecSQL;
end;
if RzComboBox1.Text = '' then
begin
OraQuery1.Close;
OraQuery1.SQL.Text := 'update tableName t set t.sended=0 where t.inserttime>sysdate-1/24*18';
OraQuery1.ExecSQL;
end;
if RzComboBox1.Text = '' then
begin
OraQuery1.Close;
OraQuery1.SQL.Text := 'update tableName t set t.sended=0 where t.inserttime>sysdate-1/24*24';
OraQuery1.ExecSQL;
end;
if RzComboBox1.Text = '' then
begin
OraQuery1.Close;
OraQuery1.SQL.Text := 'update tableName t set t.sended=0 where t.inserttime>sysdate-1/24*36';
OraQuery1.ExecSQL;
end;
if RzComboBox1.Text = '' then
begin
OraQuery1.Close;
OraQuery1.SQL.Text := 'update tableName t set t.sended=0 where t.inserttime>sysdate-1/24*48';
OraQuery1.ExecSQL;
end;
ShowMessage('重发成功,请勿多点!');
end; procedure TForm1.TRzBitBtn_sendClick(Sender: TObject);
begin
IdMsgSend.Clear;
// TIdAttachment.Create(IdMsgSend.MessageParts, Rz_attach.Text);
with IdMsgSend do
begin
if Rz_body.Text = '' then Rz_body.Text := Rz_sub.Text;
Body.Assign(Rz_body.Lines);
From.Text := Rz_from.Text;
Recipients.EMailAddresses := Rz_to.Text; { 发送到: }
Subject := Rz_sub.Text; { Subject: header }
Priority := TIdMessagePriority(); { Message Priority }
CCList.EMailAddresses := Rz_cc.Text; {CC}
BccList.EMailAddresses := ''; {BBC}
ReceiptRecipient.Text := ''; //需要回复
end;
SMTP.AuthenticationType := atLogin;
SMTP.Username := Rz_from.Text; //发送人
SMTP.Password := Rz_password.Text; //密码
SMTP.Host := Rz_server.Text; //服务器
SMTP.Port := ;
SMTP.Connect;
try
SMTP.Send(IdMsgSend);
finally
SMTP.Disconnect;
end;
end; end.
作者:Jeremy.Wu
出处:https://www.cnblogs.com/jeremywucnblog/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
Delphi - Indy 创建邮件自动发送服务的更多相关文章
- [delphi]indy idhttp post方法
网易 博客 LOFTCam-用心创造滤镜 LOFTER-最美图片社交APP 送20张免费照片冲印 > 注册登录 加关注 techiepc的博客 万事如意 首页 日志 LOFTER 相册 音乐 ...
- 用 Java 技术创建 RESTful Web (服务 JAX-RS:一种更为简单、可移植性更好的替代方式)
作者: Dustin Amrhein, 软件工程师, IBM Nick Gallardo, 软件工程师, IBM 出处: http://www.ibm.com/developerworks/cn/we ...
- 创建APPID&&部署服务端教程
创建APPID&&部署服务端 一.创建APPID 1.打开https://console.developers.google.com ,左击顶部Project,然后左击创建项目 2.输 ...
- SOAPUI使用教程-从现有的服务创建REST模拟服务
从现有的服务创建REST模拟服务 在您的项目创建一个模拟服务从现有的服务是非常简单的. 右键单击 服务 . 选择 生成模拟服务 . 打开一个对话框窗口. 输入一个描述性的名称. 点击 好吧 . 创建模 ...
- 使用JavaMail创建邮件发送邮件
一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔. 邮件头包含的内容有: from字段 ...
- JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件
一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔. 邮件头包含的内容有: from字段 ...
- (转载)JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件
博客源地址:http://www.cnblogs.com/xdp-gacl/p/4216311.html 一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封 ...
- 安装自创建的windows服务。
安装自创建的windows服务. 使用工具InstallUtil.exe进行安装和卸载创建的windows服务 安装:C:/WINDOWS/Microsoft.NET/Framework/v2.0.5 ...
- 为MongoDB创建一个Windows服务
一:选型,根据机器的操作系统类型来选择合适的版本,使用下面的命令行查询机器的操作系统版本 wmic os get osarchitecture 二:下载并安装 附上下载链接 点击安装包,我这里是把文件 ...
随机推荐
- 一文带你了解Java反射机制
想要获取更多文章可以访问我的博客 - 代码无止境. 上周上班的时候解决一个需求,需要将一批数据导出到Excel.本来公司的中间件组已经封装好了使用POI生成Excel的工具方法,但是无奈产品的需求里面 ...
- VIM常用命令速查(转)
- Thinkphp5.0快速入门笔记(1)
学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. Composer安装和更新 C ...
- 使用Java 编写FTP中的长传文件和下载文件
实现FTP文件上传与下载可以通过以下两种种方式实现(不知道还有没有其他方式,),分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方法:通过JDK自带的API实现 ...
- Linux基础进程管理优先级
一.进程优先级 Linux进程调度及多任务 每个cpu(或者cpu核心)在一个时间点上只能处理一个进程,通过时间片技术,Linux实际能够运行的进程(和线程数)可以超出实际可用的cpu及核心数量.Li ...
- 昏睡了8年的我带着第一个微信小程序今年醒了
工作8年之久的我今年算是彻底长进了,以前是知道自己的水平不咋地,但是没什么行动,理由是3年抱2娃,需要照顾孩子. 去年年底偶然一次看技术贴的时候,看到了博客园这个平台,看了很多大牛们的经历,也知道公司 ...
- PythonDay03
## 第三章 ### 今日内容 1.整型 2.布尔值 3.字符串 索引 切片 步长 字符串的方法 4.for循环 ### 1.整型 - python3:全部是整形- python2:整形,长 ...
- React 如何搭建脚手架
React 如何搭建脚手架 npm install -g create-react-app //安装 create-react-app react-demo // react-demo ...
- c#实现深拷贝的几种方法
为什么要用到深拷贝呢?比如我们建了某个类Person,并且实例化出一个对象,然后,突然需要把这个对象复制一遍,并且复制出来的对象要跟之前的一模一样,来看下我们一般会怎么做,看代码 public cla ...
- Unity场景和代码合并以及UnityYAMLMerge的使用
1.首先是.gitignore的配置. # Folder config file Desktop.ini # Recycle Bin used on file shares $RECYCLE.BIN/ ...