⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dwssmtplib.pas

📁 script language
💻 PAS
字号:
unit dwsSMTPLib;

interface

uses
  Forms, SysUtils, Classes, dwsComp, WIndows, VMSockets, VMSmtp;

const
  ERRMAILSEND = 'SendMail ERROR';

type
  TdwsSMTPLib = class(TdwsLib)
  protected
    procedure AddFunctions; override;
  public
//    SmtpEMail: TVMSmtpEMail;
    constructor Create(AOwner: TComponent); override; { diese Syntax ist immer gleich }
        //Create : Remote Host, Remote Port,  From, To, Subject, text
    function SendSMTPmail(sRemoteHost, sRemotePort, sFrom, sTo, sSubject, sBody:string):string;
  end;
  //Create : Remote Host, Remote Port,  From, To, Subject
  TSMTPCreate     = class (TFunction) function Evaluate (argpat : Integer; args : TArgList) : Variant; override; end;
  //Carbon Copy
  TSMTPCC         = class (TFunction) function Evaluate (argpat : Integer; args : TArgList) : Variant; override; end;
  //Blind Copy
  TSMTPBC         = class (TFunction) function Evaluate (argpat : Integer; args : TArgList) : Variant; override; end;
  //Body lines
  TSMTPBodyClear  = class (TFunction) function Evaluate (argpat : Integer; args : TArgList) : Variant; override; end;
  TSMTPBodyAdd    = class (TFunction) function Evaluate (argpat : Integer; args : TArgList) : Variant; override; end;
  TSMTPBodyText   = class (TFunction) function Evaluate (argpat : Integer; args : TArgList) : Variant; override; end;
  //Files Lines
  TSMTPFilesClear = class (TFunction) function Evaluate (argpat : Integer; args : TArgList) : Variant; override; end;
  TSMTPFilesAdd   = class (TFunction) function Evaluate (argpat : Integer; args : TArgList) : Variant; override; end;
  //Send : TimeOut-Sec
  TSMTPSend       = class (TFunction) function Evaluate (argpat : Integer; args : TArgList) : Variant; override; end;
  //Error Descrition : String
  TSMTPErrorDesc  = class (TFunction) function Evaluate (argpat : Integer; args : TArgList) : Variant; override; end;
  TSMTPClose      = class (TFunction) function Evaluate (argpat : Integer; args : TArgList) : Variant; override; end;

procedure Register;

implementation

uses dwsErrors;

type
  TSMTPObj = class (TdwsObject)
    SmtpEMail: TVMSmtpEMail;
    constructor Create;
    destructor Destroy; override;
  end;

procedure Register;
begin
  RegisterComponents ('DWS', [TdwsSMTPLib]);
end;

{ TSMTPObj }

destructor TSMTPObj.Destroy;
begin
  SmtpEMail.Free;
  inherited;
end;

constructor TSMTPObj.Create;
begin
  FAutoDestroy := true;
end;

function GetObj (script : TDelphiWebScript; expr : TExpr) : TSMTPObj;
begin
  result := TSMTPObj (script.GetObj (TExpr (expr).Eval));
end;

constructor TdwsSMTPLib.Create(AOwner: TComponent);
begin
    inherited Create(AOwner);      { diesen Schritt IMMER zuerst! }
//    SmtpEMail := TVMSmtpEMail.Create(Application);
//    SmtpEMail.EEncMethod := MIMEEncode;
//    SmtpEMail.EFormat := mPlainText;
end;

{ TdwsStringsLib }
procedure TdwsSMTPLib.AddFunctions;
begin
  //Criar : Remote Host, Remote Porte,  From, To, Subject
  AddF (TSMTPCreate.CreateArg ('SMTPCreate', atInteger, [atString, atString, atString, atString, atString]));
  //Carbon Copy
  AddF (TSMTPCC.CreateArg ('SMTPCC', atVoid, [atInteger, atString]));
  //Blind Copy
  AddF (TSMTPBC.CreateArg ('SMTPBC', atVoid, [atInteger, atString]));
  //Body lines
  AddF (TSMTPBodyClear.CreateArg ('SMTPBodyClear', atVoid, [atInteger]));
  AddF (TSMTPBodyAdd.CreateArg ('SMTPBodyAdd', atVoid, [atInteger, atString]));
  AddF (TSMTPBodyText.CreateArg ('SMTPBodyText', atVoid, [atInteger, atString]));
  //Files Lines
  AddF (TSMTPFilesClear.CreateArg ('SMTPFilesClear', atVoid, [atInteger]));
  AddF (TSMTPFilesAdd.CreateArg ('SMTPFilesAdd', atVoid, [atInteger, atString]));
  //Send : TimeOut-Sec
  AddF (TSMTPSend.CreateArg ('SMTPSend', atBoolean, [atInteger, atInteger]));
  //Error Descrition : String
  AddF (TSMTPErrorDesc.CreateArg ('SMTPErrorDesc', atString, [atInteger]));
  //Close
  AddF (TSMTPClose.CreateArg ('SMTPClose', atVoid, [atInteger]));
end;

