Permenkaret
20th November 2011, 02:06 PM
Sebelum kita mulai maka ada baiknya untuk mengetahui sejenak yang dimaksud dengan stored
procedure. Stored procedure adalah sekumpulan perintah-perintah SQL yang tersimpan dalam SQL
Server. Procedure ini sudah dalam keadaan ter-compile di server dan siap dipanggil apabila
diperlukan. Untuk lebih jelasnya silakan Anda baca buku-buku SQL Server khususnya yang
menyangkut masalah stored procedure. OK, kita kembali lagi ke masalah utama. Stored procedure
yang akan kita buat kali ini adalah stored procedure untuk mengirimkan e-mail. Di dalam SQL
Server sendiri sebenarnya sudah terdapat stored procedure seperti ini yaitu xp_sendmail, hanya saja
lumayan ribet untuk men-setting feature SQL Mail di SQL Server ini. Ribetnya gimana sih? Ya
pokoknya ribet deh, sampai-sampai penulis saja masih bingung sampe detik ini.
Kita tinggalkan saja feature SQL Mail ini dan kita akan membuat stored procedure yang lain yaitu
dengan memanfaatkan object e-mail w3 JMail dari Dimac. JMail adalah suatu komponen COM
berupa file dll yang fungsinya dapat untuk mengirim atau menerima e-mail. Selain itu pada
komponen ini terdapat pula fasilitas enkripsi dan mail merge. Dan yang paling penting komponen
w3 JMail ini GRATIS, Anda bisa dapatkan di website-nya www.dimac.net (http://www.dimac.net). Penulis menggunakan
w3 JMail versi 4.3. Gimana sih kok SQL Server bisa mengakses komponen JMail untuk mengirim
file? Terimakasih kepada SQL Server yang sudah menyediakan beberapa built-in stored procedure
OLE automation. Stored procedure OLE automation di SQL Server adalah:
� sp_OACreate, untuk membuat instance dari suatu COM object
� sp_OADestroy, untuk menghapus instance dari suatu COM object
� sp_OASetProperty, untuk men-set properti dari suatu COM object dengan nilai yang baru
� sp_OAGetProperty, untuk mendapatkan nilai properti dari suatu COM object
� sp_OAMethod, untuk memanggil method dari suatu COM object
� sp_OAStop, wah kalo ini mah gue belon ngerti terjemahannya :) silakan baca help-nya
� sp_OAGetErrorInfo, untuk mendapatkan informasi error dari OLE automation
Penulis tidak akan membahas stored procedure OLE automation SQL Server pada tulisan ini. Hal
itu mungkin akan penulis sajikan pada kesempatan yang lain. Script stored procedure di bawah
penulis beri nama sp_SendMail_JMail dan memiliki sembilan parameter. Parameter utama yang
harus ada yaitu @RecAddr (alamat e-mail tujuan) dan @SMTPServer (alamat SMTP server). Jadi
untuk bisa mengirimkan e-mail Anda cukup mengisi dua parameter di atas, tentu saja dengan
parameter yang lain akan diisi dengan nilai default masing-masing. Untuk parameter lain penulis
kira sudah cukup jelas bagi pembaca (yang sudah mengerti stored procedure) tetapi mungkin masih
ada yang bingung antara parameter @Body dan @BodyFromFile. Dua parameter tersebut memiliki
fungsi yang sama hanya saja cara pengambilan datanya yang berbeda. Jika Anda ingin menulis
langsung body e-mail Anda pada saat menjalankan stored procedure maka Anda bisa menggunakan
parameter @Body, contohnya @Body='Ini body e-mail saya...'. Tetapi jika Anda ingin mengisi
body e-mail dengan text dari suatu text file di komputer Anda maka Anda bisa menggunakan
parameter @BodyFromFile, contohnya @BodyFromFile='c:�bodymail.txt'.
OK, sekarang silakan saja Anda ketik script stored di bawah ini pada SQL Query Analyzer atau
dapat juga melalui SQL Server Enterprise Manager.
Spoiler for sintax:
create procedure sp_SendMail_JMail
@FromAddr varchar(255) = '[email protected]', -- from e-mail
@FromName varchar(255) = 'SQL Server featuring JMail', -- from name
@RecAddr varchar(255), -- recipient address
@RecName varchar(255) = '', -- recipient name
@Attachment varchar(1000) = '', -- attach file path
@Subject varchar(255) = '', -- e-mail subject
@Body varchar(8000) = '', -- e-mail body
@BodyFromFile varchar(1000) = '', -- e-mail body that comes from file
@SMTPServer varchar(255)
as
declare @obj int
declare @res int
declare @ires int
declare @ires2 varchar(255)
exec @res = sp_OACreate 'jmail.Message', @obj out
if @res 0
begin
return 1
end
exec @res = sp_OAMethod @obj, 'AddHeader', NULL, 'App-Sender','SQL Server
featuring JMail (stored procedure)'
if @res 0
return 1
end
exec @res = sp_OASetProperty @obj, 'From', @FromAddr
if @res 0
begin
return 1
end
exec @res = sp_OASetProperty @obj, 'FromName', @FromName
if @res 0
begin
return 1
end
if @RecName = ''
begin
exec @res = sp_OAMethod @obj, 'AddRecipient', NULL, @RecAddr
if @res 0
begin
return 1
end
end
else
begin
exec @res = sp_OAMethod @obj, 'AddRecipient', NULL, @RecAddr,@RecName
if @res 0
begin
return 1
end
end
if @Attachment ''
begin
exec @res = sp_OAMethod @obj, 'AddAttachment', @ires2 out, @Attachment
if @res 0
begin
return 1
end
end
exec @res = sp_OASetProperty @obj, 'Subject', @Subject
if @res 0
begin
return 1
end
if @BodyFromFile ''
begin
exec @res = sp_OAMethod @obj, 'AppendBodyFromFile', NULL, @BodyFromFile
if @res 0
begin
return 1
end
end
else
begin
exec @res = sp_OASetProperty @obj, 'Body', @Body
if @res 0
begin
return 1
end
end
exec @res = sp_OAMethod @obj, 'Send', @ires out, @SMTPServer
if @res 0
begin
return 1
end
if @ires 1
begin
return 1
end
return 0
Sekarang Anda bisa meng-execute script di atas dan stored procedure akan otomatis tersimpan pada
database yang aktif saat Anda mengeksekusi script. Mari kita coba stored procedure yang baru kita
buat ini. Penulis akan memberi contoh untuk mengirim e-mail ke alamat [email protected]
dengan file attachment 'c:�data�mylove.gif' dengan menggunakan SMTP Server milik AriTech
Development Indonesia (mail.aritechdev.com). Berikut ini adalah contohnya:
declare @hasil
exec @hasil = sp_SendMail_JMail
@RecAddr='[email protected]', @Subject='Kepada Esa Ivani',
@SMTPServer='mail.aritechdev.com',@Body='Hello .... ini data file yang
diminta...',@Attachment='c:�data�mylove.gif'
Pada contoh diatas variabel @hasil akan menampung hasil kembalian dari eksekusi
sp_SendMail_JMail. Nilai variabel @hasil akan bernilai 1 apabila gagal dan 0 apabila sukses
mengirimkan e-mail.
tolong bantu rate :rate5 dan jika berkenan :melonndan:
semoga membantu dan selamat belajar :D
</div>
procedure. Stored procedure adalah sekumpulan perintah-perintah SQL yang tersimpan dalam SQL
Server. Procedure ini sudah dalam keadaan ter-compile di server dan siap dipanggil apabila
diperlukan. Untuk lebih jelasnya silakan Anda baca buku-buku SQL Server khususnya yang
menyangkut masalah stored procedure. OK, kita kembali lagi ke masalah utama. Stored procedure
yang akan kita buat kali ini adalah stored procedure untuk mengirimkan e-mail. Di dalam SQL
Server sendiri sebenarnya sudah terdapat stored procedure seperti ini yaitu xp_sendmail, hanya saja
lumayan ribet untuk men-setting feature SQL Mail di SQL Server ini. Ribetnya gimana sih? Ya
pokoknya ribet deh, sampai-sampai penulis saja masih bingung sampe detik ini.
Kita tinggalkan saja feature SQL Mail ini dan kita akan membuat stored procedure yang lain yaitu
dengan memanfaatkan object e-mail w3 JMail dari Dimac. JMail adalah suatu komponen COM
berupa file dll yang fungsinya dapat untuk mengirim atau menerima e-mail. Selain itu pada
komponen ini terdapat pula fasilitas enkripsi dan mail merge. Dan yang paling penting komponen
w3 JMail ini GRATIS, Anda bisa dapatkan di website-nya www.dimac.net (http://www.dimac.net). Penulis menggunakan
w3 JMail versi 4.3. Gimana sih kok SQL Server bisa mengakses komponen JMail untuk mengirim
file? Terimakasih kepada SQL Server yang sudah menyediakan beberapa built-in stored procedure
OLE automation. Stored procedure OLE automation di SQL Server adalah:
� sp_OACreate, untuk membuat instance dari suatu COM object
� sp_OADestroy, untuk menghapus instance dari suatu COM object
� sp_OASetProperty, untuk men-set properti dari suatu COM object dengan nilai yang baru
� sp_OAGetProperty, untuk mendapatkan nilai properti dari suatu COM object
� sp_OAMethod, untuk memanggil method dari suatu COM object
� sp_OAStop, wah kalo ini mah gue belon ngerti terjemahannya :) silakan baca help-nya
� sp_OAGetErrorInfo, untuk mendapatkan informasi error dari OLE automation
Penulis tidak akan membahas stored procedure OLE automation SQL Server pada tulisan ini. Hal
itu mungkin akan penulis sajikan pada kesempatan yang lain. Script stored procedure di bawah
penulis beri nama sp_SendMail_JMail dan memiliki sembilan parameter. Parameter utama yang
harus ada yaitu @RecAddr (alamat e-mail tujuan) dan @SMTPServer (alamat SMTP server). Jadi
untuk bisa mengirimkan e-mail Anda cukup mengisi dua parameter di atas, tentu saja dengan
parameter yang lain akan diisi dengan nilai default masing-masing. Untuk parameter lain penulis
kira sudah cukup jelas bagi pembaca (yang sudah mengerti stored procedure) tetapi mungkin masih
ada yang bingung antara parameter @Body dan @BodyFromFile. Dua parameter tersebut memiliki
fungsi yang sama hanya saja cara pengambilan datanya yang berbeda. Jika Anda ingin menulis
langsung body e-mail Anda pada saat menjalankan stored procedure maka Anda bisa menggunakan
parameter @Body, contohnya @Body='Ini body e-mail saya...'. Tetapi jika Anda ingin mengisi
body e-mail dengan text dari suatu text file di komputer Anda maka Anda bisa menggunakan
parameter @BodyFromFile, contohnya @BodyFromFile='c:�bodymail.txt'.
OK, sekarang silakan saja Anda ketik script stored di bawah ini pada SQL Query Analyzer atau
dapat juga melalui SQL Server Enterprise Manager.
Spoiler for sintax:
create procedure sp_SendMail_JMail
@FromAddr varchar(255) = '[email protected]', -- from e-mail
@FromName varchar(255) = 'SQL Server featuring JMail', -- from name
@RecAddr varchar(255), -- recipient address
@RecName varchar(255) = '', -- recipient name
@Attachment varchar(1000) = '', -- attach file path
@Subject varchar(255) = '', -- e-mail subject
@Body varchar(8000) = '', -- e-mail body
@BodyFromFile varchar(1000) = '', -- e-mail body that comes from file
@SMTPServer varchar(255)
as
declare @obj int
declare @res int
declare @ires int
declare @ires2 varchar(255)
exec @res = sp_OACreate 'jmail.Message', @obj out
if @res 0
begin
return 1
end
exec @res = sp_OAMethod @obj, 'AddHeader', NULL, 'App-Sender','SQL Server
featuring JMail (stored procedure)'
if @res 0
return 1
end
exec @res = sp_OASetProperty @obj, 'From', @FromAddr
if @res 0
begin
return 1
end
exec @res = sp_OASetProperty @obj, 'FromName', @FromName
if @res 0
begin
return 1
end
if @RecName = ''
begin
exec @res = sp_OAMethod @obj, 'AddRecipient', NULL, @RecAddr
if @res 0
begin
return 1
end
end
else
begin
exec @res = sp_OAMethod @obj, 'AddRecipient', NULL, @RecAddr,@RecName
if @res 0
begin
return 1
end
end
if @Attachment ''
begin
exec @res = sp_OAMethod @obj, 'AddAttachment', @ires2 out, @Attachment
if @res 0
begin
return 1
end
end
exec @res = sp_OASetProperty @obj, 'Subject', @Subject
if @res 0
begin
return 1
end
if @BodyFromFile ''
begin
exec @res = sp_OAMethod @obj, 'AppendBodyFromFile', NULL, @BodyFromFile
if @res 0
begin
return 1
end
end
else
begin
exec @res = sp_OASetProperty @obj, 'Body', @Body
if @res 0
begin
return 1
end
end
exec @res = sp_OAMethod @obj, 'Send', @ires out, @SMTPServer
if @res 0
begin
return 1
end
if @ires 1
begin
return 1
end
return 0
Sekarang Anda bisa meng-execute script di atas dan stored procedure akan otomatis tersimpan pada
database yang aktif saat Anda mengeksekusi script. Mari kita coba stored procedure yang baru kita
buat ini. Penulis akan memberi contoh untuk mengirim e-mail ke alamat [email protected]
dengan file attachment 'c:�data�mylove.gif' dengan menggunakan SMTP Server milik AriTech
Development Indonesia (mail.aritechdev.com). Berikut ini adalah contohnya:
declare @hasil
exec @hasil = sp_SendMail_JMail
@RecAddr='[email protected]', @Subject='Kepada Esa Ivani',
@SMTPServer='mail.aritechdev.com',@Body='Hello .... ini data file yang
diminta...',@Attachment='c:�data�mylove.gif'
Pada contoh diatas variabel @hasil akan menampung hasil kembalian dari eksekusi
sp_SendMail_JMail. Nilai variabel @hasil akan bernilai 1 apabila gagal dan 0 apabila sukses
mengirimkan e-mail.
tolong bantu rate :rate5 dan jika berkenan :melonndan:
semoga membantu dan selamat belajar :D
</div>