article

ارسال ایمیل با PHP و کلاس phpmailer

php-mail-class

ارسال ایمیل از طریق برنامه های سمت سرور و از جمله php، یکی از رایج ترین مباحث کاربردی در نوع خود است که دیر یا زود برنامه نویس زبان php یا لااقل علاقمند استفاده از آن را درگیر خود می کند، اگرچه php به طور پیش فرض توابعی برای ارسال ایمیل در مفسر خود گنجانده است، اما گستره استفاده از این امکان و نیازهای کاربران به حدی است که نمی توان تنها بر آن متکی بود، از طرفی بحث ارسال ایمیل با توجه به محدودیت ها و قابلیت های سرورهای مختلف، گاهی پتانسیل تبدیل شدن به یک مشکل به ظاهر پیچیده را دارد و این چیزی است که بعضا فکر و ذهن برخی از کاربران را مشغول خود می کند، به همین خاطر در این آموزش قصد داریم در حد امکان بپردازیم به نحوه ارسال ایمیل با php و کلاس phpmailer، با این امید که مفید واقع شود.

ارسال ایمیل در php با تابع mail


برای ارسال ایمیل در php روش های مختلفی وجود دارد، ساده ترین راه،  ارسال ایمیل با استفاده از تابع درونی و از پیش تعریف شده ()mail و SMTP بدون بررسی نام کاربری و رمز عبور (authentication) است، معمولا، کافی است این تابع را با چند آرگومان فراخوانی کنید تا ایمیل شما ارسال شود، به طور مثال:
<?php
//دریافت کننده ایمیل
$to = "username@example.com";
//موضوع ایمیل
$subject = "ایمیل ساده";
//متن پیام
$body = "سلام، \n\n این ایمیل جهت تست ارسال شده است!";
//سربرگ های اضافه
$headers = "From: yourname@example.com";
//فراخوانی تابع و ارسال ایمیل
if (mail($to, $subject, $body, $headers)) {
    echo("<p>ایمیل شما با موفقیت ارسال شد</p>");
    }
else {
    echo("<p>خطا در ارسال ایمیل! تنظیمات سرور شما از این امکان پشتیبانی نمی کند</p>");
    }
?>
توضیح:
- تابع mail به صورت از پیش تعریف شده در php وجود دارد و تنها کافی است آن را با تکمیل پارامترها، فراخوانی کنیم.
- کارکرد صحیح این تابع، تا حدود زیادی بستگی به تنظیم درست موارد مورد نیاز آن در فایل php.ini دارد (از جمله smtp_port ،SMTP ،sendmail_from در سرورهای ویندوز و sendmail_path در سرورهای لینوکس)، در سرورهای اشتراکی، معمولا دسترسی به فایل اصلی php.ini امکان پذیر نیست، بنابراین اگر نتوانید با تابع mail ایمیل ارسال کنید، به احتمال زیاد تنظیمات این فایل به درستی انجام نشده است یا سرور هاست شما، قابلیت ارسال ایمیل را محدود کرده است که باید با پشتیبانی خود در این مورد تماس بگیرید.
- همانطور که ملاحظه می کنید، این تابع سه پارامتر اصلی و چند پارامتر فرعی را می تواند در هنگام ارسال ایمیل پوشش دهد، پارامترهای اصلی آدرس ایمیل دریافت کننده، موضوع و متن پیام است، پارامترهای اضافی به صورت سربرگ ها قابل استفاده هستند که به طور مثال می توانند به صورت زیر باشند:
<?php
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'X-Mailer: php' . "\r\n";
$headers .= 'Reply-To: username@example.com' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'Cc: Admin@example.com' . "\r\n";
$headers .= 'Bcc: Other@example.com' . "\r\n";
?>
- علامت r\n\ در کدهای بالا برای ایجاد یک خط جدید استفاده می شوند.
- MIME یک استاندارد اینترنتی برای ارسال و دریافت ایمیل است (Multipurpose Internet Mail Extensions)، همچنین است SMTP که مخفف (Simple Mail Transfer Protocol) است.

ارسال ایمیل به صورت html با تابع mail


تابع mail علاوه بر ارسال ایمیل به صورت متن ساده یا plain text برای ارسال متون به صورت صفحات html نیز قابل استفاده است، بدین منظور دو کار را باید در هنگام ارسال ایمیل انجام دهیم:
1- متن پیام ما باید به صورت یک کد html باشد، درست شبیه صفحات ساده وب که به صورت html هستند.
2- در قسمت سربرگ ها که در بالا عنوان شد، سربرگ زیر را برای پشتیبانی از زبان فارسی، به کد خود اضافه کنیم:
<?php
$headers = 'Content-type: text/html; charset=utf-8' . "\r\n";
?>
به طور مثال:
<?php
//دریافت کننده ایمیل
$to = "username@example.com";
//موضوع
$subject = "ارسال ایمیل به صورت html";
//متن پیام به صورت html
$body = "<html>
<body>
سلام، \n\n این ایمیل جهت<b> تست </b>ارسال شده است!
</html>
</body>"
;
//سربرگ ها
$headers = "From: yourname@example.com \r\n";
$headers .= "Content-type: text/html; charset=utf-8 \r\n";
//ارسال ایمیل
if (mail($to, $subject, $body, $headers)) {
    echo("<p>ایمیل شما با موفقیت ارسال شد</p>");
    }
else {
    echo("<p>خطا در ارسال ایمیل! تنظیمات سرور شما از این امکان پشتیبانی نمی کند</p>");
    }
?>
البته ارسال سربرگ های اضافی همیشه هم ضروری نیست، برخی از سرویس های ایمیل به طور پیش فرض از یونیکد utf-8 استفاده می کنند، اما برای اطمینان از اینکه ایمیل شما در همه سیستم ها خوانا و قابل استفاده باشد، بهتر است سربرگ utf-8 را همراه ایمیل خود ارسال کنید.

ارسال فایل ضمیمه با تابع mail در php


