چگونه از طریق کلاس PHPMailer فرم تماس با ما ایجاد کنیم؟ (روش2)

جهت ساخت یک فرم ارتباط با ما ساده به زبان PHP  ،ابتدا مانند شکل زیر یک فرم ساده تماس با ما به زبان HTML  که کد آن در زیر عکس آمده طراحی نمایید.

 

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>PHP Contact Form – Iranhost </title>
    <link rel="stylesheet" type="text/css" href="style.css" />
  </head>
  <body>
    <div id="contactForm">
    
      <h2>Contact me</h2>
    
      <form action="contact.php" method="post">
      
        <label>Name:</label>
        <input type="text" name="name" />
  
        <label>Email:</label>
        <input type="text" name="email" />
        
        <label>Message:</label><br />
        <textarea name="message" rows="20" cols="20"></textarea>
        
        <input type="submit" class="submit" name="submit" value="Send message" />
        
      </form>
    </div>
  </body>
 </html> 

سپس فرم ساخته شده را با پسوند php    ذخیره نمایید ( دقت نمایید که وقتی صفحه ارتباط با ما ، با این پسوند ذخیره میشود میتواند کد هایphp    را پردازش نماید)

در طراحی فرم ارتباط با ما مذکور ، از متد POST    کردن متغییر ها بین فرم HTML  و زبان برنامه نویسی PHP  استفاده شده است و بدین ترتیب میتوان مقدار فیلد ها را توسط   $_POST['name_of_field']  که name_of_field  در اینجا نام فیلد مذکور میباشد ، بدست آورد و از تابع empty  در زبان php  جهت خالی نبودن مقدار وارد شده در فیلد مورد نظر اطمینان حاصل نمود.

if (!empty($_POST['email'])) {
  $email = $_POST['email'];
  if (!preg_match("/^[_a-z0-9]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $email)){ 
  $error .= "The e-mail address you entered is not valid. <br/>";
  }
  } else {
  $error .= "You didn't type in an e-mail address. <br />";
 }

 

حال پس از بررسی انجام شده با تابع empty  ، میتوان مراحل ارسال توسط ایمیل را طی نمود . باید توجه داشت بر روی سرور های ویندوز ایران هاست باید از توابع و کلاس های php    که امکان تعریف پروتکل SMTP  را دارا هستند بهره برد لذا تمیتوان از تابع mail()  زبان PHP  برای این منظور استفاده کرد .

میتوان جهت ارسال مقادیر فوق از کلاس phpMailer  که یک کلاس کامل جهت ارسال ایمیل نوشته شده به زبان php  است ، و امکان تعریف پروتکل ذکر شده را داراست استفاده نمود. برای این منظور ابتدا فایل های مربوط به کلاس ذکر شده به همراه تمامی فایل های پروژه را از  این لینک دریافت کرده و سپس در کنار فایل contact.php  خود قرار دهید سپس جهت استفاده از توابع کلاس فوق در فایل contact.php  به صورت زیر Scope  مربوطه را تعریف می نماییم.

require_once('class.phpmailer.php');

سپس میتوانید از توابع  ()IsSMTP  جهت استفاده از SMTP  و تنظیمات مربوط به آن و از تابع send()  جهت ارسال ایمیل مانند کد زیر استفاده نمایید.

$mail = new PHPMailer(true);

$mail->IsSMTP();

try {      

$mail->Host       = "mail.yourdomain.com";

$mail->SMTPAuth   = true;                  

$mail->Username   = "your mail account"; 

$mail->Password   = "your mail account password";        

$mail->AddReplyTo('your mail', 'Your Name'); 

$mail->AddAddress('your mail', 'User Name'); 

$mail->SetFrom($email, $Name); 

 $mail->Subject = 'Contact US';

$mail->CharSet = 'UTF-8'; 

$mail->ContentType = 'text/html'; 

$mail->MsgHTML($message); 

$mail->Send();

 

توجه داشته باشید در کد PHP فوق بایستی کدهای لازم را بدرستی جای گذاری کنید . بجای yourdomain.com نام دامنه خود را قرار دهید ، همچنین به جای yourmail@yourdomain.com نام ایمیلی که قرار است ایمیل ارتباط با ما برای آن ارسال شود را قرار دهید  و نیز لازم به ذکر است متغییر های  $email ,$Name,$message ، همان متغییر های تعریف شده برای فیلد های ما هستند که توسط متد توضیح داده شده در ابتدای این مقاله مقدار دهی شده اند و به عنوان ورودی توابع کلاس phpmailer  در کد بالا ارسال شده اند. 

با توجه به سیاست های اتخاذ شده در  میل سرورهای ایران هاست می بایست در قسمت SetFrom حتما اکانتی باشد که توسط آن Authenticate صورت گرفته است . 

 

جهت جلوگیری از دریافت ایمیل اسپم  توسط فرم ایجاد شده ، میتوانید از تکنولوژی کدهای امنیتی استفاده نمایید. برای این منظور میتوان از کد captcha  موجود در فایلی به همین (captcha.php  ) استفاده نمود و پس از تعریف    session مورد نظر در ابتدای کد ، آن را به فرم اضافه نمود.

<label><img src="captcha.php"></label>
 <input type="text" name="code"> <br /> 

باید توجه داشت captcha.php  به صورت یک منبع تصویر تعریف شده است.(در حقیقت captcha.php  یک خروجی تصویر با پسوند png  برای ما ایجاد خواهد کرد).

در آخر اگر مایل به اضافه کردن فیلد خاصی به فرم خود هستید میتوانید با اضافه نمودن یک متغییر (  ($VariableName  همانند زیر و چک کردن فیلد مورد نظر توسط تابع empty  اقدام به ارسال آن نمایید.

 

<input type="text" name="phone" value="<?php echo $_POST['phone']; ?>" />

 

 

 

 

*لازم به ذکر است  در استفاده از کلاس فوق از access control  ها ی public  و private  استفاده شده است و به نوعی از قابلیت های PHP  نسخه   5    به حساب می آید ، پس نسخه مربوط به php    سرویس میزبانی خود را باید حتما بر روی PHP 5  تنظیم نمایید در غیر اینصورت با پیام خطای زیر مواجه خواهید شد:
 

parse error syntax error unexpected t_string expecting t_old_function or t_function or t_var or

 

  • در نظر داشته باشید در سرویس های لینوکس ایران هاست امکان استفاده از پورت 25 برای ارسال ایمیل با کدنویسی وجود نداشته و می بایست الزاما از پورت 587 در حالت No Encryption و یا پورت های 465 و 587 تحت SSL یا TLS استفاده نمایید.
  • در صورت استفاده از Encryption می بایست به صورت پیش فرض از گواهی SSL معتبر (Valid) استفاده نمایید تا امکان برقراری ارتباط با میل سرور داشته باشید. به صورت پیش فرض در سرورهای ایران هاست از گواهی SSL از نوع Self-Signed که Invalid می باشد استفاده می گردد.
  • در صورتیکه تمایل به استفاده از گواهی SSL که Invalid است را دارید، می بایست در کدنویسی تابع ارسال ایمیل خود حالت Peer_Verification را غیر فعال نمایید تا Validity یا اعتبار گواهی بررسی نگردد.