服务器自动邮件线程

功能:此程序主要实现对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 创建邮件自动发送服务的更多相关文章

  1. [delphi]indy idhttp post方法

    网易 博客 LOFTCam-用心创造滤镜 LOFTER-最美图片社交APP 送20张免费照片冲印 > 注册登录  加关注 techiepc的博客 万事如意 首页 日志 LOFTER 相册 音乐 ...

  2. 用 Java 技术创建 RESTful Web (服务 JAX-RS:一种更为简单、可移植性更好的替代方式)

    作者: Dustin Amrhein, 软件工程师, IBM Nick Gallardo, 软件工程师, IBM 出处: http://www.ibm.com/developerworks/cn/we ...

  3. 创建APPID&&部署服务端教程

    创建APPID&&部署服务端 一.创建APPID 1.打开https://console.developers.google.com ,左击顶部Project,然后左击创建项目 2.输 ...

  4. SOAPUI使用教程-从现有的服务创建REST模拟服务

    从现有的服务创建REST模拟服务 在您的项目创建一个模拟服务从现有的服务是非常简单的. 右键单击 服务 . 选择 生成模拟服务 . 打开一个对话框窗口. 输入一个描述性的名称. 点击 好吧 . 创建模 ...

  5. 使用JavaMail创建邮件发送邮件

    一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔. 邮件头包含的内容有: from字段 ...

  6. JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件

    一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔. 邮件头包含的内容有: from字段 ...

  7. (转载)JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件

    博客源地址:http://www.cnblogs.com/xdp-gacl/p/4216311.html 一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封 ...

  8. 安装自创建的windows服务。

    安装自创建的windows服务. 使用工具InstallUtil.exe进行安装和卸载创建的windows服务 安装:C:/WINDOWS/Microsoft.NET/Framework/v2.0.5 ...

  9. 为MongoDB创建一个Windows服务

    一:选型,根据机器的操作系统类型来选择合适的版本,使用下面的命令行查询机器的操作系统版本 wmic os get osarchitecture 二:下载并安装 附上下载链接 点击安装包,我这里是把文件 ...

随机推荐

  1. linux初学者-文件管理篇

    linux初学者-文件管理篇 linux系统的所有东西都是以文件的形式存储在计算机中的,所以linux系统中对文件的管理非常重要.以下介绍一些文件管理的常用方法. 1.文件的建立 文件的建立或者修改文 ...

  2. iOS 类知乎”分页”效果的实现?

    我们先看张gif图看一下效果(LICEcap录制的有点卡, 凑合看) 好像还是卡, 怼个视频演示链接吧: https://m.weibo.cn/1990517135/4398431764047996 ...

  3. 安装win10体验

    没事干了,心血来潮弄了个win10专业版. 讲硬盘重新分区了,没办法,原来分的太少了. 使用winpe启动,直接将下载的win10还原到c盘,成功启动,设置的时候让提示输入id,没有啊?研究发现可以先 ...

  4. LeetCode 解题目录

    0001. 两数之和(Java) 0003. 无重复字符的最长子串(Java) 0172. 阶乘后的零 (Java) 0287. 寻找重复数(Java)

  5. DH、RSA与ElGamal非对称加密算法实现及应用

    1.对称加密与非对称加密概述 关于对称加密与非对称加密的概念这里不再多说,感兴趣可以看下我之前的几篇文章,下面说一说两者的主要区别. 对称加密算法数据安全,密钥管理复杂,密钥传递过程复杂,存在密钥泄露 ...

  6. bootstrap datatable editor 扩展

    需求: a. 表单样式更改. b. 表单大小更改. 思路: a. 通过设置modal css更改样式和大小.缺点,全局性的更改. b. 更改bootstrap-editor,可以通过某种方式将参数传入 ...

  7. 【JDK】JDK源码分析-LinkedHashMap

    概述 前文「JDK源码分析-HashMap(1)」分析了 HashMap 主要方法的实现原理(其他问题以后分析),本文分析下 LinkedHashMap. 先看一下 LinkedHashMap 的类继 ...

  8. 【iOS】iOS 调试快速定位程序在哪崩溃

    iOS 开发过程中经常遇到程序崩溃.快速定位程序在哪崩溃的步骤如下: 1. 2. 3. 这样设置后,程序崩溃时会定位到崩溃的语句,如下: 原文链接:iOS开发何如在调试的时候轻松找到程序在哪里崩溃

  9. OI/ACM最全卡常大招

    NO.10: 循环展开: 在缓存和寄存器允许的情况下一条语句内大量的展开运算会刺激 CPU 并发(蛤?这是个什么原理,算了,反正写了没坏处就这么写吧) NO.9: 特殊运算优化:(或许这真的没用) 取 ...

  10. SmartSql使用教程(4)——多库配置与使用

    一.引言 已经几个月没更新了.本来上一章的预告是准备写TypeHandler的相关特性的.但是在准备的时候.SmartSql的作者重构了一下TypeHandler,使得我一下子没搞懂TypeHandl ...