ارسال ایمیل بدون فایل های ضمیمه یا همان attachment با تابع mail در php کار چندان سختی نیست، اما اگر بخواهیم به همین صورت فایل ها را نیز به همراه نامه الکترونیک خود ضمیمه کنیم، باید چند کار دیگر را نیز انجام دهیم که در ادامه خواهیم گفت؛ ابتدا کد زیر را در نظر بگیرید:
<?php
//دریافت کننده ایمیل
$to = "username@example.com";
//ارسال کننده ایمیل
$from = "yourname <yourname@example.com>";
//موضوع
$subject = "ارسال ایمیل به همراه ضمیمه";
//کد رندوم boundary
$randcode = md5("r",time());
//خط جدید
$line = "\r\n"; //یا PHP_EOL
//فایل ضمیمه
$filename = "phpbook.zip";
//تجزیه و آماده سازی فایل برای ارسال
$attachment = chunk_split(base64_encode($filename));
//سربرگ ها
$headers  = "From: ".$from.$line;
$headers .= "MIME-Version: 1.0".$line;
$headers .= "Content-Type: multipart/mixed; boundary=\"".$randcode."\"";
//متن پیام به صورت ساده
$body = "--".$randcode.$line;
$body .= "Content-Transfer-Encoding: 7bit".$line.$line;
$body .= "این یک ایمیل به همراه ضمیمه است".$line;
//متن پیام به صورت html
$body .= "--".$randcode.$line;
$body .= "Content-Type: text/html; charset=\"utf-8\"".$line;
$body .= "Content-Transfer-Encoding: 8bit".$line.$line;
$body .= "این یک ایمیل به همراه <b>ضمیمه</b> است".$line;
//تنظیمات فایل ضمیمه
$body .= "--".$randcode.$line;
$body .= "Content-Type: application/zip; name=\"".$filename."\"".$line;
$body .= "Content-Transfer-Encoding: base64".$line;
$body .= "Content-Disposition: attachment".$line.$line;
$body .= $attachment.$line;
$body .= "--".$randcode."--";
//ارسال ایمیل
if (mail($to, $subject, $body, $headers)) {
    echo("<p>ایمیل شما با موفقیت ارسال شد.</p>");
    }
else {
    echo("<p>خطا در ارسال ایمیل! تنظیمات سرور شما از این امکان پشتیبانی نمی کند</p>");
    }
?>
کد بالا با استفاده از تابع mail در php، علاوه بر ارسال متن ساده و متن به صورت html قابلیت ارسال فایل ضمیمه (attachment) را نیز دارد.
توضیح:
- قبل از هر چیز در هنگام ارسال ایمیل با ضمیمه، ما به سربرگی تحت عنوان boundary یا سرحد و کرانه احتیاج داریم، برای تفکیک قسمت های مختلف یک ایمیل  (از جمله متن ساده، متن به صورت html و فایل ضمیمه) در استاندارد MIME باید از کدهای رندوم تحت عنوان boundary استفاده کنیم، البته در واقع مهم نیست این کد شامل چه عبارتی (از حروف و اعداد) باشد، مهم این است که سیستم دریافت کننده ایمیل بتواند قسمت های مختلف آن را تفکیک کند، از طرفی این کد نباید در متن پیام تکرار شده باشد، لذا معمولا از یک کد رندوم اختصاصی استفاده می شود.
- نکته مهم دیگر استفاده از تابع chunk_split و base64_encode است، به این صورت فایل ما برای انتقال به قطعات کوچکتری تقسیم شده و در چارچوب استاندارد RFC 2045 قابل انتقال است.
- همانطور که ملاحظه می کنید، در سربرگ های اولیه، مقادیر multipart/mixed را برای Content-Type در نظر گرفته ایم که این کار به دلیل ضمیمه بودن فایل به ایمیل است.
- در دو قسمت میانی کد، دو نوع متن به صورت plain text و text html ارسال کرده ایم که شما بنا بر ضرورت می توانید از هر دو یا تنها از یک روش استفاده کنید.
- نکته مهم دیگر استفاده از application/zip برای Content-Type در قسمت مربوط به فایل ضمیمه است، برای بدست آوردن Content-Type فایل های مختلف با فرمت های متفاوت، کافی است آدرس فایل خود را در سرور یا در لوکال هاست در کد زیر به جای متغیر فرضی file جایگزین کرده و آن را اجرا کنید، خروجی، Content-Type فایل شما را نشان می دهد:
<?php
//تابع نمایش نوع فایل
function my_mime_content_type($filename){
    $mime_types = array(
        //files
        'txt' => 'text/plain',
        'htm' => 'text/html',
        'html' => 'text/html',
        'php' => 'text/html',
        'css' => 'text/css',
        'js' => 'application/javascript',
        'json' => 'application/json',
        'xml' => 'application/xml',
        'swf' => 'application/x-shockwave-flash',
        'flv' => 'video/x-flv',
        //images
        'png' => 'image/png',
        'jpe' => 'image/jpeg',
        'jpeg' => 'image/jpeg',
        'jpg' => 'image/jpeg',
        'gif' => 'image/gif',
        'bmp' => 'image/bmp',
        'ico' => 'image/vnd.microsoft.icon',
        'tiff' => 'image/tiff',
        'tif' => 'image/tiff',
        'svg' => 'image/svg+xml',
        'svgz' => 'image/svg+xml',
        //archives
        'zip' => 'application/zip',
        'rar' => 'application/x-rar-compressed',
        'exe' => 'application/x-msdownload',
        'msi' => 'application/x-msdownload',
        'cab' => 'application/vnd.ms-cab-compressed',
        //audio/video
        'mp3' => 'audio/mpeg',
        'qt' => 'video/quicktime',
        'mov' => 'video/quicktime',
        'mpeg' => 'video/mpeg',
        'mpe' => 'video/mpeg',
        'mpg' => 'video/mpeg',
        'wav' => 'audio/wav',
        'aiff' => 'audio/aiff',
        'aif' => 'audio/aiff',
        'avi' => 'video/msvideo',
        'wmv' => 'video/x-ms-wmv',
        //adobe
        'pdf' => 'application/pdf',
        'psd' => 'image/vnd.adobe.photoshop',
        'ai' => 'application/postscript',
        'eps' => 'application/postscript',
        'ps' => 'application/postscript',
        //ms office
        'doc' => 'application/msword',
        'docx' => 'application/msword',
        'rtf' => 'application/rtf',
        'xls' => 'application/vnd.ms-excel',
        'ppt' => 'application/vnd.ms-powerpoint',
        //open office
        'odt' => 'application/vnd.oasis.opendocument.text',
        'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
        );
        $ext = strtolower(array_pop(explode('.',$filename)));
        if (array_key_exists($ext, $mime_types)) {
            return $mime_types[$ext];
        }
        else {
            return 'application/octet-stream';
        }
}
//آدرس فایل شما
$filename = 'image/file.gif';
//خروجی
echo my_mime_content_type($filename);
?>

ارسال ایمیل با استفاده از کلاس phpmailer


