İnsanoğlu hala tüm bilgisayarların en alışılmadık olanıdır. Jhon F.Kennedy
12 Kasım 2016 Cumartesi
Veritabanından E-Mail Gönderme
PostgreSQL Veritabanı Yönetim Sisteminden E-Mail Gönderme: Bu yazımda postgresql üzerinde yazılmış bir fonksiyon aracılığıyla kullanıcılara nasıl mail gönderebileceğimizi anlatacağım. Mail göndermede kullandığım fonksiyon pl/tcl dilinde kodlandığı için ilk olarak postgresql'in tcl dil desteği eklentisini yüklememiz gerekecektir.
- PostgreSQL veritabanı yönetim sistemi birden fazla dil desteği sunmaktadır, desteklenen diller PL adı altında pgAdmin arayüzünden, Databases - <kullandığımız veritabanının adı> - Extensions - New Extension.. sekmelerini takip ettiğimizde karşımıza çıkan eklentiler arasında yer alır. PostgreSQL in sql dili için kullandığı default dil 'plpgsql' dir. Extensions olarak karşımıza çıkabilecek desteklenen diğer diller ise, plperl,plpython,pltcl dilleri procedural diller olarak geçmektedir. Saydığım bu dillerin haricinde postgresql xml,java,php yazılım dillerini de procedural olarak destekleyebilmektedir. Procedural dememizdeki kasıt, bu yazılım dillerini kullanarak pgAdmin konsolunda fonksiyon veya procedure yazarak sql ifadelerinde olduğu gibi yazdığımız fonksiyon veya prosedürleri select ile çağırarak istediğimiz yerde kullanabileceğiz.
- Aşağıdaki mail göndermede kullandığım fonksiyonu çalıştırabilmemiz için postgresql'in pl/tcl desteğini sağlamamız gerekir. PostgreSQL'de procedural dil desteğinin nasıl sağlandığına dair daha fazla bilgi edinmek isteyen konuyu buradan takip edebilir.
CREATE OR REPLACE FUNCTION send_pgmail( text, text, text, text)
RETURNS integer AS
$BODY$
set mailfrom $1
set mailto $2
set mailsubject $3
set mailmessage $4
set myHost "<sunucu adresi>" -- buraya maili hangi mal server üzerinden gönderecekseniz o mail server'in host adresini yazmanız gerekmektedir.
set myPort 25 -- buraya kullandığınız port numarasını yazmanız gerekir, yazmanız taktirde sistem default olarak 25 portu üzerinden mail göndermeyi deneyecektir.
set mySock [socket $myHost $myPort]
set toemailaddress_start [string first "<" $mailto]
if {$toemailaddress_start != -1} {
set toemailaddress_finish [string first ">" $mailto]
set toemailaddress_start [expr $toemailaddress_start + 1]
set toemailaddress_finish [expr $toemailaddress_finish - 1]
set toemailaddress [string range $mailto $toemailaddress_start $toemailaddress_finish]
} else {
set toemailaddress $mailto
}
set fromemailaddress_start [string first "<" $mailfrom]
if {$fromemailaddress_start != -1} {
set fromemailaddress_finish [string first ">" $mailfrom]
set fromemailaddress_start [expr $fromemailaddress_start + 1]
set fromemailaddress_finish [expr $fromemailaddress_finish - 1]
set fromemailaddress [string range $mailfrom $fromemailaddress_start $fromemailaddress_finish]
} else {
set fromemailaddress $mailfrom
}
fileevent $mySock writable [list svcHandler $mySock]
fconfigure $mySock -buffering line
puts $mySock "HELO <veritabanı adresi>" -- kullandığınız veritabanı hangi makinada yüklü ise o makinanın veritabanı sunucu adresini buraya yazmanız gerekmektedir.
gets $mySock name
puts $mySock "MAIL FROM: $fromemailaddress"
gets $mySock name
puts $mySock "RCPT TO: $toemailaddress"
gets $mySock name
puts $mySock "DATA"
gets $mySock name
puts $mySock "From: $mailfrom"
puts $mySock "To: $mailto"
puts $mySock "Subject: $mailsubject"
puts $mySock "MIME-Version: 1.0"
puts $mySock "Content-type: text/plain; charset=UTF-8"
puts $mySock "Content-Transfer-Encoding: 8bit"
puts $mySock ""
puts $mySock "$mailmessage"
puts $mySock ""
puts $mySock "."
gets $mySock name
puts $mySock "QUIT"
gets $mySock name
close $mySock
return 1$BODY$
LANGUAGE pltclu VOLATILE
Fonksiyonun SQL Editörde Kullanımı:
select send_pgmail('gonderen@mail.com','alici@mail.com','mail konusu','mail icerik');
Kaydol:
Kayıt Yorumları (Atom)
Hiç yorum yok:
Yorum Gönder