Sunday, August 29, 2010

PHP සහ E mail Attachments

8 comments

පහුගිය දවසක පොඩි වැඩක් කරගන යද්දි php වලින් ලෝකල් හොස්ට් තුල ඉඳලම ඇටෑච්මන්ට් එකක් සමඟ ඊ මේල් යැවීමේ අවශ්‍යතාවයක් ඇතිවුනා. අන්තර්ජාලයේ මේ සම්බන්ධයෙන් තොරතුරු හොයාගන යද්දි ආධුනිකයන්ට පහසුවෙන් තේරුම් ගැනීමට පුලුවන් වෙන විදිහට නිරවද්‍යම ලිපියක් හොයාගන්න ටිකක් අමාරු වුන නිසත් ,මට අවශ්‍ය වෙච්චි දේ ඒ විදිහටම කරගන්න ටිකක් දඟලන්න වුන නිසාත් කාට හරි ප්‍රයෝජනවත් වේවි කියල හිතුන නිසාත් තමයි මේ සටහන ලියවෙන්නේ.


මට අවශ්‍ය වුනේ ඉමේජ ඇමිණුමක්ද සමඟින් පනිවිඩයක්ද සහිතව ඊ මේලයක් යැවීමටයි. සාමාන්‍යයෙන් මම php එක්ක කටයුතු කරන්න ඕන වුනාම භාවිතා කරන්නේ Wamp server එකයි.මේ කටයුත්ත කරගන යද්දි මට විකල්පයන් දෙකක් තිබුනා




  1. පරිගණකයේ මේල් සර්වරයක් ස්ථාපනය කොට ඒ හරහා මේල් යැවීම



  2. බාහිර SMTP සර්වරයක් සමඟ සම්බන්ධතාවයක් අරඹා ඒ හරහා මේල් යැවීම.

මීට කලින් මම php හි mail() function එක භාවිතා කරලා මගේ වෙබ් අඩවියක් පිහිටවා තිබුන සර්වරයකින් මේල් යවලා තිබුනත් ලෝකල් හොස්ට්ගේ ඉඳලා මේ කටයුත්ත කරලා තිබුනේ නැහැ.මේ සම්බන්ධයෙන් අත්දැකීම් නැති නිසා මම පිළිවෙලින් ක්‍රම දෙක ගැනම බලන්න හිතුවා. ඒ එකක් අසාර්ථක වුනොත් අනිකට යන පදනමින්. wamp හි inbuilt මේල් සර්වරයක් නොමැති නිසා මම මේල් සර්වරයක් අන්තර්ජාලයෙන් භාගත කොට පරිගණකයේ ස්ථාපනය කරගත්තා.අනතුරුව php හි ඇති mail() function එක භාවිතා කොට පණිවිඩය යැවීමට උත්සාහ කලා.අසාර්ථකයි...පණිවිඩය ලෝකල් හොස්ට්ගෙන් පිට වුනත් ලබන්නාගේ ඊ මේල් ලිපිනයට අදාල, ඒ ලිපිනය දරා සිටින මේල් සර්වරය පණිවිඩය භාර ගැනීම ප්‍රතික්ෂේප කිරීම අසාර්ථකත්වයට හේතුවයි. මං හිතන්නේ පණිවිඩය එවන අපේ ලෝකල් හොස්ට්ගේ ඩොමේනය විශ්වාසනීය නොමැති වීම මෙයට හේතුව වෙන්න ඇති. මොකද මම භාවිතා කරන්නේ static IP ලිපිනයක් සහිත සම්බන්ධතාවයක් නොවෙයිනේ.
ඒ නිසා වැඩිය ඒ සම්බන්ධයෙන් කරදර වෙන්නේ නැතිව මම දෙවන ක්‍රමට බැස්සා.ඒත් එක්කම php හි mail() function එක වෙනුවට වැඩි පහසුකම් සහිත phpMailer librabry එක භාවිතයට ගත්තා.
දැං විශ්වාසනීය ඩොමේනයක් සහිත භාහිර SMTP සරවරයක් ඕනෑ..( ඒ විතරක් නෙවෙයි ලොග් වෙන්න username ,passwords එහෙමත් ඕනෑ. සමහර SMTP සර්වර ඕනකෙනෙකුට සම්බන්ධවෙලා මේල් යවන්න දුන්නත් ඒ දෙන්නේ සීමාවන් සහිතවයි. බොහොමයක් ඒවා ඇටෑච්මන්ට් යවන්න දෙන්නේ නැහැ.ඒ වගේම ඒ සර්වරයේ ඩොමේනයෙන් පිටට මේල් යවන්න දෙන්නෙත් නැහැ. මේ සීමාවන් තුල මගේ වැඩේ කරන්න බැහැ.) . මම භාවිතා කලේ මගේ ජීමේල් ගිණුමක්. එවිට යවන්නාගේ ලිපිනය වශයෙන් පෙන්වන්නේ ඒ ගිණුමට අදාල ජීමේල් ලිපිනයයි. සිදුවන්නේ ලෝකල් හොස්ට් තුලින් නිකුත් වන ඊ මේල් පණිවිඩය අදාල යූසර්නේම් පාස්වර්ඩ් භාවිතයෙන් ජීමේල් හි මේල් සර්වරය හරහා අදාල ලබන්නා වෙත නිකුත් කිරීමයි. ලබන්නාගේ මේල් සර්වරය එය හඳුනාගන්නේ ජීමේල් ගිණුමකින් නිකුත් වූ පණිවිඩයක් ලෙස නිසා ගැටලුවක් නැතිව වැඩේ කෙරෙනවා.

