$PBExportHeader$uo_email.sru
forward
global type uo_email from nonvisualobject
end type
end forward
global type uo_email from nonvisualobject
event ue_revemail ( )
end type
global uo_email uo_email
type variables
//string fjfilepathname = 'fjtemp'
//s_email_set s_set[],cur_set
//long sumcnt
//long finishcnt
Transaction commit_tran
Transaction fj_tran
string C_Sys_admsg_fj = 'Sys_admsg_fj'
string C_u_email_fj = 'u_email_fj'
string C_from_file = 'from_file'
end variables
forward prototypes
public function integer f_update_send (long arg_sendid, datetime arg_senddate, long arg_mailsize, ref string arg_msg)
public function integer f_check_rep (ref s_email_sendmx arg_sendmx, ref string arg_msg)
public function integer f_send (s_email_set arg_set, s_email_send arg_send, s_email_sendmx arg_sendmx, s_email_fj arg_fj, ref string arg_msg)
public function integer uf_get_send (long arg_sendid, ref s_email_send arg_s_send, ref string arg_msg)
public subroutine wf_str_replace (ref string arg_source, string arg_str1, string arg_str2)
public function integer wf_mail_gethtml (long arg_msgid, ref string arg_text, ref string arg_msg)
public function integer uf_get_sendmx (long arg_sendid, ref s_email_sendmx arg_sendmx[], ref string arg_msg)
public function integer wf_mail_getfjblob (long arg_fjid, ref blob arg_fjblob, ref string arg_msg)
public function integer uf_get_fj (long arg_relid, ref s_email_lvfj arg_lvfj[], ref string arg_msg, boolean arg_withblob)
public function integer wf_admsg_getfjblob (long arg_fjid, ref blob arg_fjblob, ref string arg_msg)
public function integer f_del (long arg_id, ref string arg_msg)
public function integer wf_ds_get_mail_set (long arg_mailid, ref s_email_set arg_set, ref string arg_msg)
public function long wf_ds_gettrunkbox (long arg_mailid)
public function long wf_ds_getsendbox (long arg_mailid)
public function string wf_ds_getuser (long arg_id)
public function string wf_ds_getaddress (long arg_id)
public function string wf_ds_getuseraddress (long arg_id)
public function integer wf_ds_move_msg_box (long arg_id, long arg_boxid, ref string arg_msg)
public function integer f_del_move_msg (long arg_id, ref string arg_msg)
public function integer f_unread (long arg_revid, ref string arg_msg)
public function integer f_read (long arg_revid, ref string arg_msg)
public function long f_save (ref s_email_send arg_send, s_email_sendmx arg_sendmx[], s_email_lvfj arg_fj[], ref string arg_msg)
public function long f_import_eml (ref s_email_send arg_send, s_email_lvfj arg_fj[], ref string arg_msg)
public function integer f_change_id (long arg_fromid, long arg_toid, ref string arg_msg)
end prototypes
event ue_revemail();//Long i
//string ls_msg
//FOR i = 1 TO sumcnt
// IF pf_revemail(s_set[i],ls_msg) = 0 THEN
//
// END IF
//NEXT
//
end event
public function integer f_update_send (long arg_sendid, datetime arg_senddate, long arg_mailsize, ref string arg_msg);Long rslt = 1
//UPDATE u_email_send
// SET senddate = :arg_senddate,
// mailsize = :arg_mailsize,
// mailtype = 1
// Where u_email_send.sendid = :arg_sendid
// and not exists (select 0 from u_email_sendmx where sendid = u_email_send.sendID and status = 0)
// using commit_tran;
//IF commit_tran.SQLCode <> 0 THEN
// rslt = 0
// arg_msg = '更新邮件信息失败'
//END IF
RETURN rslt
end function
public function integer f_check_rep (ref s_email_sendmx arg_sendmx, ref string arg_msg);Long cnt,rslt = 1,ll_id
cnt = 0
SELECT count(*)
INTO :cnt
FROM u_email_rep
WHERE empid = :sys_empid AND
LTRIM(RTRIM(Lower(mailAddress))) = LTRIM(RTRIM(Lower(:arg_sendmx.revaddress))) Using commit_tran;
IF commit_tran.SQLCode <> 0 THEN
rslt = 0
arG_MSG = "查询联系人列表失败~n"+commit_tran.SQLErrText
GOTO ext
END IF
IF cnt = 0 THEN
ll_id = f_sys_scidentity(0,"u_email_rep","repID",arG_MSG,True, commit_tran) //数据commit事务)
IF ll_id <= 0 THEN
rslt = 0
GOTO ext
END IF
INSERT INTO u_email_rep
( repID,
empid,
mailname,
mailaddress,
Opemp,
Opdate,
reptype )
VALUES ( :ll_id,
:sys_empid,
:arg_sendmx.revname ,
LTRIM(RTRIM(LOWER(:arg_sendmx.revaddress))),
:publ_operator,
getdate(),
1 ) Using commit_tran ;
IF commit_tran.SQLCode <> 0 THEN
rslt = 0
arG_MSG = "插入联系人列表失败~n"+commit_tran.SQLErrText
GOTO ext
END IF
arg_sendmx.reltype = 0
arg_sendmx.relid = ll_id
ELSE
IF arg_sendmx.reltype = 0 Or arg_sendmx.reltype = 3 THEN//类型为通讯录和手动的查询联系人表
SELECT top 1 repID,
mailname
INTO :arg_sendmx.relid,
:arg_sendmx.revname
FROM u_email_rep
WHERE empid = :sys_empid AND
LTRIM(RTRIM(Lower(mailAddress))) = LTRIM(RTRIM(Lower(:arg_sendmx.revaddress))) Using commit_tran;
arg_sendmx.reltype = 0
END IF
END IF
ext:
RETURN rslt
end function
public function integer f_send (s_email_set arg_set, s_email_send arg_send, s_email_sendmx arg_sendmx, s_email_fj arg_fj, ref string arg_msg);Long rslt = 1,k,l
//Blob lb_fj
//String ls_pathname[]
//Long ll_fjid ,it_max
//arg_msg = ''
//it_max = 0
//oleobject jmail
//jmail = CREATE oleobject
//jmail.ConnectToNewObject("JMail.Message")
//jmail.Charset = 'GB2312'
//jmail.ISOEncodeHeaders = TRUE
//jmail.silent = TRUE
//jmail.Logging = TRUE
//
//jmail.FROM = arg_set.mailAddress //发件人邮箱
//jmail.FromName = arg_set.mailuser //发件人
//jmail.Subject = Trim(arg_send.Subject) //邮件主题
//jmail.MailServerUserName = arg_set.mailAddress //发件邮箱登录账户
//jmail.MailServerPassword = arg_set.mailpsw //发件邮箱用户密码
//jmail.Priority = arg_send.Priority //优先级
////jmail.Body = Trim(arg_send.Textbody) + "~r~n" //邮件内容
//jmail.htmlbody = string(arg_send.htmlbody)
//FOR l = 1 TO UpperBound(arg_fj.fjid)
// if arg_fj.fjid[l] = 0 then continue
// ll_fjid = arg_fj.fjid[l]
// SELECTBLOB Fileblob
// INTO :lb_fj
// FROM u_email_fj
// Where (fjid = :ll_fjid) using fj_tran;
//
// IF fj_tran.SQLCode <> 0 THEN
// arg_msg = '下载附件失败'
//
// rslt = 0
// GOTO ext
// END IF
//
// it_max ++
// ls_pathname[it_max] = sys_cur_path+fjfilepathname+'\'+arg_fj.Filename[l]
// IF FileExists(ls_pathname[it_max]) THEN FileDelete(ls_pathname[it_max])
// IF f_blobtofile(ls_pathname[it_max],lb_fj,arg_msg) = 0 THEN
//
// rslt = 0
// GOTO ext
// ELSE
// jmail.AddAttachment(ls_pathname[it_max])
// END IF
//NEXT
//
//////添加联系人
//long ll_sent_num = 0
//if arg_send.normal_flag = 2 then
// FOR k = 1 TO UpperBound(arg_sendmx.revaddress)
// IF Trim(arg_sendmx.revaddress[k]) <> '' THEN
// jmail.AddRecipient(Trim(arg_sendmx.revaddress[k]))
// if not jmail.send(arg_set.smtpset) then
// rslt = 0
// arg_msg = arg_msg + "发送[" + Trim(arg_sendmx.revaddress[k]) + "]失败![" + arg_set.mailAddress + "]邮箱设置不正确或者没有连接网络~r~n"
// else
// // DONE : 修改收件人列表状态
// ll_sent_num ++
// update u_email_sendmx
// set u_email_sendmx.status = 1
// where u_email_sendmx.sendid = :arg_send.sendid and u_email_sendmx.printid = :arg_sendmx.printid[k] using commit_tran;
// if commit_tran.sqlcode <> 0 then
// rslt = 0
// arg_msg = arg_msg + "更新收件人[" + Trim(arg_sendmx.revaddress[k]) + "]状态失败~r~n"
// else
// commit;
// end if
//
// end if
// jmail.ClearRecipients()
// END IF
// NEXT
//else
// jmail.ClearRecipients()
// for k = 1 to upperBound(arg_sendmx.revaddress)
// IF Trim(arg_sendmx.revaddress[k]) <> '' THEN
//// Messagebox('', arg_sendmx.revaddress[k])
// if arg_send.normal_flag = 0 then
// jmail.AddRecipient(Trim(arg_sendmx.revaddress[k]))
// elseif arg_send.normal_flag = 1 then
// jmail.AddRecipientBCC(Trim(arg_sendmx.revaddress[k]))
// end if
// end if
// next
//
// //// debug///////
//// oleobject stream
//// stream = CREATE oleobject
//// stream.ConnectToNewObject("Adodb.Stream")
//// stream.Type = 1
//// stream.open()
//// jmail.SaveToStream(stream)
//// stream.position = 0
//// blob lb_message
//// setnull(lb_message)
//// lb_message = stream.read(stream.size)
//// stream.close()
//// stream.disconnectobject( )
//// destroy stream
//// messagebox('', string(lb_message))
// //// debug///////
//
// if not jmail.send(arg_set.smtpset) then
// rslt = 0
// arg_msg = arg_msg + "发送失败![" + arg_set.mailAddress + "]邮箱设置不正确或者没有连接网络~r~n"
// else
// // DONE : 修改收件人列表状态
// for k = 1 to upperBound(arg_sendmx.revaddress)
// ll_sent_num ++
// update u_email_sendmx
// set u_email_sendmx.status = 1
// where u_email_sendmx.sendid = :arg_send.sendid and u_email_sendmx.printid = :arg_sendmx.printid[k] using commit_tran;
// if commit_tran.sqlcode <> 0 then
// rslt = 0
// arg_msg = arg_msg + "更新收件人[" + Trim(arg_sendmx.revaddress[k]) + "]状态失败~r~n"
// else
// commit;
// end if
// next
// end if
// jmail.ClearRecipients()
//end if
//
//// DONE: 删除临时文件
//for l = 1 to it_max
// IF FileExists(ls_pathname[l]) THEN FileDelete(ls_pathname[l])
//next
//// DONE: 更改邮件状态
//if ll_sent_num > 0 then
// if f_update_send(arg_send.sendid, jmail.date, jmail.size, arg_msg) = 0 then
// rslt = 0
// arg_msg = arg_msg + "更改邮件状态失败~r~n"
// goto ext
// end if
//else
// rslt = 0
// arg_msg = arg_msg + "没有更改邮件发送状态"
// GOTO ext
//end if
//
//
////IF jmail.Send(arg_set.smtpset) THEN //ls_host为发件邮箱服务器
////
//// jmail.ClearAttachments()
//// jmail.ClearRecipients()
////
//// IF f_update_send(arg_send.sendid,jmail.Date,jmail.size,arg_msg) = 0 THEN
//// rslt = 0
//// GOTO ext
//// END IF
////
//// for l = 1 to it_max
//// IF FileExists(ls_pathname[l]) THEN FileDelete(ls_pathname[l])
//// next
////
////ELSE
//// arg_msg = "发送失败![" + arg_set.mailAddress + "]邮箱设置不正确或者没有连接网络"
//// rslt = 0
//// GOTO ext
////END IF
//
//ext:
//jmail.Close()
//DESTROY jmail
RETURN rslt
end function
public function integer uf_get_send (long arg_sendid, ref s_email_send arg_s_send, ref string arg_msg);integer rslt = 1
string ls_html
SELECT u_email_msg.ID,
u_email_msg.boxid,
u_email_msg.mailID,
u_email_msg.mailaddress,
u_email_msg.mailtype,
u_email_msg.Subject,
u_email_msg.Priority,
u_email_msg.senddate,
u_email_msg.Opdate,
u_email_msg.opemp,
u_email_msg.mailsize,
u_email_msg.sendOption,
u_email_msg.senduser,
u_email_msg.sendaddress,
u_email_msg.revdate
INTO :arg_s_send.sendid,
:arg_s_send.boxid,
:arg_s_send.mailid,
:arg_s_send.mailaddress,
:arg_s_send.mailtype,
:arg_s_send.Subject,
:arg_s_send.Priority,
:arg_s_send.senddate,
:arg_s_send.opdate,
:arg_s_send.opemp,
:arg_s_send.mailsize,
:arg_s_send.normal_flag,
:arg_s_send.senduser,
:arg_s_send.sendaddress,
:arg_s_send.revdate
FROM u_email_msg
where u_email_msg.ID = :arg_sendID using fj_tran;
if fj_tran.sqlcode <> 0 then
rslt = 0
arg_msg = "获取邮件失败,id:" + string(arg_sendid)
goto ext
end if
if wf_mail_gethtml(arg_sendid, arg_s_send.htmlbody, arg_msg) <> 1 then
rslt = 0
goto ext
end if
// DONE: revlist
ext:
return rslt
end function
public subroutine wf_str_replace (ref string arg_source, string arg_str1, string arg_str2);long ll_pos
ll_pos = pos(arg_source, arg_str1, 1)
do while ll_pos > 0
arg_source = Replace(arg_source, ll_pos, len(arg_str1), arg_str2)
ll_pos = pos(arg_source, arg_str1,1)
LOOP
end subroutine
public function integer wf_mail_gethtml (long arg_msgid, ref string arg_text, ref string arg_msg);int rslt = 1
long len
BLOB lb
SELECT DATALENGTH(htmlbody) INTO :len FROM u_email_msg
WHERE ID = :arg_msgid using fj_tran;
if fj_tran.sqlcode <> 0 then
rslt = 0
arg_msg = '查询html长度失败,' + fj_tran.sqlerrtext
goto ext
end if
if len = 0 then
SELECT DATALENGTH(textbody) INTO :len FROM u_email_msg
WHERE ID = :arg_msgid using fj_tran;
if fj_tran.sqlcode <> 0 then
rslt = 0
arg_msg = '查询text长度失败,' + fj_tran.sqlerrtext
goto ext
end if
if len > 2048 then
SELECTBLOB textbody INTO :lb FROM u_email_msg
WHERE ID = :arg_msgid using fj_tran;
if fj_tran.sqlcode <> 0 then
rslt = 0
arg_msg = '查询text失败,' + fj_tran.sqlerrtext
goto ext
end if
arg_text = string(lb)
wf_str_replace(arg_text, '~r~n', '
')
wf_str_replace(arg_text, '~r', '
')
wf_str_replace(arg_text, '~n', '
')
else
SELECT textbody INTO :arg_text FROM u_email_msg
WHERE ID = :arg_msgid using fj_tran;
if fj_tran.sqlcode <> 0 then
rslt = 0
arg_msg = '查询text失败,' + fj_tran.sqlerrtext
goto ext
end if
wf_str_replace(arg_text, '~r~n', '
')
wf_str_replace(arg_text, '~r', '
')
wf_str_replace(arg_text, '~n', '
')
end if
elseif len > 2048 then
SELECTBLOB htmlbody INTO :lb FROM u_email_msg
WHERE ID = :arg_msgid using fj_tran;
if fj_tran.sqlcode <> 0 then
rslt = 0
arg_msg = '查询html失败,' + fj_tran.sqlerrtext
goto ext
end if
arg_text = string(lb)
else
SELECT htmlbody INTO :arg_text FROM u_email_msg
WHERE ID = :arg_msgid using fj_tran;
if fj_tran.sqlcode <> 0 then
rslt = 0
arg_msg = '查询html失败,' + fj_tran.sqlerrtext
goto ext
end if
end if
ext:
return rslt
end function
public function integer uf_get_sendmx (long arg_sendid, ref s_email_sendmx arg_sendmx[], ref string arg_msg);Int rslt = 1,i,NO_MXCHECK
i = 0
s_email_sendmx s_sendmx[]
long sendid, printid, reltype, relid
string revaddress, revname
DECLARE CUR_INWAERMX CURSOR FOR
SELECT u_email_sendmx.sendid,
u_email_sendmx.printid,
u_email_sendmx.reltype,
u_email_sendmx.relid,
u_email_sendmx.revaddress,
u_email_sendmx.revname
FROM u_email_sendmx
where u_email_sendmx.sendid = :arg_sendid using fj_tran;
OPEN CUR_INWAERMX;
FETCH CUR_INWAERMX INTO :sendid,
:printid,
:reltype,
:relid,
:revaddress,
:revname;
DO WHILE fj_tran.SQLCode = 0
i++
s_sendmx[i].sendid = sendid
s_sendmx[i].printid = printid
s_sendmx[i].reltype = reltype
s_sendmx[i].relid = relid
s_sendmx[i].revaddress = revaddress
s_sendmx[i].revname = revname
FETCH CUR_INWAERMX INTO :sendid,
:printid,
:reltype,
:relid,
:revaddress,
:revname;
LOOP
CLOSE CUR_INWAERMX;
arg_sendmx = s_sendmx
RETURN rslt
end function
public function integer wf_mail_getfjblob (long arg_fjid, ref blob arg_fjblob, ref string arg_msg);int rslt = 1
SELECTBLOB fileblob INTO :arg_fjblob FROM u_email_fj
WHERE fjid = :arg_fjid using fj_tran;
if fj_tran.sqlcode <> 0 then
rslt = 0
arg_msg = '获取附件失败,' + fj_tran.sqlerrtext
goto ext
end if
ext:
return rslt
end function
public function integer uf_get_fj (long arg_relid, ref s_email_lvfj arg_lvfj[], ref string arg_msg, boolean arg_withblob);Int rslt = 1,i
i = 0
long fjid, fjtype, relid
string filename, filetype,cid
s_email_lvfj l_s_lvfj[]
DECLARE CUR_INWAERMX CURSOR FOR
SELECT u_email_fj.fjid,
u_email_fj.fjtype,
u_email_fj.Relid,
u_email_fj.filename,
u_email_fj.filetype ,
u_email_fj.cid
FROM u_email_fj
where u_email_fj.Relid = :arg_Relid using fj_tran;
OPEN CUR_INWAERMX;
FETCH CUR_INWAERMX INTO :fjid,
:fjtype,
:Relid,
:filename,
:filetype,
:cid;
DO WHILE fj_tran.SQLCode = 0
i++
l_s_lvfj[i].fjid = fjid
l_s_lvfj[i].fjtype = fjtype
l_s_lvfj[i].Relid = Relid
l_s_lvfj[i].filename = filename
l_s_lvfj[i].filetype = C_u_email_fj
l_s_lvfj[i].cid = cid
FETCH CUR_INWAERMX INTO :fjid,
:fjtype,
:Relid,
:filename,
:filetype,
:cid;
LOOP
CLOSE CUR_INWAERMX;
if arg_withBlob then
for i = 1 to UPPERBOUND(l_s_lvfj)
if wf_mail_getfjblob(l_s_lvfj[i].fjid, l_s_lvfj[i].fileblob, arg_msg) <> 1 then
rslt = 0
goto ext
end if
next
end if
arg_lvfj = l_s_lvfj
ext:
RETURN rslt
end function
public function integer wf_admsg_getfjblob (long arg_fjid, ref blob arg_fjblob, ref string arg_msg);int rslt = 1
SELECTBLOB fileblob INTO :arg_fjblob FROM Sys_admsg_fj
WHERE fjid = :arg_fjid using Commit_Tran;
if Commit_Tran.sqlcode <> 0 then
rslt = 0
arg_msg = '获取内部消息附件失败,' + Commit_Tran.sqlerrtext
goto ext
end if
ext:
return rslt
end function
public function integer f_del (long arg_id, ref string arg_msg);Int rslt = 1
// fjtype : 0:发件箱 1:收件箱
// mailtype : 0:未发,未读1:已发,已读2:废件箱
DELETE FROM u_email_msg WHERE ID = :arg_id using fj_tran;
if fj_tran.sqlcode <> 0 then
rslt = 0
arg_msg = '删除邮件失败,' + fj_tran.sqlerrtext
goto ext
end if
DELETE FROM u_email_sendmx WHERE sendid = :arg_id using fj_tran;
if fj_tran.sqlcode <> 0 then
rslt = 0
arg_msg = '删除收件人列表失败,' + fj_tran.sqlerrtext
goto ext
end if
DELETE FROM u_email_fj WHERE relid = :arg_id using fj_tran;
if fj_tran.sqlcode <> 0 then
rslt = 0
arg_msg = '删除附件失败,' + fj_tran.sqlerrtext
goto ext
end if
ext:
IF rslt = 0 THEN
ROLLBACK USING fj_tran;
ELSE
COMMIT USING fj_tran;
END IF
RETURN rslt
end function
public function integer wf_ds_get_mail_set (long arg_mailid, ref s_email_set arg_set, ref string arg_msg);int rslt = 1
SELECT mailuser, mailaddress
INTO :arg_set.mailuser, :arg_set.mailaddress
FROM u_email_set
WHERE mailID = :arg_mailid using Commit_Tran;
if Commit_Tran.sqlcode <> 0 then
rslt = 0
arg_msg = '查询帐号信息失败,' + Commit_Tran.sqlerrtext
goto ext
end if
arg_set.mailid = arg_mailid
ext:
return rslt
end function
public function long wf_ds_gettrunkbox (long arg_mailid);long rslt = -1
SELECT TOP 1 boxid INTO :rslt
FROM u_email_box
WHERE mailid = :arg_mailid AND boxtype = '废件箱' using Commit_Tran;
if Commit_Tran.sqlcode <> 0 then
return -1
end if
return rslt
end function
public function long wf_ds_getsendbox (long arg_mailid);long rslt = -1
SELECT TOP 1 boxid INTO :rslt
FROM u_email_box
WHERE mailid = :arg_mailid AND boxtype = '发件箱' using Commit_Tran;
if Commit_Tran.sqlcode <> 0 then
return -1
end if
return rslt
end function
public function string wf_ds_getuser (long arg_id);string rslt = ''
long ll_cnt
SELECT COUNT(0) INTO :ll_cnt FROM u_email_sendmx
WHERE sendid = :arg_id using fj_tran;
if fj_tran.sqlcode <> 0 then
return rslt
end if
if ll_cnt = 0 then
return rslt
end if
string revname
declare cur1 CURSOR FOR
SELECT revname FROM u_email_sendmx
WHERE sendid = :arg_id ORDER BY printid using fj_tran;
open cur1;
fetch cur1 INTO :revname;
do while fj_tran.sqlcode = 0
rslt = rslt + revname + ';'
fetch cur1 INTO :revname;
LOOP
close cur1;
rslt = left(rslt, len(rslt) - 1)
return rslt
end function
public function string wf_ds_getaddress (long arg_id);string rslt = ''
long ll_cnt
SELECT COUNT(0) INTO :ll_cnt FROM u_email_sendmx
WHERE sendid = :arg_id using fj_tran;
if fj_tran.sqlcode <> 0 then
return rslt
end if
if ll_cnt = 0 then
return rslt
end if
string revname
declare cur1 CURSOR FOR
SELECT revaddress FROM u_email_sendmx
WHERE sendid = :arg_id ORDER BY printid using fj_tran;
open cur1;
fetch cur1 INTO :revname;
do while fj_tran.sqlcode = 0
rslt = rslt + revname + ';'
fetch cur1 INTO :revname;
LOOP
close cur1;
rslt = left(rslt, len(rslt) - 1)
return rslt
end function
public function string wf_ds_getuseraddress (long arg_id);string rslt = ''
long ll_cnt
SELECT COUNT(0) INTO :ll_cnt FROM u_email_sendmx
WHERE sendid = :arg_id using fj_tran;
if fj_tran.sqlcode <> 0 then
return rslt
end if
if ll_cnt = 0 then
return rslt
end if
string revname
declare cur1 CURSOR FOR
SELECT revname + '<' + revaddress + '>' as address FROM u_email_sendmx
WHERE sendid = :arg_id ORDER BY printid using fj_tran;
open cur1;
fetch cur1 INTO :revname;
do while fj_tran.sqlcode = 0
rslt = rslt + revname + ';'
fetch cur1 INTO :revname;
LOOP
close cur1;
rslt = left(rslt, len(rslt) - 1)
return rslt
end function
public function integer wf_ds_move_msg_box (long arg_id, long arg_boxid, ref string arg_msg);int rslt = 1
long mailid
SELECT mailid INTO :mailid
FROM u_email_box WHERE boxid = :arg_boxid using Commit_Tran;
if Commit_Tran.sqlcode <> 0 then
rslt = 0
arg_msg = '查询邮箱所属帐号失败,' + Commit_Tran.sqlerrtext
goto ext
end if
UPDATE u_email_msg SET boxid = :arg_boxid, mailid = :mailid
WHERE ID = :arg_id using fj_tran;
if fj_tran.sqlcode <> 0 then
rslt = 0
arg_msg = '移动邮件失败,' + fj_tran.sqlerrtext
goto ext
end if
if fj_tran.SQLNRows <> 1 then
rslt = 0
arg_msg = '原邮件已经不存在'
goto ext
end if
ext:
if rslt = 0 then
rollback using fj_tran;
else
commit using fj_tran;
end if
return rslt
end function
public function integer f_del_move_msg (long arg_id, ref string arg_msg);int rslt = 1
long mailid, boxid
SELECT mailid, boxid INTO :mailid, :boxid
FROM u_email_msg WHERE ID = :arg_id using fj_tran;
if fj_tran.sqlcode <> 0 then
rslt = 0
arg_msg = '查询邮件失败,邮件可能不存在,' + fj_tran.sqlerrtext
goto ext
end if
long trunkboxid
trunkboxid = wf_ds_gettrunkbox(mailid)
if trunkboxid <= 0 then
rslt = 0
arg_msg = '获取默认废件箱失败'
goto ext
end if
if boxid = trunkboxid then
if f_del(arg_id, arg_msg) <> 1 then
rslt = 0
goto ext
end if
else
if wf_ds_move_msg_box(arg_id, trunkboxid, arg_msg) <> 1 then
rslt = 0
goto ext
end if
end if
ext:
if rslt = 0 then
rollback using fj_tran;
else
commit using fj_tran;
end if
return rslt
end function
public function integer f_unread (long arg_revid, ref string arg_msg);Long rslt = 1
UPDATE u_email_msg
SET status = '未读'
Where u_email_msg.ID = :arg_revid using fj_tran;
IF fj_tran.SQLCode <> 0 THEN
rslt = 0
arG_MSG = "更新收件标记失败~n"+fj_tran.SQLErrText
GOTO ext
END IF
ext:
IF rslt = 0 THEN
ROLLBACK using fj_tran;
ELSE
COMMIT using fj_tran;
END IF
RETURN rslt
end function
public function integer f_read (long arg_revid, ref string arg_msg);Long rslt = 1
UPDATE u_email_msg
SET status = '已读'
Where u_email_msg.ID = :arg_revid using fj_tran;
IF fj_tran.SQLCode <> 0 THEN
rslt = 0
arG_MSG = "更新收件标记失败~n"+fj_tran.SQLErrText
GOTO ext
END IF
ext:
IF rslt = 0 THEN
ROLLBACK using fj_tran;
ELSE
COMMIT using fj_tran;
END IF
RETURN rslt
end function
public function long f_save (ref s_email_send arg_send, s_email_sendmx arg_sendmx[], s_email_lvfj arg_fj[], ref string arg_msg);Int rslt = 1
Long i,totalSize = 0
Long cnt,ll_id = 0
Long ll_fjid
String ls_msg
Boolean has_copy = False
COMMIT Using fj_tran;
fj_tran.AutoCommit = True
IF UpperBound(arg_fj) > 0 THEN
FOR cnt = 1 To UpperBound(arg_fj)
totalSize+= arg_fj[cnt].filesize
IF totalSize > 100*1024*1024 THEN
//附件超过100M
rslt = 0
arg_msg = '附件大于100m,不能发送!'
GOTO ext
END IF
NEXT
// MessageBox('',String(totalSize))
END IF
s_email_set s_set
IF wf_ds_get_mail_set(arg_send.mailid, s_set, arg_msg) <> 1 THEN
rslt = 0
GOTO ext
END IF
arg_send.mailAddress = s_set.mailAddress
arg_send.senduser = s_set.mailuser
arg_send.sendaddress = s_set.mailAddress
IF arg_send.NTFlag = 1 THEN
arg_send.NTMail = arg_send.mailAddress
END IF
IF arg_send.sendid = 0 THEN
ll_id = f_sys_scidentity(0,"u_email_msg","ID",arg_msg,True, commit_tran) //数据commit事务)
IF ll_id <= 0 THEN
rslt = 0
GOTO ext
END IF
arg_send.boxid = wf_ds_getsendbox(arg_send.mailid)
IF arg_send.boxid = -1 THEN
rslt = 0
arg_msg = '获取默认发件箱失败'
GOTO ext
END IF
INSERT INTO u_email_msg
( ID,
boxid,
mailID,
mailaddress,
mailtype,
Subject,
Priority,
// senddate,
Opdate,
opemp,
mailsize,
SendOption,
textbody,
htmlbody,
senduser,
sendaddress,
ntflag,
ntname,
ntmail
)
VALUES ( :ll_id,
:arg_send.boxid,
:arg_send.mailID,
:arg_send.mailaddress,
:arg_send.mailtype,
:arg_send.Subject,
:arg_send.Priority,
// :arg_send.senddate,
getdate(),
:publ_operator,
:arg_send.mailsize,
:arg_send.normal_flag,
:arg_send.textbody,
:arg_send.htmlbody,
:s_set.mailuser,
:s_set.mailAddress,
:arg_send.ntflag,
:arg_send.ntname,
:arg_send.NTMail) Using fj_tran;
IF fj_tran.SQLCode <> 0 THEN
rslt = 0
arg_msg = "插入发送邮件失败~n"+fj_tran.SQLErrText
GOTO ext
END IF
///////// //
IF arg_send.senddate > DateTime(Today(),Now()) THEN
UPDATE u_email_msg Set senddate = :arg_send.senddate,mailtype='定时发件' where ID=:ll_id Using fj_tran;
END IF
/////// //
IF UpperBound(arg_sendmx) = 0 THEN
rslt = 0
arg_msg = "发送邮件收件人不能为空~n"
GOTO ext
END IF
FOR i = 1 To UpperBound(arg_sendmx)
INSERT INTO u_email_sendmx
( sendid,
printid,
reltype,
relid,
revaddress,
revname ,
repname,
addtype)
VALUES ( :ll_id,
:arg_sendmx[i].printid,
:arg_sendmx[i].reltype,
:arg_sendmx[i].relid,
:arg_sendmx[i].revaddress,
:arg_sendmx[i].revname ,
:arg_sendmx[i].repname,
:arg_sendmx[i].addtype
) Using fj_tran;
IF fj_tran.SQLCode <> 0 THEN
rslt = 0
arg_msg = "插入发送邮件收件人明细失败~n"+fj_tran.SQLErrText
GOTO ext
END IF
NEXT
// IF UpperBound(arg_fj.Filename) = 0 THEN GOTO ext
FOR i = 1 To UpperBound(arg_fj)
ll_fjid = f_sys_scidentity(0,"u_email_fj","fjid",arg_msg,True, commit_tran) //数据commit事务)
IF ll_fjid <= 0 THEN
rslt = 0
GOTO ext
END IF
// DONE filesize
IF arg_fj[i].FileType = C_Sys_admsg_fj THEN
IF wf_admsg_getfjblob(arg_fj[i].fjid, arg_fj[i].fileblob, arg_msg) <> 1 THEN
rslt = 0
GOTO ext
END IF
ELSEIF arg_fj[i].FileType = C_u_email_fj THEN
IF wf_mail_getfjblob(arg_fj[i].fjid, arg_fj[i].fileblob, arg_msg) <> 1 THEN
rslt = 0
GOTO ext
END IF
ELSEIF arg_fj[i].FileType = C_from_file THEN
END IF
arg_fj[i].filesize = Len(arg_fj[i].fileblob)
INSERT INTO u_email_fj
( fjid,
fjtype,
Relid,
filename,
filesize,
cid
) VALUES
( :ll_fjid,
0,
:ll_id,
:arg_fj[i].filename,
:arg_fj[i].filesize,
:arg_fj[i].cid
) Using fj_tran;
IF fj_tran.SQLCode <> 0 THEN
rslt = 0
arg_msg = "插入发送邮件的附件明细失败~n"+fj_tran.SQLErrText
GOTO ext
END IF
IF arg_fj[i].filesize > 0 THEN
COMMIT Using fj_tran;
UpdateBlob u_email_fj
Set fileblob = :arg_fj[i].fileblob
Where fjid = :ll_fjid Using fj_tran;
IF fj_tran.SQLCode <> 0 THEN
rslt = 0
arg_msg = "插入发送邮件的附件明细失败~n"+fj_tran.SQLErrText
GOTO ext
END IF
COMMIT Using fj_tran;
END IF
NEXT
arg_send.sendid = ll_id
ELSE
ll_id = f_sys_scidentity(0,"u_email_msg","ID",arg_msg,True, commit_tran) //数据commit事务)
IF ll_id <= 0 THEN
rslt = 0
GOTO ext
END IF
// 备份邮件
INSERT INTO u_email_msg
(ID, boxid, mailid, mailaddress, subject, mailsize, textbody, htmlbody, orgdata, senduser, sendaddress, sendOption, priority, senddate, opdate, opemp,
revdate, tuid, mailtype, status)
SELECT :ll_id AS Expr1, boxid, mailid, mailaddress, subject, mailsize, textbody, htmlbody, orgdata, senduser, sendaddress, sendOption, priority, senddate,
opdate, opemp, revdate, tuid, mailtype, status
FROM u_email_msg AS u_email_msg_1
Where (ID = :arg_send.sendid) Using fj_tran;
IF fj_tran.SQLCode <> 0 THEN
rslt = 0
arg_msg = '备份邮件失败,' + fj_tran.SQLErrText
f_del(ll_id, ls_msg)
GOTO ext
END IF
// 备份发件明细
INSERT INTO u_email_sendmx
(sendid, printid, reltype, relid, revaddress, revname, dscrp, status)
SELECT :ll_id AS Expr1, printid, reltype, relid, revaddress, revname, dscrp, status
FROM u_email_sendmx AS u_email_sendmx_1
Where (sendid = :arg_send.sendid) Using fj_tran;
IF fj_tran.SQLCode <> 0 THEN
rslt = 0
arg_msg = '备份邮件明细失败,' + fj_tran.SQLErrText
f_del(ll_id, ls_msg)
GOTO ext
END IF
// 备份附件
Long arr_fjid[]
i = 0
DECLARE cur1 CURSOR FOR
SELECT fjid FROM u_email_fj
Where relid = :arg_send.sendid Using fj_tran;
OPEN cur1;
FETCH cur1 Into :ll_fjid;
DO WHILE fj_tran.SQLCode = 0
i++
arr_fjid[i] = ll_fjid
FETCH cur1 Into :ll_fjid;
LOOP
CLOSE cur1;
FOR i = 1 To UpperBound(arr_fjid)
ll_fjid = f_sys_scidentity(0,"u_email_fj","fjid",arg_msg,True, commit_tran) //数据commit事务)
IF ll_fjid <= 0 THEN
rslt = 0
f_del(ll_id, ls_msg)
GOTO ext
END IF
INSERT INTO u_email_fj
(fjid, fjtype, Relid, filename, fileblob, filesize, filetype)
SELECT :ll_fjid AS Expr1, fjtype, :ll_id, filename, fileblob, filesize, filetype
FROM u_email_fj AS u_email_fj_1
Where (fjid = :arr_fjid[i]) Using fj_tran;
IF fj_tran.SQLCode <> 0 THEN
rslt = 0
arg_msg = '备份附件失败,' + fj_tran.SQLErrText
f_del(ll_id, ls_msg)
GOTO ext
END IF
NEXT
has_copy = True
UPDATE u_email_msg
SET mailID = :arg_send.mailID,
boxid = :arg_send.boxid,
mailaddress = :arg_send.mailaddress,
Subject = :arg_send.Subject,
Priority = :arg_send.Priority,
Opdate = getdate(),
opemp = :publ_operator,
mailsize = :arg_send.mailsize,
mailtype = :arg_send.mailtype,
sendOption = :arg_send.normal_flag,
textbody = :arg_send.textbody,
htmlbody = :arg_send.htmlbody,
senduser = :s_set.mailuser,
sendaddress = :s_set.mailaddress
Where ID = :ll_id Using fj_tran;
IF fj_tran.SQLCode <> 0 THEN
rslt = 0
arg_msg = "更新发送邮件失败~n"+fj_tran.SQLErrText
GOTO ext
END IF
DELETE FROM u_email_sendmx
Where sendid = :ll_id Using fj_tran;
IF fj_tran.SQLCode <> 0 THEN
rslt = 0
arg_msg = "删除发送邮件收件人明细失败~n"+fj_tran.SQLErrText
GOTO ext
END IF
IF UpperBound(arg_sendmx) = 0 THEN
rslt = 0
arg_msg = '没有收件人'
GOTO ext
END IF
FOR i = 1 To UpperBound(arg_sendmx)
INSERT INTO u_email_sendmx
( sendid,
printid,
reltype,
relid,
revaddress,
revname ,
addtype
)
VALUES ( :ll_id,
:arg_sendmx[i].printid,
:arg_sendmx[i].reltype,
:arg_sendmx[i].relid,
:arg_sendmx[i].revaddress,
:arg_sendmx[i].revname,
:arg_sendmx[i].addtype
) Using fj_tran ;
IF fj_tran.SQLCode <> 0 THEN
rslt = 0
arg_msg = "插入发送邮件收件人明细失败~n"+fj_tran.SQLErrText
GOTO ext
END IF
NEXT
DELETE FROM u_email_fj
Where relid = :ll_id Using fj_tran;
IF fj_tran.SQLCode <> 0 THEN
rslt = 0
arg_msg = "删除发送邮件的附件明细失败~n"+fj_tran.SQLErrText
GOTO ext
END IF
// IF UpperBound(arg_fj.Filename) = 0 THEN GOTO ext
FOR i = 1 To UpperBound(arg_fj)
ll_fjid = f_sys_scidentity(0,"u_email_fj","fjid",arg_msg,True, commit_tran) //数据commit事务)
IF ll_fjid <= 0 THEN
rslt = 0
GOTO ext
END IF
// DONE filesize
IF arg_fj[i].FileType = C_Sys_admsg_fj THEN
IF wf_admsg_getfjblob(arg_fj[i].fjid, arg_fj[i].fileblob, arg_msg) <> 1 THEN
rslt = 0
GOTO ext
END IF
ELSEIF arg_fj[i].FileType = C_u_email_fj THEN
IF wf_mail_getfjblob(arg_fj[i].fjid, arg_fj[i].fileblob, arg_msg) <> 1 THEN
rslt = 0
GOTO ext
END IF
ELSEIF arg_fj[i].FileType = C_from_file THEN
END IF
arg_fj[i].filesize = Len(arg_fj[i].fileblob)
//////////// //
INSERT INTO u_email_fj
( fjid,
fjtype,
Relid,
filename,
filesize,
cid
) VALUES
( :ll_fjid,
0,
:ll_id,
:arg_fj[i].filename,
:arg_fj[i].filesize,
:arg_fj[i].cid
) Using fj_tran;
IF fj_tran.SQLCode <> 0 THEN
rslt = 0
arg_msg = "插入发送邮件的附件明细失败~n"+fj_tran.SQLErrText
GOTO ext
ELSE
COMMIT Using fj_tran;
END IF
IF arg_fj[i].filesize > 0 THEN
UpdateBlob u_email_fj
Set fileblob = :arg_fj[i].fileblob
Where fjid = :ll_fjid Using fj_tran;
IF fj_tran.SQLCode <> 0 THEN
rslt = 0
arg_msg = "插入发送邮件的附件明细失败~n"+fj_tran.SQLErrText
GOTO ext
END IF
END IF
NEXT
fj_tran.AutoCommit = False
f_del(arg_send.sendid, ls_msg)
f_change_id(ll_id, arg_send.sendid, ls_msg)
END IF
ext:
fj_tran.AutoCommit = False
IF rslt = 0 THEN
IF arg_send.sendid = 0 And ll_id > 0 THEN
f_del(ll_id, ls_msg)
END IF
IF has_copy And arg_send.sendid > 0 THEN
f_del(ll_id, ls_msg)
END IF
ELSE
END IF
RETURN rslt
end function
public function long f_import_eml (ref s_email_send arg_send, s_email_lvfj arg_fj[], ref string arg_msg);Int rslt = 1
Long i
Long cnt,ll_id = 0
long ll_fjid
string ls_msg
IF arg_send.sendid = 0 THEN
ll_id = f_sys_scidentity(0,"u_email_msg","ID",arG_MSG,TRUE, commit_tran) //数据commit事务)
IF ll_id <= 0 THEN
rslt = 0
GOTO ext
END IF
INSERT INTO u_email_msg
( ID,
boxid,
mailID,
mailaddress,
mailtype,
Subject,
Priority,
// senddate,
Opdate,
opemp,
mailsize,
SendOption,
textbody,
htmlbody,
senduser,
sendaddress,
status,
revdate)
VALUES ( :ll_id,
:arg_send.boxid,
:arg_send.mailID,
:arg_send.mailaddress,
:arg_send.mailtype,
:arg_send.Subject,
:arg_send.Priority,
// :arg_send.senddate,
getdate(),
:publ_operator,
:arg_send.mailsize,
:arg_send.normal_flag,
:arg_send.textbody,
:arg_send.htmlbody,
:arg_send.senduser,
:arg_send.sendaddress,
:arg_send.status,
GETDATE()) USING fj_tran;
IF fj_tran.SQLCode <> 0 THEN
rslt = 0
arG_MSG = "插入发送邮件失败~n"+fj_tran.SQLErrText
GOTO ext
END IF
commit using fj_tran;
UPDATEBLOB u_email_msg set orgdata = :arg_send.orgdata WHERE id = :ll_id using fj_tran;
if fj_tran.sqlcode <> 0 then
rslt = 0
arg_msg = '更新原始数据失败,' + fj_tran.sqlerrtext
goto ext
end if
commit using fj_tran;
// IF UpperBound(arg_fj.Filename) = 0 THEN GOTO ext
FOR i = 1 TO UpperBound(arg_fj)
ll_fjid = f_sys_scidentity(0,"u_email_fj","fjid",arG_MSG,TRUE, commit_tran) //数据commit事务)
IF ll_fjid <= 0 THEN
rslt = 0
GOTO ext
END IF
// DONE filesize
if arg_fj[i].filetype = C_Sys_admsg_fj then
if wf_admsg_getfjblob(arg_fj[i].fjid, arg_fj[i].fileblob, arg_msg) <> 1 then
rslt = 0
goto ext
end if
elseif arg_fj[i].filetype = C_u_email_fj then
if wf_mail_getfjblob(arg_fj[i].fjid, arg_fj[i].fileblob, arg_msg) <> 1 then
rslt = 0
goto ext
end if
elseif arg_fj[i].filetype = C_from_file then
end if
arg_fj[i].filesize = len(arg_fj[i].fileblob)
INSERT INTO u_email_fj
( fjid,
fjtype,
Relid,
filename,
filesize,
cid
) VALUES
( :ll_fjid,
0,
:ll_id,
:arg_fj[i].filename,
:arg_fj[i].filesize,
:arg_fj[i].cid
) USING fj_tran;
IF fj_tran.SQLCode <> 0 THEN
rslt = 0
arG_MSG = "插入发送邮件的附件明细失败~n"+fj_tran.SQLErrText
GOTO ext
END IF
IF arg_fj[i].filesize > 0 THEN
COMMIT USING fj_tran;
UPDATEBLOB u_email_fj
Set fileblob = :arg_fj[i].fileblob
Where fjid = :ll_fjid USING fj_tran;
IF fj_tran.SQLCode <> 0 THEN
rslt = 0
arG_MSG = "插入发送邮件的附件明细失败~n"+fj_tran.SQLErrText
GOTO ext
END IF
Commit using fj_tran;
END IF
NEXT
arg_send.sendid = ll_id
ELSE
rslt = 0
arg_msg = '导入邮件必须新建邮件'
goto ext
END IF
ext:
IF rslt = 0 THEN
ROLLBACK USING commit_tran;
ROLLBACK USING fj_tran;
if arg_send.sendid = 0 AND ll_id > 0 then
f_del(ll_id, ls_msg)
end if
ELSE
COMMIT USING commit_tran;
COMMIT USING fj_tran;
END IF
RETURN rslt
end function
public function integer f_change_id (long arg_fromid, long arg_toid, ref string arg_msg);int rslt = 1
UPDATE u_email_msg SET ID = :arg_toid WHERE ID = :arg_fromid using fj_tran;
if fj_tran.sqlcode <> 0 then
rslt = 0
arg_msg = '更新邮件ID失败,' + fj_tran.sqlerrtext
goto ext
end if
UPDATE u_email_sendmx SET sendid = :arg_toid WHERE sendid = :arg_fromid using fj_tran;
if fj_tran.sqlcode <> 0 then
rslt = 0
arg_msg = '更新邮件明细sendid失败,' + fj_tran.sqlerrtext
goto ext
end if
UPDATE u_email_fj SET Relid = :arg_toid WHERE Relid = :arg_fromid using fj_tran;
if fj_tran.sqlcode <> 0 then
rslt = 0
arg_msg = '更新附件相关失败,' + fj_tran.sqlerrtext
goto ext
end if
ext:
if rslt = 0 then
rollback using fj_tran;
else
commit using fj_tran;
end if
return rslt
end function
on uo_email.create
call super::create
TriggerEvent( this, "constructor" )
end on
on uo_email.destroy
TriggerEvent( this, "destructor" )
call super::destroy
end on