服务器自动邮件线程

功能:此程序主要实现对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. HPU暑期集训积分赛1

    A. Nth power of n 单点时限: 1.0 sec 内存限制: 512 MB 求 nn 的个位数. 输入格式 多组输入,处理到文件结束.每组数据输入一个 n.(1≤n≤109) 输出格式 ...

  2. 从三个语言(C++,Java,.Net)的几个性能测试案例来看性能优化

    随着时间的发展,现在的虚拟机技术越来越成熟了,在有些情况下,Java,.Net等虚拟机密集计算的性能已经和C++相仿,在个别情况下,甚至还要更加优秀.本文详细分析几个性能测试案例,探讨现象背后的原因. ...

  3. 【iOS】创建真机调试证书

    今天第一次完整的在一个开发者账号里添加证书,刚接触,还真有些不熟悉,还好找到了一篇不错的文章:iOS开发:创建真机调试证书 ,做了很详细的介绍. 分享一下!!

  4. js实现3D切换效果

    今天分享一个3d翻转动画效果,js+css3+h5实现,没有框架. 先看下html部分: <div class="box"> <ul> <li> ...

  5. Linux Qt使用POSIX多线程条件变量、互斥锁(量)

    今天团建,但是文章也要写.酒要喝好,文要写美,方为我辈程序员的全才之路.嘎嘎 之前一直在看POSIX的多线程编程,上个周末结合自己的理解,写了一个基于Qt的用条件变量同步线程的例子.故此来和大家一起分 ...

  6. ipv6的连接

    基础知识不说了,网上一大堆! 基本内容不说了,写字太累了! 只说三点细节,记住就行: 1.ff开头的是多播地址,只能用于udp多播 2.fe80开头的是本地link地址,不管ping也好,connec ...

  7. Drawable 使用详解

    极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android Drawable 是Android 中图像显示的常用方法. 概念:Drawable ...

  8. 用jquery实现放大镜效果

    ----css代码--- *{margin:0;padding:0;} .showimg{position:relative;width:450px;height:420px;border:1px s ...

  9. gdb调试和编译后运行结果不一致

    今天在看代码时,遇到这么一段代码,我但是用g++编译了,运行发现有Segmentation fault. 然后就用gdb跟进去看看,可是gdb却正常执行了.不知道什么原因. #include < ...

  10. kafka客户端和服务端开发(三)

    前面我们已经搭建了kafka的单机和集群环境,分别写了简单的实例代码,对于代码里面使用到的参数并没有做解释.下面我们来详细说一下各个参数的作用. 1. 创建kafka生产者 kafka生产者有3个必选 ...