Pages - Menu

2018年11月23日 星期五

[PB] PowerBuilder 9 發送Mail使用 Store PROCEDURE

原先想寫在函數上面,但跳出一個錯誤
『只有函數和一些擴充預存程序可以從函數內執行』,
查了一下,EXEC 不能寫在函數,要麻就寫在SP上面。



所以先在SP上面建立一個發信程式

Create PROCEDURE [dbo].[sendMail]
          @sp_email varchar(255),
          @sp_subject nvarchar(255),        
          @sp_msg nvarchar(255)
AS
BEGIN
     -- SET NOCOUNT ON added to prevent extra result sets from
     -- interfering with SELECT statements.
     SET NOCOUNT ON;
    -- Insert statements for procedure here
         exec msdb.dbo.sp_send_dbmail
         @profile_name='sendmail',   --設定檔
         @recipients=@sp_email, --收件者
         @subject=@sp_subject,  --主旨
         @body=@sp_msg  , --內文
         --@query='select getdate()',  --還可以下查詢式哦
         --@file_attachments='C:\test.txt',  --夾檔
         --@attach_query_result_as_file=1,  --把查詢的結果設為附件夾檔,不設的話就是在mail內容中看到囉
         @body_format=TEXT,      --使用text格式
         @exclude_query_output = 1;    --關閉 指定是否要在電子郵件中傳回查詢執行的輸出。 預設是0 會顯示
         --@body_format=HTML'  --也可以使用HTML格式
END

在SQL的使用方式

exec dbo.sendMail
@l_email='aabbcc@aabb.com',
@l_subject ='test',
@l_msg ='hello sp'

在PowerBuilder 9的使用方式

DECLARE sp_name PROCEDURE FOR sendMail
  @sp_email = :l_id,
  @sp_subject = :l_subject ,
  @sp_msg = :l_msg;
 
EXECUTE sp_name;
close sp_name;

其實在PB上面也可以不需使用SP就能寄信,
但PB9要使用client端的預設送信軟體,而且不支援Outlook,
日前也發生過莫名其妙,就是有信送不出去、或是要加入聯絡人後才寄信的問題,
所以改寫成統一由資料庫發送

沒有留言:

張貼留言