服务器自动邮件线程

功能:此程序主要实现对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. 第二章: Java总结

    第二章笔记 什么是变量:变量代表一块内存区域,变量类型不一样,这一块内存的大小也不一样.#在编程语言里面,你可以通过定义变量,向内存里添加数据或者修改内存已有的数据.说白了,变量就是代表程序运行时存放 ...

  2. python传递参数

    1.脚本 # -*- coding: utf-8 -*- from sys import argvscript, first,second = argv #将命令中输入的参数解包后传递给左边 age ...

  3. 解决axios接收二进制流文件乱码问题

    1. 须将axios 配置中的responseType设置为'arraybuffer',这样就不会让表格出现乱码现象: 2. 如果要动态设置文件名则需要让后台将名字设置到响应头中,否则将是一个乱码的文 ...

  4. CentOS7安装高版本gcc

    CentOS7安装高版本gcc 下载 从hust镜像站下载gcc源码包. http://mirror.hust.edu.cn/gnu/gcc/ 我选择的是gcc-8.3.0.tar.gz. cd mk ...

  5. 【iOS】Your account already has a valid ios

    打包内测的时候遇到了这个问题,如图所示: 官网解决办法: If the certificate already exists in Member Center, a “Your account alr ...

  6. K8S 部署 Web UI

    在早期的版本中 Kubernetes可以在 Dashboard 中看到 heapster 提供的一些图表信息, 在后续的版本中会陆续移除掉 heapster,现在更加流行的监控工具是 promethe ...

  7. Spring源码解析——循环依赖的解决方案

    一.前言 承接<Spring源码解析--创建bean>.<Spring源码解析--创建bean的实例>,我们今天接着聊聊,循环依赖的解决方案,即创建bean的ObjectFac ...

  8. 请使用switch语句和if...else语句,计算2008年8月8日这一天,是该年中的第几天。

    请使用switch语句和if...else语句,计算2008年8月8日这一天,是该年中的第几天. #include <stdio.h> int main() { /* 定义需要计算的日期 ...

  9. 【POJ - 3273】Monthly Expense (二分)

    Monthly Expense 直接上中文 Descriptions 给你一个长度为N的序列,现在要让你把他们切割成M份(所以每一份都是连续的),然后每一份都有一个和sum[i],其中最大的一个是ma ...

  10. wamp不显示文件图标

    wamp不显示文件图标 效果如下图 右键图片"在新的标签页打开图片"后会跳转到404页面,并显示The requested URL /icons/unknown.gif was n ...