PhpMailer ගොනුව භාගත කල මා එය රූට් ඩිරෙක්ටරියේ (wamp හි නම් www,xampp හි නම් htdocs ....etc)lib යන ඩිරෙක්ටරිය තුලට දමාගත්තා. පහළින් දැක්වෙන්නේ එය භාවිතා කර ඊ මේල් යැවීමට අදාල php කේතයන්.

Config.php ගොනුව


$site['from_name'] = 'tirthayathrikaya';// යවන්නාගේ නම
$site['from_email'] = 'xxxx@gmail.com';// යවන්නාගේ ඊ මේල් ලිපිනය
$site['smtp_mode'] = 'enabled';
$site['smtp_host'] = "ssl://smtp.gmail.com"; //බාහිර SMTP සර්වරය
$site['smtp_port'] = "465"; //පෝර්ට් අංකය
$site['smtp_username'] = "xxxxx@gmail.com"; //Username
$site['smtp_password'] ="xxxxxxxxxxxx"; // මුරපදය


මෙම ගොනුව භාවිතා කර ඇත්තේ සියලුම මූලික සැකසුම් තබා ගැනීමටයි.
$site['smtp_mode'] = 'xxxxxxxxx'; enabled හෝ disabled යන්න xxxxxxx වෙනුවට ආදේශ කරන්න පුලුවන්. Disabled කිරීමෙන් ලෝකල් හොස්ට් තුල මේල් සර්වරයක් ඇත්නම් එය හරහා ඊ මේල් පණිවිඩය යැවීම සිදුකරනවා.

mainClass.php ගොනුව


require_once('lib/PHPMailer/class.phpmailer.php');
class SendMailer extends PHPMailer
{
var $priority = 3; //මෙමගින් දැක්වෙන්නේ ඊ මේලයේ ප්‍රමුකතා අගයයි එය 1=high 3=Normal හෝ 5= lowවිය හැකියි.
var $to_name;
var $to_email;
var $From = null;
var $FromName = null;
var $Sender = null;
function SendMailer()
{
global $site;
if($site['smtp_mode'] == 'enabled')
{
$this->Host = $site['smtp_host'];
$this->Port = $site['smtp_port'];
if($site['smtp_username'] != '')
{
$this->SMTPAuth = true;
$this->Username = $site['smtp_username'];
$this->Password = $site['smtp_password'];
}
$this->Mailer = "smtp";
}
if(!$this->From)
{
$this->From = $site['from_email'];
}
if(!$this->FromName)
{
$this-> FromName = $site['from_name'];
}
if(!$this->Sender)
{
$this->Sender = $site['from_email'];
}
$this->Priority = $this->priority;
}
}

mail.php ගොනුව
මෙම ගොනුව ධාවනය කිරීමෙන් අදාල කාර්යය සිදුවෙනවා.



require_once('config.php');
require_once('MailClass.php');

