Monday, February 22, 2010

Oracle වලින් ඊ-මේල් යවමු

දන්නවනේ Oracle ගැන. තද database එකක්නේ. ඕකෙ code කරන්න තියෙනවා pl-sql කියල languageඑකක්. නිකන් Pascal වගේ. සරල scene එකක්.
ඉතින් මන් අද කියන්න යන්නේ pl-sql use කරලා ඊ-මේල් එකක් යවන හැටි.
Oracle දෙයියො ඔකට පැකේජ් එකක් (UTL_SMTP) ලියලම දීල තියනවා. මන් කියන්න යන්නේ අන්න ඒක ගැන. හැබැයි SMTP සර්වර් එකක් හරහා තමා යවන්නේ.

PROCEDURE Send_Email_(email_addr_ IN VARCHAR2, header_text_ IN VARCHAR2, body_text_ IN VARCHAR2) IS
rep_email_addr_ VARCHAR2(200);
c UTL_SMTP.CONNECTION;
email_ VARCHAR2(200);
PROCEDURE send_header(name IN VARCHAR2, header IN VARCHAR2) AS
BEGIN
UTL_SMTP.WRITE_DATA(c, name || ': ' || header || UTL_TCP.CRLF);
END;
BEGIN
email_ := email_addr_;
c := UTL_SMTP.OPEN_CONNECTION('AA.BB.CC.DD');
UTL_SMTP.HELO(c, 'AA.BB.CC.DD');
UTL_SMTP.MAIL(c, 'myemail@mydomain.com');
UTL_SMTP.RCPT(c, email_);
UTL_SMTP.OPEN_DATA(c);
send_header('From', '"Sender" myemail@mydomain.com');
send_header('To', email_);
send_header('Subject', header_text_);
UTL_SMTP.WRITE_DATA(c, UTL_TCP.CRLF || body_text_);
UTL_SMTP.CLOSE_DATA(c);
UTL_SMTP.QUIT(c);
COMMIT;


EXCEPTION
WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN
BEGIN
UTL_SMTP.QUIT(c);
EXCEPTION
WHEN UTL_SMTP.TRANSIENT_ERROR OR UTL_SMTP.PERMANENT_ERROR THEN
NULL;
END;
raise_application_error(-20000,
'Failed to send mail due to the following error: ' || sqlerrm);

END Send_Email_;


ඔන්න ඔච්චරයි කරන්න ඔනේ. ඔන්න ඔහොම procedure එකක් ලියාගත්ත්ම ඔනේ වෙලාවක එකට කතා කරන එක තමා කරන්න තියෙන්නේ.
මෙන්න මෙහෙම
Send_Email_(‘recepient@yourdomain.com’, ‘budu amma..mail ekak’, ‘onna man liuwamak ewwaaaaa…’);
වැඩේ පොඩ්ඩක් පැහැදිලි කරොත් මෙහෙමයි.
මන් ලියලා තියෙන්නේ ඔරකල් ප්රොසිජර් එකක්. එකට වේරියබල් විදිහට යවන්න ඔනේ කෙනාගේ ඊ-මේල් ලිපිනයයි, ලියුමේ සබ්ජෙට් එකයි, ලියුමේ අතුලේ තියෙන ඒවයි ගන්නවා.එක තමා උඩම පේලි දෙකෙන් වෙන්නේ. ඊට පස්සෙ මම වෙරියබල් ටික ලියාගන්නවා. c කියුවේ අපේ SMTP server එකට තියෙන connection එක.
Pl-sql වල procedure අතුලේ තව procedure ලියන්න පුලුවන්. ඉතින් එහෙම එකකුත් මම ලිව්වා වැඩේ ලේසි වෙන්න.
ඔක්කොමට කලින් කනෙක්ශන් එක හදාගන්න ඔනෙනේ. ඔන්න අපි එක කරනවා. සර්වර් එකේ (පොර) IP ඇඩ්රස් එක දීලා කනෙක්ශන් එක ඇරගන්න හදනවා.
ඇරගත්තා කියමුකො..ඊට පස්සේ අපි නිකන් හෙලෝ කියනවා පොර අපිත් එක්ක කතා කරන්න ලැස්තිද බලන්න. එහෙම කරන්නේ බැරිවෙලා හරි පොර අපිව ගනන් ගත්තේ නැත්නම් අපි කියවන්න පටන් ගත්තම අපිටමනේ නෝන්ඩිය.
හෙලෝ එකත් නොන්ඩි නැතුව ගියා කියන්නෙ පොර කතාවට ලැස්තී කියලා. ඉතින් හිටු කියලා කියවන්න තියෙන්නෙ. කියවන එක උනත් පිලිවෙලට කරන්න ඕනෙනේ. මුලින්ම මම කවුද කියනවා. මේල් කියලා යවන කෙනාගේ ඊ-මේල් එක දාල කරන්නේ ඒක. ඊට පස්සෙ කියනවා කාටද යවන්න ඔනේ කියලා.
දැන් තමා වල්පල් කතා කරලා ඉවර වෙලා වැඩට බහින්නේ. අපි OPEN_DATA කියලා ඇරගෙන SMTP හේඩර් ඉන්ෆොමේශන් ටික යවනවා.
ඊට පස්සේ යවන්න ඕනේ එකත් ලියනවා WRITE_DATA වලින්. අපේ වැඩේ දැන් ඉවරයි. ඉතින් තව කියවන්න දෙයක් නැනේ. කොනෙක්ශන් එක වහලා දානවා.
යට ලියලා තියෙන්නේ බැරි වෙලා හරි අපිට කොහෙන් හරි සද්දයක් දැම්මොත් මේක කරන්න බෑ කියලා අපි කරන දේවල්. හැමොටම එක හැන්දෙන් බෙදන්න බෑනේ. ඉතින් අපි එක එක එවට එක එක දේවල් තමා කරන්නේ. ;)
ඔන්න ඔච්චරයි වැඩේ.
කාට හරි කවදා හරි ප්රයොජනවත් වෙයි කියලා හිතනවා. මොනවා හරි බුල් සීන් එකක් උනොත් අහන්න.

5 comments:

  1. කවදහරි උත්සාහ කරලා තියෙනවද SMS යවන්න plsql වලින්.
    ඒකත් පුළුවන් ඔය විදියටම.

    poddi gameak denna tiyenne. try karannako ekat

    /බිඟුවා...!

    ReplyDelete
  2. ඹරකල් දත්ත ගොනුව ගැන ඉදිරියට ලියන්න. පී එල් එස් කියු එල් කියන්නේ මොකක්ද කියලා පොඩි විස්තරයකුත් ලියන්න.

    සුභ පැතුම්.

    ඔරකල් ලිපි පෙළක් ඔබෙන් බලාපොරොත්තු වෙමි

    ReplyDelete
  3. ඔව් පුළුවන් concept එක එකයින්නේ දෙකෙදීම.. වෙබ්සර්විස් එක්ක වැඩ කරන්න තව ගොඩක් පුලුවන්.. දැන් අලුත්ම එක තමයි Oracle packages web service විදියට එලියට දෙන එක..

    ReplyDelete
  4. @Pradeep: I'm really sorry, but I don't think I have enough time to do a proper oracle/ pl-sql tutorial. But there are lot more on internet. If you are having any difficulty I'm more than willing to help.

    ReplyDelete
  5. එල එල දිගටම ලියන්න ඔබට සදා ජයම වේවා

    ReplyDelete