اگرچه کاربرد تابع mail در php بسیار آسان و ساده است، اما این تابع تنها موارد اولیه را پوشش می دهد، به فرض امکان استفاده از SMTP به صورت authentication یا بررسی نام کاربری و کلمه عبور وجود ندارد، یا نمی توان سرور ارسال ایمیل را تغییر داد و محدودیت های دیگری از این دست، لذا برنامه نویسان php بسته ها و کلاس های دیگری بدین منظور نوشته اند که یکی از معروف ترین آنها کلاس phpmailer است، علاوه بر کلاس phpmailer بسته ایمیل  PEAR نیز برای php وجود دارد که البته به دلیل قدرت و انعطاف پذیری کلاس phpmailer کم تر مورد استفاده قرار می گیرد.
برای شروع آموزش این قسمت ابتدا کلاس مذکور را از لینک زیر دریافت کنید:
http://code.google.com/a/apache-extras.org/p/phpmailer
به دلیل مسدود بودن خدمات code گوگل برای ip های ایران، می توانید آخرین نسخه آن را از لینک زیر نیز دریافت کنید:
دانلود کلاس phpmailer نسخه 5.2.1 - حجم 50 کیلوبایت
در نسخه بالا برخی فایل های غیر ضروری  مربوط به تست های جانبی کلاس، نسبت به نسخه اصلی حذف شده اند تا از سردرگمی کاربران در مواجه با تعداد زیاد فایل های این بسته جلوگیری شود، زبان فارسی نیز برای خطاها، در قسمت language قرار داده شده است که می توانید با اعمال تغییراتی در فایل class.phpmailer.php از آن نیز استفاده کنید، یادآور می شویم اگر می خواهید این کلاس را به همراه تمام فایل های جانبی در اختیار داشته باشید، بهتر است نسخه سایت گوگل را دریافت کنید، اما اگر داشتن فایل ها و مثال های اصلی برایتان مهم است و چندان اهل کنجکاوی در موارد اضافی و جانبی نیستید، این بسته نیز کامل و مناسب است.
استفاده از کلاس بالا بسیار ساده و آسان است، کافی است مطابق الگوی زیر موارد مورد نظر را با توجه به سرور خود تنظیم کرده و فایل را اجرا نمائید.
<!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>وبگو | ارسال ایمیل با کلاس PHPMailer</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- https://webgoo.ir -->
</head>
<body>
<?php
require_once('class.phpmailer.php');
$mail = new PHPMailer(true);
$mail->IsSMTP();
try {    
  $mail->Host       = "mail.example.com"; // آدرس SMTP سرور شما
  $mail->SMTPAuth   = true;                  // استفاده از SMTP authentication
  $mail->Username   = "yourname@example.com"; // نام کاربری SMTP
  $mail->Password   = "************";        // کلمه عبور SMTP
  $mail->AddReplyTo('yourname@example.com', 'Your Name'); // افزودن پاسخ به ارسال کننده
  $mail->AddAddress('username@example.com', 'User Name'); // تنظیم آدرس گیرنده ایمیل
  $mail->SetFrom('yourname@example.com', 'Your Name'); // تنظیم قسمت ارسال کننده ایمیل
  $mail->Subject = 'PHPMailer تست'; // موضوع ایمیل
  $mail->AltBody = 'برنامه شما از این ایمیل پشتیبانی نمی کند، برای دیدن آن، لطفا از برنامه دیگری استفاده نمائید'; // متنی برای کاربرانی که نمی توانند ایمیل را به درستی مشاهده کنند
  $mail->CharSet = 'UTF-8'; // یونیکد برای زبان فارسی
  $mail->ContentType = 'text/html'; // استفاده از html  
  $mail->MsgHTML('<html>
<body>
این یک <font color="#CC0000">تست</font> است!
</body>
</html>'
); // متن پیام به صورت html
  //$mail->AddAttachment('images/phpmailer.gif'); // ضمیمه کردن فایل
  $mail->Send(); // ارسال
  echo "پیام با موفقیت ارسال شد\n";
}
catch (phpmailerException $e) {
    echo $e->errorMessage(); // پیام خطا از phpmailer
}
catch (Exception $e) {
    echo $e->getMessage(); // سایر خطاها
}
?>
</body>
</html>
توضیح:
- همانطور که گفتیم ارسال ایمیل با کلاس phpmailer بسیار آسان و کاربردی است، کافی است ابتدا فایل اصلی برنامه یعنی class.phpmailer.php را در صفحه خود وارد کنید (با استفاده از require یا include)، سپس موارد مورد نیاز را مطابق با سرور و حساب خود تنظیم نمائید.
- در قسمت IsSMTP مشخص می کنیم که می خواهیم از SMTP برای ارسال ایمیل استفاده کنیم و برای استفاده از این امکان باید آدرس میل سرور، نام کاربری و کلمه عبور را مطابق الگو تکمیل نمائید.
- قسمت AltBody برای کسانی است که برنامه مدیریت ایمیل آنها تنها از متن ساده پشتیبانی می کند و امکان دیدن ایمیل های html را ندارند.
- قسمت MsgHTML متن پیام به صورت html را در خود جای می دهد، این متن هم می تواند با فراخوانی یک فایل جانبی (با تابع file_get_contents) باشد یا اینکه به صورت مستقیم وارد شود، به فرض در هنگام کار با فرم های ایمیل می توان متن دریافتی از فرم را به یک متغیر نسبت داده و متغیر را به عنوان محتوای ایمیل ارسالی در نظر گرفت.
- اگر نیاز به ضمیمه کردن فایل یا فایل هایی در ایمیل خود دارید، می توانید از قسمت AddAttachment که در مثال بالا غیر فعال شده است، استفاده کنید، ذکر این نکته ضروری است که فایل شما باید از قبل بر روی سرور قرار گرفته باشد و سپس آدرس آن به صورت داینامیک جایگزین شود که خود نیاز به کمی مهارت در برنامه نویسی php دارد.

استفاده از SMTP گوگل برای ارسال ایمیل در php