$mailer = new SendMailer();
// මේල් පණිවිඩයේ subject
$mailer->Subject = 'hi there';
// Body
$mailer->Body = 'It is working';
// යවන්නාගේ ලිපිනය
$mailer->AddAddress('තීර්ථයාත්‍රකයා@gmail.com', 'තීර්ථ යාත්‍රිකයා');
$mailer->AddAttachment('images/1.jpg', '1.jpg'); //ඇමිණු ඉමේජය. මේ ඉමේජය පිහිටා ඇත්තේ රූට් ඩිරෙක්ටරියේ images යන ඩිරෙක්ටරිය තුලයි. 1.jpg යනු පිළිවෙලින් ඉමේජයේ නම සහ extension එකයි.
if(!$mailer->send())
{
echo 'There was a problem sending this mail!';
}
else
{
echo 'Mail sent!';
}
$mailer->ClearAddresses();
$mailer->ClearAttachments();


සියල්ල හරි. අනතුරුව මම mail.php ගොනුව වෙබ් බ්‍රව්සරය හරහා ධාවනය කර බැලුවා...එවිට ලැබුනේ error පනිවිඩයක් එයින් කියවුනේ SMTP සර්වරය හා සම්බන්ධතාවය ඇතිකරගැනීමට නොහැකි බවයි.කල්පනා කරද්දී කොහේදී හෝ දුටු , කියවා තිබුන OpenSSL.dll ගැන මතකයක් අවදිවුනා.
php.ini ගොනුව පිරික්සා කමෙන්ට් වී තිබුන
;extension=php_openssl.dll පේලියේ කමෙන්ට් ඉවත්කලා (extension=php_openssl.dll).අනතුරුව mail.php ගොනුව නැවත ධාවනය කිරීමේදී අවශ්‍යතා සියල්ල සම්පූර්ණ කරමින් ඊ මේල් පණිවිඩය යැවීමට හැකිවුනා.
ඔබේ මේ සම්බන්ධ අත්දැකීම් සහ දැනුවත්කිරීම්,නිවැරදි කිරීම් (if any) ඉතාමත් අගය කොට සලකනවා.

resources:
phpmailer භාගත කිරීමට පිවිසෙන්න  http://phpmailer.sourceforge.net/

8 comments:

  1. මේ හරහා prank mail යවන්න පුලුවන්ද..?

    ReplyDelete
  2. prank mail යවන්න මම භාවිතා කරපු ක්‍රමයෙන් බැහැ(මම හිතන හැටියට). හේතුව අපේ account එකේ විස්තර හරහා සම්බන්ධතාවය ඇතිකරගන්න නිසා මේල් සර්වරය අපි config ගොනුවේ මොන ඇඩ්‍රස් එක දැම්මත් හරි එක නැවත දාන නිසා.
    prank mail යවන්න එක්කෝ අපි මේල් සර්වරයක් රන් කරන්න ඕනෑ.ඒත් එතකොට අර ප්‍රතික්ෂේප කිරීමේ ප්‍රශ්නය මතු වෙන්න පුලුවනි.ඒක විසඳගන්න පුලුවන් නම් වැඩේ හරි.එහෙම නැත්තම් remote SMTP සර්වරයකට telnet හරහා ලොග්වෙලා SMTP commands දීල වැඩේ කරන්න පුලුවන්.ඒත් ගොඩක් වෙලාවට සීමාවන් තියනවා. ඔය කොහොම යැව්වත් හෙඩර් එක බලල හොරේ අල්ලන්න පුලුවන් මම හිතන හැටියට නම්. හරියටම බලල කියන්නම් ඒක.

    ReplyDelete
  3. බොහොමත් ස්තුතියි සහෝදරයා.

    ReplyDelete
  4. ප්‍රතිචාරයට බොහෝම ස්තුතියි

    ReplyDelete
  5. Thanks machan mail server1 karaganna code teca hoya ganna puluwan unata. mama reba

    ReplyDelete
  6. @ ඇනෝ..
    ඕව නම් මොනවද මචන්.උඹල ප්‍රෙජෙක්ට් එක ගොඩදා ගත්තනේ.. ඒ ඇති..

    ReplyDelete

අදහස්, උදහස්....

.