Odesílání emailů přes SMTP z databáze ASA7

Top 

Seznam témat:

řešení

 

Řešení

ASA 7 standardně podporuje odesílání emailů přímo z databáze pouze přes rozhraní MAPI. Pokud je žádoucí odesílat poštu také přes SMTP jako to umí ASA 9 a vyšší, je nutné následovat níže uvedený postup. Odesílání přes SMTP je vyžadováno např. při automatickém sledování replikačního procesu.

Postup aktivace SMTP na ASA7

1. Na serveru nakopírovat soubor "dbextf_.dll" do \asa\win32\dbextf_.dll

2. Zavést klíčové procedury spuštěním SQL  skriptu update.sql

3. Ve Vision ERP v možnostech pro administrátory vyplnit adresu SMTP serveru a odesílací emailovou adresu a otestovat (viz obrázky níže)

 

 

Skript update.sql

 

//call gsetglobalparam(0, 0, 'g_notify_from', 'noreply@domena.cz')

//go

//call gsetglobalparam(0, 0, 'g_notify_smtp', 'smtp.domena.cz')

//go

 

set temporary option on_error = 'continue'

go

 

create function dbo.xp_real_sendmail_(in recipient long varchar,in subject long varchar default

null,in cc_recipient long varchar default

null,in bcc_recipient long varchar default

null,in query long varchar default

null,in "message" long varchar default

null,in attachname long varchar default

null,in attach_result integer default

0,in echo_error integer default

1,in include_file long varchar default

null,in no_column_header integer default

0,in no_output integer default

0,in width integer default

80,in separator char(1) default '\\t',in dbuser long varchar default 'guest',in dbname long varchar default 'master',in type long varchar default

null,in include_query integer default

0,in cid integer)

returns integer external name 'xp_sendmail@dbextf_'

go

 

create function dbo.xp_real_startsmtp_(in smtp_sender long varchar,in smtp_server long varchar,in smtp_port integer default

25,in timeout integer default

60,in cid integer)

returns integer external name 'xp_startsmtp@dbextf_'

go

 

create function dbo.xp_real_stopsmtp_(in cid integer)

returns integer external name 'xp_stopsmtp@dbextf_'

go

 

create function dbo.xp_sendmail_(in recipient long varchar,in subject long varchar default

null,in cc_recipient long varchar default

null,in bcc_recipient long varchar default

null,in query long varchar default

null,in "message" long varchar default

null,in attachname long varchar default

null,in attach_result integer default

0,in echo_error integer default

1,in include_file long varchar default

null,in no_column_header integer default

0,in no_output integer default

0,in width integer default

80,in separator char(1) default '\\t',in dbuser long varchar default 'guest',in dbname long varchar default 'master',in type long varchar default

null,in include_query integer default

0)

returns integer

on exception resume

begin

 declare recip long varchar;

 declare subj long varchar;

 declare cc long varchar;

 declare bcc long varchar;

 declare qry long varchar;

 declare msg long varchar;

 declare attach long varchar;

 declare include long varchar;

 declare cid integer;

 set recip=cast(recipient as long varchar);

 if sqlcode <> 0 then

   set recip=recipient

 end if;

 set subj=cast(subject as long varchar);

 if sqlcode <> 0 then

   set subj=subject

 end if;

 set cc=cast(cc_recipient as long varchar);

 if sqlcode <> 0 then

   set cc=cc_recipient

 end if;

 set bcc=cast(bcc_recipient as long varchar);

 if sqlcode <> 0 then

   set bcc=bcc_recipient

 end if;

 set qry=cast(query as long varchar);

 if sqlcode <> 0 then

   set qry=query

 end if;

 set msg=cast("message" as long varchar);

 if sqlcode <> 0 then

   set msg="message"

 end if;

 set attach=cast(attachname as long varchar);

 if sqlcode <> 0 then

   set attach=attachname

 end if;

 set include=cast(include_file as long varchar);

 if sqlcode <> 0 then

   set include=include_file

 end if;

 set cid=connection_property('Number');

 return(xp_real_sendmail_(recip,subj,cc,bcc,qry,msg,attach,

   attach_result,echo_error,include,no_column_header,

   no_output,width,separator,dbuser,dbname,type,

   include_query,cid))

end

go

 

create function dbo.xp_startsmtp_(in smtp_sender long varchar,in smtp_server long varchar,in smtp_port integer default

25,in timeout integer default

60)

returns integer

on exception resume

begin

 declare sender long varchar;

 declare server long varchar;

 declare cid integer;

 set sender=cast(smtp_sender as long varchar);

 if sqlcode <> 0 then

   set sender=smtp_sender

 end if;

 set server=cast(smtp_server as long varchar);

 if sqlcode <> 0 then

   set server=smtp_server

 end if;

 set cid=connection_property('Number');

 return(dbo.xp_real_startsmtp_(sender,server,smtp_port,timeout,cid))

end

go

 

create function dbo.xp_stopsmtp_()

returns integer

begin

 return(dbo.xp_real_stopsmtp_(connection_property('Number')))

end

go

 

alter procedure DBA.gsendmailsmtp(@address long varchar,@subj long varchar,@body long varchar,@rcode1 integer output,@rcode2 integer output)

as

begin

 declare @sender char(128)

 declare @server char(128)

 select @sender = value from dba.globals where name = 'g_notify_from'

 select @server = value from dba.globals where name = 'g_notify_smtp'

 select @rcode1=5 --unknown error

 select @rcode2=-1 --no suberror

 if(isnull(@sender,'') = '') or(isnull(@server,'') = '') begin

     select @rcode1=4 --wrong params

     return

   end

 execute @rcode2 = xp_startsmtp_ @sender,@server

 if(@@error <> 0) or(@rcode2 <> 0) begin

     select @rcode1=1 --init failed

     return

   end

 execute @rcode2 = xp_sendmail_ recipient = @address,subject = @subj,"message" = @body

 if(@@error <> 0) or(@rcode2 <> 0) begin

     select @rcode1=2 --send failed

     return

   end

 execute @rcode2 = xp_stopsmtp_

 if(@@error <> 0) or(@rcode2 <> 0) begin

     select @rcode1=3 --close failed

     return

   end

 select @rcode1=0 --OK

end

go

 

set temporary option on_error = 'prompt'

Související témata