با استفاده از کلاس PHPMailer شما می توانید از سایر سرورهای SMTP که در آنها حساب کاربری دارید نیز برای ارسال ایمیل استفاده نمائید، البته در عمل سرویس های ایمیل معمولا پس از مدتی برخی از پورت های عمومی خود را محدود کرده یا تغییر می دهند؛ با این وجود یکی از پرکاربردترین این سرورها، سرویس ایمیل سایت گوگل است که تقریبا محدودیت های آن از سایر موارد مشابه کم تر است، البته در لحظه ای که آین آموزش نوشته می شود، ظاهرا پورت 465 SSL آن برای برنامه های جانبی مسدود شده است و خطای timeout می دهد، اما پورت 587 TLS همچنان کار می کند، در کنار این دو پورت امن، پورت 25 نیز وجود دارد که نیازی به رمزنگاری ندارد، برای اینکه این کد در سرور شما به درستی کار کند، بهتر است همه موارد را بررسی کنید، ارسال ایمیل از این طریق محاسن و در عین حال معایبی دارد، بهترین مزیت آن این است که محدودیت برخی از هاست های اشتراکی را ندارد، توضیح اینکه در بیشتر هاست ها برای ارسال ایمیل محدودیت هایی به صورت روزانه و یا ساعتی قائل می شوند، ظاهرا و به گفته تیم پشتیبانی گوگل، در سرویس این شرکت روزانه بالغ بر 2000 ایمیل از یک اکانت قابل ارسال است، اما معایب این سرویس این است که ممکن است از طرف گوگل پورت های آن مسدود شود یا بدون اطلاع قبلی تغییر پیدا کند و یا به ip های برخی کشورها سرویس ندهد و... که این استقلال برنامه ما را تحت تاثیر قرار می دهد، به هر صورت تصمیم به استفاده یا عدم استفاده از این امکان را به عهده شما می گذاریم.
بدین منظور لازم است الگوی بالا را به شکل زیر تغییر دهید:
<!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>وبگو | ارسال ایمیل با کلاس PHPMailer و سایت گوگل</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- https://webgoo.ir -->
</head>
<body>
<?php
require_once('class.phpmailer.php');
$mail = new PHPMailer(true);
$mail->IsSMTP();
try {
  $mail->Host       = "smtp.gmail.com"; // آدرس SMTP سایت گوگل        
  $mail->SMTPAuth   = true;                  // استفاده از SMTP authentication
  $mail->SMTPSecure = "tls";                 // استفاده از پروتکل امن    
  $mail->Port       = 587;                   // درگاه خروجی سرویس ایمیل گوگل  
  $mail->Username   = "yourname@gmail.com"; // نام کاربری حساب گوگل
  $mail->Password   = "************";        // کلمه عبور حساب گوگل
  $mail->AddReplyTo('yourname@example.com', 'Your Name'); // افزودن پاسخ به ارسال کننده
  $mail->AddAddress('username@example.com', 'User Name'); // تنظیم آدرس گیرنده ایمیل
  $mail->SetFrom('yourname@example.com', 'Your Name'); // تنظیم قسمت ارسال کننده ایمیل
  $mail->Subject = 'PHPMailer تست'; // موضوع ایمیل
  $mail->AltBody = 'برنامه شما از این ایمیل پشتیبانی نمی کند، برای دیدن آن، لطفا از برنامه دیگری استفاده نمائید'; // متنی برای کاربرانی که نمی توانند ایمیل را به درستی مشاهده کنند
  $mail->CharSet = 'UTF-8'; // یونیکد برای زبان فارسی
  $mail->ContentType = 'text/html'; // استفاده از html  
  $mail->MsgHTML('<html>
<body>
این یک <font color="#CC0000">تست</font> است!
</body>
</html>'
); // متن پیام به صورت html
  //$mail->AddAttachment('images/phpmailer.gif'); // ضمیمه کردن فایل
  $mail->Send(); // ارسال
  echo "پیام با موفقیت ارسال شد\n";
}
catch (phpmailerException $e) {
    echo $e->errorMessage(); // پیام خطا از phpmailer
}
catch (Exception $e) {
    echo $e->getMessage(); // سایر خطاها
}
?>
</body>
</html>
پس از اجرای کد برای اولین بار، ممکن است سرویس گوگل دسترسی برنامه را مسدود کند تا از شما مجوزهای لازم را دریافت نماید، بدین جهت اگر با خطای authentication مواجه شدید، لازم است که به ایمیل خود مراجعه کرده و با پیروی از دستورالعمل پیام ارسالی از طرف گوگل، مبنی بر تلاش برای استفاده از حساب شما در یک برنامه جانبی، اجازه استفاده از حساب کاربریتان را به برنامه خود بدهید و از نو آن را اجرا کنید، توجه کنید که به اشتباه بر روی لینک ها کلیک نکنید، در غیر این صورت برنامه شما ممکن است مسدود شود و برای ارسال ایمیل از این طریق با مشکل مواجه شوید.

ارسال ایمیل در لوکال هاست و WampServer