function TdwsSMTPLib.SendSMTPmail(sRemoteHost, sRemotePort, sFrom, sTo, sSubject, sBody:string):string;
var
  SmtpEMail: TVMSmtpEMail;
begin
  SmtpEMail := TVMSmtpEMail.Create(Application);
  with SmtpEMail do
  try
    EEncMethod := MIMEEncode;
    EFormat := mPlainText;
    RemoteHost := sRemoteHost;
    RemotePort := sRemotePort;
    EFrom := sFrom;
    ETo := sTo;
    ESub := sSubject;
    EBody.Text := sBody;
    try
      SendEMail(25);
      result := 'OK';
    except
      result := ERRMAILSEND;
    end;
  finally
    SmtpEMail.free;
  end;
end;

//Create : Remote Host, From, To, Subject
function TSMTPCreate.Evaluate(argpat: Integer; args: TArgList): Variant;
var
  SMail : TSMTPObj;
begin
  try
    SMail := TSMTPObj.Create;
    SMail.SmtpEMail := TVMSmtpEMail.Create(Application);
    with SMail.SmtpEMail do
    begin
      RemoteHost  := TExpr(args[0]).Eval;
      if TExpr(args[1]).Eval > 0 then
        RemotePort  := TExpr(args[1]).Eval
      else
        RemotePort := '25';
      EFrom    := TExpr(args[2]).Eval;
      ETo      := TExpr(args[3]).Eval;
      ESub     := TExpr(args[4]).Eval;
      EEncMethod := MIMEEncode;
      EFormat := mPlainText;
    end;
  except
    on e: Exception do raise Exception.CreateFmt(E.Message, [] );
  end;
  result := fScript.NewObj (SMail);
end;

//Carbon Copy
function TSMTPCC.Evaluate(argpat: Integer; args: TArgList): Variant;
begin
  try
    GetObj (fScript, args[0]).SmtpEMail.ECC := TExpr(args[1]).Eval;
  except
    on e: Exception do raise Exception.CreateFmt(E.Message, []);
  end;
end;

//Blind Copy
function TSMTPBC.Evaluate(argpat: Integer; args: TArgList): Variant;
begin
  try
    GetObj (fScript, args[0]).SmtpEMail.EBCC := TExpr(args[1]).Eval;
  except
    on e: Exception do raise Exception.CreateFmt(E.Message, []);
  end;
end;

//Body lines Clear
function TSMTPBodyClear.Evaluate(argpat: Integer; args: TArgList): Variant;
begin
  try
    GetObj (fScript, args[0]).SmtpEMail.EBody.Clear;
  except
    on e: Exception do raise Exception.CreateFmt(E.Message, []);
  end;
end;

//BodyAdd
function TSMTPBodyAdd.Evaluate(argpat: Integer; args: TArgList): Variant;
begin
  try
    GetObj (fScript, args[0]).SmtpEMail.EBody.Add(TExpr(args[1]).Eval);
  except
    on e: Exception do raise Exception.CreateFmt(E.Message, []);
  end;
end;

//BodyText
function TSMTPBodyText.Evaluate(argpat: Integer; args: TArgList): Variant;
begin
  try
    GetObj (fScript, args[0]).SmtpEMail.EBody.Text := TExpr(args[1]).Eval;
  except
    on e: Exception do raise Exception.CreateFmt(E.Message, []);    
  end;
end;

//FilesClear
function TSMTPFilesClear.Evaluate(argpat: Integer; args: TArgList): Variant;
begin
  try
    GetObj (fScript, args[0]).SmtpEMail.EAttachs.Clear;
  except
    on e: Exception do raise Exception.CreateFmt(E.Message, []);
  end;
end;

//FilesAdd
function TSMTPFilesAdd.Evaluate(argpat: Integer; args: TArgList): Variant;
begin
  try
    GetObj (fScript, args[0]).SmtpEMail.EAttachs.Add(TExpr(args[1]).Eval);
  except
    on e: Exception do raise Exception.CreateFmt(E.Message, []);
  end;
end;

//Send : TimeOut
function TSMTPSend.Evaluate(argpat: Integer; args: TArgList): Variant;
var
  iTimeOut : integer;
begin
  if TExpr(args[1]).Eval < 1 then
    iTimeOut := 108
  else
    iTimeOut := TExpr(args[1]).Eval;
  try
    Result := GetObj (fScript, args[0]).SmtpEMail.SendEMail(iTimeOut);
  except
    on e: Exception do raise Exception.CreateFmt(E.Message, []);  
  end;
end;

//Error Descrition : String
function TSMTPErrorDesc.Evaluate(argpat: Integer; args: TArgList): Variant;
begin
  try
    Result := GetObj (fScript, args[0]).SmtpEMail.ErrorDescr;
  except
    on e: Exception do raise Exception.CreateFmt(E.Message, []);
  end;
end;

//Close, Free Object
function TSMTPClose.Evaluate(argpat: Integer; args: TArgList): Variant;
begin
  try
    fScript.FreeObj (TExpr (args[0]).Eval);
  except
    on e: Exception do raise Exception.CreateFmt(E.Message, []);
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -