zoukankan      html  css  js  c++  java
  • Delphi

    服务器自动邮件线程

    功能:此程序主要实现对Oracle数据库表tableName(存放需要发送邮件的相关信息)里面相关信息的邮件发送。

    优点:开发人员可以直接再数据库后台对tableName表进行插入操作,前台会自动发送相关邮件,高效开发。

    界面布局:

    代码实现如下:

      1 unit uSendMail;
      2 
      3 interface
      4 
      5 uses
      6     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      7     Dialogs, ExtCtrls, DB, DBAccess, Ora, MemDS, RzButton, StdCtrls, RzPanel,
      8     RzLabel, RzCmboBx, IdComponent, IdTCPConnection, IdTCPClient,
      9     IdMessageClient, IdSMTP, IdBaseComponent, IdMessage, RzEdit, Mask, RzTabs;
     10 
     11 type
     12     TForm1 = class(TForm)
     13         RzPanel1: TRzPanel;
     14         Memo1: TMemo;
     15         Btn_Start: TRzBitBtn;
     16         Btn_Finish: TRzBitBtn;
     17         SEND_MAIL: TOraStoredProc;
     18         Qry_GetMail: TOraQuery;
     19         OraSession_sendmail: TOraSession;
     20         tmr1: TTimer;
     21         RzBitBtn1: TRzBitBtn;
     22         RzLabel1: TRzLabel;
     23         OraQuery1: TOraQuery;
     24         RzComboBox1: TRzComboBox;
     25         RzLabel2: TRzLabel;
     26         RzLabel3: TRzLabel;
     27         RzPageControl1: TRzPageControl;
     28         RzTabSheetTabSheet1: TRzTabSheet;
     29         rzgrpbxPl_to: TRzGroupBox;
     30         TRzLabelDis_to: TRzLabel;
     31         TRzLabelDis_attach: TRzLabel;
     32         TRzLabelDis_sub: TRzLabel;
     33         TRzLabelDis_cc: TRzLabel;
     34         TRzLabelDis_body: TRzLabel;
     35         rz_attach: TRzEdit;
     36         Rz_body: TRzMemo;
     37         TRzBitBtn_send: TRzBitBtn;
     38         TRzBitBtn_open: TRzBitBtn;
     39         Rz_to: TRzMemo;
     40         Rz_cc: TRzMemo;
     41         Rz_sub: TRzMemo;
     42         rzgrpbxPl_from: TRzGroupBox;
     43         TRzLabelDis_from: TRzLabel;
     44         TRzLabelDis_server: TRzLabel;
     45         TRzLabelDis_password: TRzLabel;
     46         rz_from: TRzEdit;
     47         rz_server: TRzEdit;
     48         rz_password: TRzEdit;
     49         IdMsgSend: TIdMessage;
     50         SMTP: TIdSMTP;
     51         RzTabSheetTabSheet3: TRzTabSheet;
     52         procedure Btn_StartClick(Sender: TObject);
     53         procedure Btn_FinishClick(Sender: TObject);
     54         procedure tmr1Timer(Sender: TObject);
     55         procedure FormCreate(Sender: TObject);
     56         procedure RzBitBtn1Click(Sender: TObject);
     57         procedure TRzBitBtn_sendClick(Sender: TObject);
     58     private
     59         { Private declarations }
     60     public
     61         { Public declarations }
     62     end;
     63 
     64 var
     65     Form1: TForm1;
     66 
     67 implementation
     68 
     69 {$R *.dfm}
     70 
     71 procedure TForm1.Btn_StartClick(Sender: TObject);
     72 begin
     73     OraSession_sendmail.Connected := True;
     74     tmr1.Enabled := True;
     75     Btn_Start.Enabled := False;
     76     Btn_Start.Caption := '运行中';
     77 end;
     78 
     79 procedure TForm1.Btn_FinishClick(Sender: TObject);
     80 begin
     81     tmr1.Enabled := False;
     82     Btn_Start.Enabled := True;
     83     Btn_Start.Caption := '启动';
     84     OraSession_sendmail.Connected := False;
     85 end;
     86 
     87 procedure TForm1.tmr1Timer(Sender: TObject);
     88 begin
     89     Qry_GetMail.Close;
     90     Qry_GetMail.SQL.Text := 'select t.* from tableName t where sended =0 and rownum=1';
     91     Qry_GetMail.Open;
     92     if Qry_GetMail.RecordCount > 0 then
     93     begin
     94         Memo1.Text := Memo1.Text + chr(13) + chr(10) + '邮件发送中...' + DateTimeToStr(Now);
     95         //tmr1.Enabled := false;
     96         Rz_to.Text := Qry_GetMail.FieldByName('receiver').AsString;
     97         Rz_sub.Text := Qry_GetMail.FieldByName('sub').AsString;
     98         Rz_body.Text := Qry_GetMail.FieldByName('txt').AsString;
     99         TRzBitBtn_send.Click;
    100         OraQuery1.SQL.Text := ' update tableName t set t.sended = 1, t.sendtime = sysdate where t.sysid = :sysid';
    101         OraQuery1.ParamByName('sysid').AsString := Qry_GetMail.FieldByName('sysid').AsString;
    102         OraQuery1.ExecSQL;
    103         Memo1.Text := Memo1.Text + chr(13) + chr(10) + '成功发送邮件!' + DateTimeToStr(Now);
    104        // tmr1.Enabled := True;
    105     end;
    106 end;
    107 
    108 procedure TForm1.FormCreate(Sender: TObject);
    109 begin
    110     Btn_Start.Click;
    111 end;
    112 
    113 procedure TForm1.RzBitBtn1Click(Sender: TObject);
    114 begin
    115     if RzComboBox1.Text = '' then
    116     begin
    117         ShowMessage('请选择重发时间段!');
    118         Exit;
    119     end;
    120     if RzComboBox1.Text = '6' then
    121     begin
    122         OraQuery1.Close;
    123         OraQuery1.SQL.Text := 'update tableName t set t.sended=0 where t.inserttime>sysdate-1/24*6';
    124         OraQuery1.ExecSQL;
    125     end;
    126     if RzComboBox1.Text = '12' then
    127     begin
    128         OraQuery1.Close;
    129         OraQuery1.SQL.Text := 'update tableName t set t.sended=0 where t.inserttime>sysdate-1/24*12';
    130         OraQuery1.ExecSQL;
    131     end;
    132     if RzComboBox1.Text = '18' then
    133     begin
    134         OraQuery1.Close;
    135         OraQuery1.SQL.Text := 'update tableName t set t.sended=0 where t.inserttime>sysdate-1/24*18';
    136         OraQuery1.ExecSQL;
    137     end;
    138     if RzComboBox1.Text = '24' then
    139     begin
    140         OraQuery1.Close;
    141         OraQuery1.SQL.Text := 'update tableName t set t.sended=0 where t.inserttime>sysdate-1/24*24';
    142         OraQuery1.ExecSQL;
    143     end;
    144     if RzComboBox1.Text = '36' then
    145     begin
    146         OraQuery1.Close;
    147         OraQuery1.SQL.Text := 'update tableName t set t.sended=0 where t.inserttime>sysdate-1/24*36';
    148         OraQuery1.ExecSQL;
    149     end;
    150     if RzComboBox1.Text = '48' then
    151     begin
    152         OraQuery1.Close;
    153         OraQuery1.SQL.Text := 'update tableName t set t.sended=0 where t.inserttime>sysdate-1/24*48';
    154         OraQuery1.ExecSQL;
    155     end;
    156     ShowMessage('重发成功,请勿多点!');
    157 end;
    158 
    159 procedure TForm1.TRzBitBtn_sendClick(Sender: TObject);
    160 begin
    161     IdMsgSend.Clear;
    162   //  TIdAttachment.Create(IdMsgSend.MessageParts, Rz_attach.Text);
    163     with IdMsgSend do
    164     begin
    165         if Rz_body.Text = '' then Rz_body.Text := Rz_sub.Text;
    166         Body.Assign(Rz_body.Lines);
    167         From.Text := Rz_from.Text;
    168         Recipients.EMailAddresses := Rz_to.Text; { 发送到: }
    169         Subject := Rz_sub.Text; { Subject: header }
    170         Priority := TIdMessagePriority(4); { Message Priority }
    171         CCList.EMailAddresses := Rz_cc.Text; {CC}
    172         BccList.EMailAddresses := ''; {BBC}
    173         ReceiptRecipient.Text := ''; //需要回复
    174     end;
    175     SMTP.AuthenticationType := atLogin;
    176     SMTP.Username := Rz_from.Text; //发送人
    177     SMTP.Password := Rz_password.Text; //密码
    178     SMTP.Host := Rz_server.Text; //服务器
    179     SMTP.Port := 25;
    180     SMTP.Connect;
    181     try
    182         SMTP.Send(IdMsgSend);
    183     finally
    184         SMTP.Disconnect;
    185     end;
    186 end;
    187 
    188 end.

      作者:Jeremy.Wu
      出处:https://www.cnblogs.com/jeremywucnblog/
      本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    falsh developer 快捷键
    FlashDevelop安装配置
    EditPlus保存时不生成bak文件(转)
    微信oauth2验证
    通过TortoiseSVN checkout的文件前面没有“状态标识”
    CSS3 Media Query 响应式媒体查询
    回车事件、键盘事件
    shiro登录密码加密
    mybatis常用类起别名
    shiro(四)项目开发中的配置、
  • 原文地址:https://www.cnblogs.com/jeremywucnblog/p/11427747.html
Copyright © 2011-2022 走看看