برای ارسال ایمیل از طریق لوکال هاست و برنامه سرور محلی WampServer، با استفاده از SMTP سرویس ایمیل گوگل یا همان GMail، ابتدا لازم است که آخرین نسخه wamp را روی سیستم خود نصب کنید، این برنامه را می توانید از لینک زیر دریافت نمائید.
www.wampserver.com
پس از نصب برنامه، به دلیل استفاده گوگل از پروتکل های امن و عدم پشتیبانی wamp (به طور پیش فرض) از این امکان، باید تغییراتی در فایل اصلی php.ini اعمال نمائید تا ایمیل شما از این طریق قابل ارسال باشد، لذا پوشه ای که برنامه را در آن نصب کرده اید باز کرده و آدرس زیر را ادامه دهید تا به فایل php.ini برسید.
\bin\apache\apache*.*.**\bin
در این فایل با استفاده از نت پد (notepad) یا هر ویرایشگر متنی دیگر و با کمک قابلیت کلمه یاب یا Find، به دنبال عبارت openssl بگردید تا به خط مربوط به extension=php_openssl.dll برسید، اگر در ابتدای این خط علامت ; بود، آن را حذف کنید و فایل خود را ذخیره کرده و برنامه WampServer را (اگر در حال اجرا بود) بسته و مجددا اجرا کنید یا از امکان شروع مجدد آن استفاده نمائید، اکنون اگر تابع ()phpinfo را در یک فایل php خروجی بگیرید، در قسمت Phar امکان OpenSSL support باید فعال یا enabled باشد، در غیر این صورت در هنگام ارسال ایمیل از طریق phpmailer و wamp، پیام زیر را دریافت خواهید کرد.
Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto
حال همه چیز آماده است تا از کلاس PHPMailer و SMTP گوگل استفاده نمائیم.
در پایان مجددا یادآور می شویم که ممکن است برای اولین بار، گوگل کد شما را مسدود کند تا مجوز اجازه و دسترسی برنامه را از شما دریافت نماید، لذا اگر با این خطا در اکانت gmail خود مواجه شدید، باید از دستورالعمل آن پیروی کرده و مجوز دسترسی از حساب خود را به برنامه بدهید.
sectionدسته بندی: آموزش کاربردی » PHP
related مطالب بیشتر:
» نمایش آمار بازدیدها با PHP بدون استفاده از دیتابیس
» نمایش قسمتی از متن و پاراگراف با PHP
» دریافت و نمایش پیج رنک گوگل با PHP
» ساخت فید خوان آر اس اس (RSS Feed Reader) با PHP
» نحوه نمایش متن و تصاویر اتفاقی در PHP و MySQL
commentنظرات (۱۲۱ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: سمیه
۱۰:۱۷ ۱۳۹۱/۰۵/۰۹
سلام بر مدیر سایت
آموزش های css و php خیلی ساده و روان توضیح دادین مرسی من از سایت شما خیلی راضی هستم.
پاسخ: 
سلام
نظر لطف شماست.
نویسنده: محمد
۱۰:۴۱ ۱۳۹۱/۰۵/۱۱
خیلی ممنون از راهنمایی و کمکتون
نویسنده: mahsa
۱۹:۲۹ ۱۳۹۱/۰۵/۱۱
سلام
تشکر از توضیحاتتون. من در هنگام استفاده از کلاس phpmailer به یه مشکل برخوردم. اگه <title> یه عنوان فارسی باشه، تمام متن های فارسی مثل "پیام با موفقیت ارسال شد" رو به شکل مربع مربع مینویسه. در هنگام ارسال ایمیل هم همین مشکل در Subject و Body پیش میاد (کد CharSet رو هم مینویسم ولی باز فایده نداره)
پاسخ: 
سلام
ابتدا دقت کنید که قسمت charset دقیقا به همان صورت که در مثال آمده، بدون فاصله خالی یا علامت "" به جای '' باشد و بعد از قسمت new PHPMailer درج گردد نه قبل از آن، سپس در مرورگر دیگری ایمیل خود را ارسال کنید، اگر مشکل حل نشد، فایل class.phpmailer.php را در یک ویرایگشر php باز کنید و در خط 56 مقادیر public $CharSet را برابر utf-8 قرار دهید.
نویسنده: جواد
۰۰:۴۷ ۱۳۹۱/۰۵/۱۲
با سلام
ممنون از مطالب واقعا مفیدتون.ولی من به یه مشکلی برخوردم چرا هرچی ایمیل میفرستم متنی که دریافت میشه چه به صورت فارس باشه یا انگلیسی همش مربع مربع دریافت میشه.این تنظیماتیم که گفتین انجام دادم رفتم خط 56 تغییر دادم تازه خط 62 هم تغییر دادم ولی باز نشد ممنون میشم اگه راهنماییم کنی.
پاسخ: 
سلام
این پارامتر را به ایمیل خود اضافه کنید:
$mail->Encoding = 'base64';
اگر مشکل حل نشد، تابع زیر یا تابع درونی utf8_encode را هم امتحان کنید:
<?php
function change_to_utf8($str){
$str = mb_convert_encoding($str, "UTF-8");
return $str;
}
?>
اگر همچنان مشکل وجود داشت، در خط 69 به جای 8bit از مقادیر دیگر مثل base64 7bit و... استفاده کنید.
یک راه حل پیشنهادی دیگر استفاده از روش زیر است:
$MsgHTML = 'متن ایمیل و...';
$maile->MsgHTML = "=?UTF-8?B?".base64_encode($MsgHTML)."?=";
به این طریق مقادیر به صورت utf-8 اینکد می شوند.
ظاهرا این مشکل تنها در برخی سرورها به وجود می آید.
نویسنده: جواد
۱۶:۴۴ ۱۳۹۱/۰۵/۱۲
راه حل آخری که نفهمیدم منظورتون چیه ولی راه حل های دگتونو چک کردم ولی باز ایمیل دریافتی فارسی پوشش نمیده.
این فایل mail منه:
$mail->CharSet = "UTF-8"; // يونيکد براي زبان فارسي
$mail->ContentType = "text/html"; // استفاده از html
$mail->Encoding = 'base64';
$mail->MsgHTML(change_to_utf8('سلام'));
/*$mail->MsgHTML('<html>
<body>
سلام
</body>
</html>'); // متن پيام به صورت html*/
اینم فایل class.phpmailer منه:
 public $CharSet           = 'UTF-8';
public $ContentType = 'text/html';
public $Encoding = 'base64 7bit';
پاسخ: 
قسمت زیر را اصلاح کنید:
$mail->CharSet = "UTF-8";
به این شکل:
$mail->CharSet = 'UTF-8';
نکته دوم اینکه راه حل ها را با هم استفاده نکنید، وقتی از Encoding base64 استفاده می کنید، دیگر از تابع change_to_utf8 استفاده نکنید و همین طور برای سایر راه حل هایی که ذکر شد، قسمت آخر در واقع ابتدا متن پیام را در یک متغیر فرضی قرار می دهیم و هنگام استفاده از maile->MsgHTML آن را به صورتی که نوشته ایم فراخوانی می کنیم تا متن بر اساس یونیکد uftf-8 ارسال شود، و نکته آخر اینکه base64 7bit را با هم استفاده نکنید، بلکه base64 یا 7bit را امتحان کنید.
ظاهرا کلاس phpmailer نسخه فعلی که جدید ترین آن است، با برخی سرورها در هنگام کار با یونیکد utf-8 مشکلاتی دارد، البته ما نیز از همین کد در پروژه های خود استفاده می کنیم و به چنین مشکلاتی برنخورده ایم، شاید لازم باشد تنظیمات PHP سرور خود را هم در مورد پشتیبانی از یونیکدها بررسی کنید.
نسخه قدیمی تر این کلاس را از اینجا می توانید دریافت و امتحان کنید:
phpmailer.worxware.com
نویسنده: جواد
۱۴:۰۷ ۱۳۹۱/۰۵/۱۳
با سلام
اول ازتون خیلی تشکر میکنم که پاسخگوی سوالات هستید.
بعد خواستم بگم تو کپی کردن علامت های اسلش بعد از ارسال نظرات به این صورت در اومده،ولی به یه نکته جدید بر خودم چرا تو تابع میل این کد:
$mail->MsgHTML('<html>
<body>
اين يک <font color="#CC0000">تست</font> است!
</body>
</html>');
مینویسم موقع دریافت ایمیل حروف ناخواناست ولی موقعی که تو تابع میل از:
$mail->MsgHTML(file_get_contents('contents.html'))
استفاده میکنم ایمیل دریافتیم درست دریافت میشه و قشنگ فارسی مینویسه، کد 'contents.html بررسی کردم دقیقا همون کدیه که در بالا توی تابع میلم نوشتم.
پاسخ: 
سلام
خواهش می کنیم، هدف ما حل مشکل شما و کمک به سایر کاربرانی است که ممکن است با این مورد مواجه شده باشند.
به احتمال زیاد به دلیل وجود Byte Order Mark یا BOM در فایل contents.html است، زمانی که فایل های خود را در ویرایشگر، ویراش و ذخیره می کنید، معمولا کارکترهایی نامرئی برای شناسایی یونیکد به آنها اضافه می شود، نظیر یونیکد در برنامه notepad ویندوز، برخی از برنامه ها نیز قابلیت افزودن یا حذف این کاراکترهای نامرئی را در هنگام ذخیره سازی به کاربر می دهند مانند Adobe Dreamweaver، به هر صورت خوشحالیم که مشکل به هر طریق حل شد، با این حال روش زیر را هم امتحان کنید که بر مبنای BOM برای یونیکد utf-8 است:
$email_body = chr(239) . chr(187) . chr(191) .'<html>
<body>
اين يک <font color="#CC0000">تست</font> است!
</body>
</html>';
$mail->MsgHTML("$email_body");
نویسنده: mahsa
۱۷:۲۹ ۱۳۹۱/۰۵/۳۰
سلام
ببخشید یه سوال از نرم افزار ومپ سرور ورژن 2.2e داشتم. این نرم افزار بعد از مدتی دیگه هم در ویندوز سون و هم اکسپی رفرش نمیشه و باید نرم افزار رو بعد از هر تغییرات در کدها، ریست کنم تا تغییرات اعمال بشه. کار خاصی باید بکنم که درست بشه یا کلاً مشکلات اینجوری هست؟
پاسخ: 
سلام
در حالت عادی wampserver نباید این مشکل را داشته باشد، احتمال اینکه مشکل از cache شدن صفحه در مرورگر باشد زیاد است، برای اطمینان، از مرورگر دیگری استفاده کنید، اگر باز مشکل مشاهده شد باید تنظیمات mod_cache را در آدرس زیر بررسی کنید:
bin\apache\apache*.*.*\conf\httpd.conf
با استفاده از قابلیت find در یک ویرایشگر متنی به دنبال عبارت mod_cache بگردید، اگر مقابل عبارت زیر علامت # قرار نداشت، یعنی mod_cache فعال است و ممکن است ایجاد مشکل کرده باشد:
LoadModule cache_module modules/mod_cache.so
لذا علامت # را در ابتدای آن اضافه کرده و wampserver را از نو اجرا کنید.
نویسنده: رضا
۱۱:۰۱ ۱۳۹۱/۰۶/۱۱
وااااااااااااااااقعا عالی از ته دلم میگم
ای ول
باور کن بزرگترین کمک رو بهم کردی با این آموزشی که گذاشتین
ممنون
پاسخ: 
خواهش می کنیم؛ از اینکه آموزش مفید بوده خوشحالیم.
نویسنده: سعید
۰۸:۳۶ ۱۳۹۱/۰۷/۱۹
با سلام و عرض ادب و تشکر
من می خواستم از سرویس گوگل برای ارسال ایمیل استفاده کنم ولی با هر دو پورت 25 و 578 ارور authentication میده.
ممنون میشم راهنمایی ام کنید
پاسخ: 
سلام
مثالی که در آموزش قرار داده ایم را مجددا امتحان کردیم، ایمیل بدون مشکلی ارسال شد! لذا پورت 587 گوگل فعال است، امکان دارد گوگل از شما تقاضای تایید دسترسی داشته باشد، باید به ایمیل خود مراجعه کنید و ببینید آیا پیامی از طرف گوگل دریافت کرده اید، اگر این طور نبود، نام کاربری و کلمه عبور خود را بررسی و از صحیح بودن آن اطمینان حاصل کنید، در ضمن دقت کنید ارسال ایمیل باید از سرور هاست شما انجام شود، در لوکال هاست نیاز به ایجاد تغییراتی در فایل php.ini است که در آموزش در مورد wampserver توضیح داده ایم، همچنین می توانید برای بررسی دقیق تر خطای دریافتی، پارامتر زیر را به کد اضافه کنید (در قسمت پارامترها):
$mail->SMTPDebug  = 2;
نویسنده: blue
۲۳:۲۹ ۱۳۹۱/۰۸/۰۵
با سلام براي من اين ارور رو ميده. خيلي گشتم ولي نمي تونم حلش كنم. لطفا كمكم كنيد
Message was not sent 
PHP Mailer Error: The following From address failed: m.abdollahi58@gmail.com
پاسخ: 
سلام
این مشکل ممکن است دلایل متفاوتی داشته باشد، از پارامتر زیر استفاده کنید تا جزئیات بیشتری از خطای دریافتی را مشاهده کنید:
$mail->SMTPDebug = 2;
دلیل دیگر هم ممکن است مربوط به فعال نبودن extension = php_openssl.dll در سرور یا لوکال هاست باشد، برای راهنمایی دقیق تر لطفا اطلاعات بیشتری از نوع سرور یا احیانا لوکال هاست خود ارائه دهید.
نویسنده: blue
۰۰:۴۳ ۱۳۹۱/۰۸/۰۶
حلش كردم. به جاي اس اس ال ، تي ال اس رو نوشتم.
پاسخ: 
همان طور که در آموزش ذکر شده باید از پورت 587 TLS استفاده کنید، به هر صورت خوشحالیم که مشکل حل شد.
نویسنده: حامد
۲۳:۰۳ ۱۳۹۱/۰۸/۰۸
راه حل ارور authentication با گوگل حل شدنی نیست. من یه ماهه تلاش می کنم نمیشه.
یاهو ام زیاد محدودیت نداره نسبت به گوگل. امتحانش ضرر نداره.
اگه از smtp یاهو استفاده کنین اصلا ارور نمیده. خیلی هم راحته. فقط آدرس سرور رو به smtp.mail.yahoo.com
و پورت اون ssl 465 هستش. بقیه تغییراتم از قبیل آی دی و پسورد یاهو فراموش نشه. راستی از پورت tls برای یاهو استفاده نکنین.
موفق باشین.
پاسخ: 
سلام
ممنون از طلاعات خیلی مفیدتان، البته smtp گوگل تست شده و اگر مراحل را درست انجام دهید، مشکلی برای ارسال ایمیل وجود ندارد.
نویسنده: مهسا
۱۱:۳۱ ۱۳۹۱/۰۸/۳۰
سلام. ممنون از این که با حوصله به پرسش ها پاسخ میدید.
آیا برای استفاده از تابع mail در صفحات html به DB نیاز هست یا نه؟
پاسخ: 
سلام
تابع mail یکی از توابع درونی php است و لذا تنها در صفحات php (فایل های با فرمت php) قابل استفاده است، برای استفاده از آن نیازی به دیتابیس نیست مگر اینکه بخواهید اطلاعات موجود در پایگاه داده را ایمیل کنید که خود یک مبحث جدا است.
نویسنده: مریم
۱۵:۴۵ ۱۳۹۱/۱۰/۰۹
سلام
من از کد شما استفاده کردم ولی ارور authentication میده
SMTP -> ERROR: Password not accepted from server: 535-5.7.1 Username and Password not accepted. Learn more at 535 5.7.1 http://support.google.com/mail/bin/answer.py?answer=14257 ew4sm59221205wid.11 
SMTP Error: Could not authenticate.
برای من ایمیلی ارسال شد که تلاشی برای استفاده از ایمیل شما بوده پسورد رو تغییر بدبد .
چطور می تونم این ارور رو بر طرف کنم
پاسخ: 
سلام
در انتهای ایمیل ارسال شده توسط گوگل باید قسمتی وجود داشته باشد مبنی بر اینکه اگر این خود شما بوده اید، برای دادن مجوز دسترسی به برنامه، از دستورالعمل لینک پیروی کنید.
If this was you, and you want to give this application access to your account, complete the troubleshooting steps listed at http://support.google.com/mail?p=client_login
1- از طریق آدرس http://mail.google.com/mail وارد حساب ایمیل خود شوید (در صورت مشاهده رمز Captcha آن را نیز وارد کنید).
2- سپس مرورگر خود را بسته و مجددا وارد حساب کاربری ایمیل شوید.
3- اگر مجددا مشکلی بود از طریق لینک http://www.google.com/accounts/DisplayUnlockCaptcha وارد حساب خود شوید.
4- بر روی Continue کلیک کنید.
5- اکنون باید بتوانید از طریق smtp گوگل ایمیل ارسال کنید.
نویسنده: سعيد كرمي
۲۰:۱۴ ۱۳۹۱/۱۱/۲۶
سلام. واقعا از ته دل ميگم خسته نباشي. سايتت بسيار عالي و روانه. آموزش هات كامله. من براي اولين بار براي سايتي نظر ميزارم چون سايتي نديدم كه ارزش نظر دادن داشته باشه. واقعا خوبه. به قدري كه ارزش داره براي كدهاي كاربرديت حتي مبلغ تعيين كني تا كمي از زحماتت جبران شه. مثلا بابت هر لينك آموزش 200 تومن. البته ارزشش خيلي بيشتر اين مبلغ فقط پول چاييته. البته اين يه پيشنهاده. و اميدوارم جسارت و دخالت بنده رو ببخشيد. در ضمن جاي كدهاي Asp.net خاليه. در ضمن كدهاي كاربردي رو بيشتر كنيد. در ضمن من چطور ميتونم يه كد بنويسم كه تاريخ و ساعت رو از سرور بگيره و در سايت نشون بده.
و سوال آخر كد هاي امنيتي در سايت به چه دردي ميخوره. منظورم همين كدهايي كه بعضي موقع در سايتها طوري مينويسن كه خونده هم نميشه و شما هم اون رو به صورت سوال و جواب در پايان ايميل گذاشتي
خيلي خيلي خيلي ممنون
پاسخ: 
سلام
خیلی ممنون از نظر لطف و پیشنهادات خوب شما، البته تلاش ما این است که مطالب، در عین حفظ کیفیت آموزش ها، بدون محدودیت های دست و پا گیر و رایگان منتشر شوند، در مورد ASP.NET فعلا این امکان وجود ندارد، در رابطه با نمایش تاریخ مطلبی در سایت و در آموزش های کاربردی php (تحت عنوان تبدیل تاریخ میلادی به شمسی) وجود دارد، کافی است عبارت "تاریخ" را در قسمت جستجو وارد کنید.
در رابطه با سوال آخر و اینکه کدهای امنیتی چه کاربردی دارند، دلیل استفاده از این کدها جلوگیری از ارسال هرزنامه توسط برنامه های خزنده است، توضیح اینکه افراد مختلف با انگیزه های متفاوت اقدام به ایجاد برنامه هایی می کنند که در سایت ها و وبلاگ های مختلف به دنبال فرم های ارسال نظر (یا هر فرم دیگری) می گردنند و در صورت پیدا کردن، موارد را به صورت فرضی یا تبلیغاتی پر کرده و ارسال می کنند! برای جلوگیری از این نوع برنامه ها از کدهای امنیتی استفاده می شود.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- موارد غیرمرتبط با مباحث آموزش ها را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ مختصر داده خواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- از درج عناوین تبلیغاتی در فیلدها خودداری کنید، در صورتی که یادداشت تبلیغاتی تشخیص داده شود حذف خواهد شد.
- تمام یادداشت ها بررسی و زمانی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد خودداری کنید.





3 × 7
 refresh

آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form mohadeseh
در:
ممنون از راهنماییتون مشکلم حل شد
۱۳۹۹/۰۷/۲۸

form محمد
در:
سلام. یک کد نوشته ام بدین صورت: وقتی صفحه باز شده یک پنجره پیام خالی با یک ok باز شده هر چه ok را...
۱۳۹۹/۰۷/۲۸

form فایز پور جهانبخشی
در:
سلام اگر بخواهیم برنامه ای که داخل متلب نوشتیم تا یک ثانیه اجرا شود و بعد از ثانیه اول در حالت خطا که...
۱۳۹۹/۰۷/۲۸

form mohadeseh
در:
الان کد من که توی تگ <head> گزاشتم میخواستم بدونم ایا امکانش هست که توی تگ link که ایکون رو باهاش اوردم بتونم...
۱۳۹۹/۰۷/۲۷

form mohadeseh
در:
سلام ببخشید لطفا راهنمایی کنید که چجوری title برای favicon در html بزارم؟ جوری که وقتی موس روی icon قرار بگیره متن...
۱۳۹۹/۰۷/۲۷

form ryomaechizen
در:
سلام. اگه حافظه وب پر بشه و مجبورا عکسا کپی باشن چطور باید مشکل بارگزاریشون حل بشه؟
۱۳۹۹/۰۷/۲۶

form رونا
در:
پرونده فرستاده شده نمی‌تواند به wp-content/uploads/2020/10 برود. سلام این ارور برای چی رخ می ده
۱۳۹۹/۰۷/۲۵

form reza
در:
سلام خوبید انشاالله؟ خواستم بدونم این نوار ابزار رو چطور باید اونایی رو دوست دارم بزارم سمت راست وبلاگم. هر چی کد و ......
۱۳۹۹/۰۷/۲۴

form سینا
در:
چگونه میتوانیم با استفاده از HTML فرمول شیمیایی مواد را بنویسیم؟ با عدد اتمی، جرمی و بار اتمی
۱۳۹۹/۰۷/۲۱

form فاطمه
در:
سلام ممنونم... خیلی ساده و روون توضیح دادین.. اونقدر که تشویق شدم محتوای یه فایل تکس رو با ایجکس درون یه div بیارم ولی...
۱۳۹۹/۰۷/۲۱

form امیرحسین
در:
خب متوجه شدم. که باید خط اول عدد فانکشن رو تغییر بدم. بسته به تعداد آرایه یا هر عدد دیگه تغییر بدم جوابمو...
۱۳۹۹/۰۷/۲۱

form امیرحسین
در:
عالی بود. خیلی ممنونم. ولی هر چند کلمه داخل آرایه داشته باشم به همون میزان خروجی گرفته میشه. من اگه 10 کلمه در آرایه داشته...
۱۳۹۹/۰۷/۲۱

form سعادتی
در:
سلام کاش روش برطرف کردن این بهم ریختگی رو هم توضیح میدادید. ممنون
۱۳۹۹/۰۷/۲۰

form امیرحسین
در:
موفق شدم اینو پیدا کنم. ولی میخوام کلمات تکراری داخلشون نباشه. مثال AAA فقط یک بار در اون خط وجود داشته باشه.
۱۳۹۹/۰۷/۲۰

form امیرحسین
در:
سلام. نه محدودیت زمانی وجود نداره.
۱۳۹۹/۰۷/۲۰
form امیرحسین
در:
سلام خسته نباشید. میخوام از این تابع برای بدست آوردن لیست های متفاوت استفاده کنم. مثلا یه آرایه داشته باشم. امیدوارم کمکم...
۱۳۹۹/۰۷/۲۰
form ابوالفضل
در:
سلام وقتتون بخیر من میخوام یه افزونه برای مرورگر کروم طراحی کنم و میخوام یه متنی رو هر سری از سایت دریافت کنه و...
۱۳۹۹/۰۷/۲۰
form mahdi
در:
سلام چطور می تونم از ip خارجی استفاده کنم؟ برای دریافت لانچر میخام. مرسی
۱۳۹۹/۰۷/۱۹
form احسان عباسی
در:
با سلام و تشکر از سایت خوبتون من یه کد تعریف کردم که در بورس ایران سهم مدنظرمو بیاره .. میخواستم ببینم امکانش هست دستوری...
۱۳۹۹/۰۷/۱۷
form شبنم
در:
سلام وقتتون بخیر، ببخشید از کلمه event یا e دقیقا چه زمانی توی فانکشن استفاده میکنیم؟
۱۳۹۹/۰۷/۱۷
form احمد
در:
با عرض سلام مجدد ساختار کلی دستورم به این صورت هست. بعد از حلقه وایل اون دیو کلاس 1 و 2 و 3 میخواهم...
۱۳۹۹/۰۷/۱۶
form احمد
در:
با عرض سلام ببخشید چطوری میتونم یه قسمت از تگ ها رو داخل حلقه وایل رد کنم دوباره تگ های بعدی داخل حلقه قرار بگیرن...
۱۳۹۹/۰۷/۱۶
form ابوالفضل
در:
سلام واقعا من خیلی گشتم تا بتونم این آموزش رو پیدا کنم چون واقعا نمی دونستم چی بنویسم تا یک رتبه بندی برای نتایج جستجو...
۱۳۹۹/۰۷/۱۵
form mahtab
در:
سلام وقتتون بخیر ببخشید میشه بفرمایید چجوری کلیپ رو بزاریم وبلاگ ؟؟ بی زحمت کامل بفرمایین ممنون و متشکر
۱۳۹۹/۰۷/۱۴
form Saeid Azari
در:
سلام ببخشید اگه امکانش هست سوال منو جواب بدید یکم گیج شدم...من یک کد html دارم که باید یک سایت درست کنم و ان را...
۱۳۹۹/۰۷/۱۳
form ابوالفضل
در:
سلام یک سوال دارم چجوری یک متنی که درون تگ td هست و بعد تگ br هست (تگ br درون تگ td است) رو...
۱۳۹۹/۰۷/۱۳
form parnian
در:
با سلام با توجه به این که این مطلب در سال 91 نوشته شده ایا تغیری هم کرده؟ مثلا استفاده و مهم بودن تگ های...
۱۳۹۹/۰۷/۱۳
form fahimeh
در:
سلام من دارم پروژه واسه دانشگاه مینویسم طراحی سایتو کردم برای کار با پایگاه داده دستور insert و delete کار میکنه ولی...
۱۳۹۹/۰۷/۱۲
form امین
در:
با عرض سلام ببخشید یه فرم دارم اخر فرمم یه دکمه دارم میخواستم بدونم چطوری باید بعد از کلیک کردن دکمه به صفحه دیگه انتقال...
۱۳۹۹/۰۷/۱۱
form محسن
در:
سلام من از فرم ساز گرویتی استفاده میکنم آیا امکان استفاده همچین چیزی رو میتونم داخلش داشته باشم آیا کدی داره که در قسمت...
۱۳۹۹/۰۷/۱۱
form مالکی
در:
چرا وبلاگم بالا نمی یاد
۱۳۹۹/۰۷/۰۹
form احمد
در:
با عرض سلام مجدد و خسته نباشید ببخشید نمونه کد رو اگر امکانش هست نگاه کنید که چطوری این متغییری رو که بدست اوردم در...
۱۳۹۹/۰۷/۰۹
form الناز
در:
سلام وقتتون بخیر. چطور میشه برنامه ای رو در php نوشت که کدملی رو تبدیل به شماره دانشجویی کنه اگه برام بنویسید ممنون میشم.
۱۳۹۹/۰۷/۰۹
form محمد
در:
سلام من میخواستم بدونم چه طوری میشه بدون اینکه از کاربر بپرسی که میخواهد از حساب خروج پیدا کند خود سایت بفهمد که کاربر از...
۱۳۹۹/۰۷/۰۹
form احمد
در:
با سلام ببخشید چطوری باید در جکوری از یک متغییر در صفحات دیگه استفاده کنم مثال دو عدد را باهم جمع کردم و ریختم داخل...
۱۳۹۹/۰۷/۰۹
form مهسا
در:
سلام و خسته نباشید مشکلی برای وبلاگ من پیش اومده موقع ورود بهم پیام میده وبلاگ داره بروز رسانی میشه و بعدا وارد وبلاگ شوید...
۱۳۹۹/۰۷/۰۸
form Moshtagh
در:
سلام و خسته نباشید بنده چند روزه که وقتی اطلاعات ورود به وبلاگم رو وارد تیترها و کلیک میکنم با چنین پاسخی مواجه میشم...
۱۳۹۹/۰۷/۰۸
form mahtab
در:
سلام خسته نباشین ببخشید چرا بلاگفا باز نمیکنه ؟؟؟ میرم مدیریت وبلاگ نه تو بروز شده ها وبی هستم نه هم که...
۱۳۹۹/۰۷/۰۷
form جواد
در:
سلام و عرض ادب. سایت من هک شده و یک کد ریدایرکت تو دیتابیس هاستم بارگزاری شده که آخر همه پست ها تو...
۱۳۹۹/۰۷/۰۷
form نبی
در:
‏asc و desc رو جابجا نوشتی
۱۳۹۹/۰۷/۰۴
form ساناز محمدی
در:
سلام مرسی از کدی که گذاشتید ♥
۱۳۹۹/۰۷/۰۳
form mahtab
در:
سلام خسته نباشین ببخشید میخواستم بپرسم که چجوری میتونیم یه کلیپ رو از کامپیوتر از انیستا دانلود کنیم ؟؟ اها اینم بگم...
۱۳۹۹/۰۷/۰۲
form سعید
در:
سلام دستتون درد نکنه از پروژه شما استفاده کردم فقط یه مشکل اگه در یک صفحه دو تا لیست کشویی داشته باشیم چطوری...
۱۳۹۹/۰۷/۰۱
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.