آگهی
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 مطالب بیشتر:
» تبدیل تاریخ میلادی، شمسی با مبدل JDF در PHP
» ساخت فید خوان آر اس اس (RSS Feed Reader) با PHP
» دریافت و نمایش پیج رنک گوگل با PHP
» محدود کردن لینک دانلود مستقیم فایل ها با PHP و htaccess
» نحوه نمایش متن و تصاویر اتفاقی در PHP و MySQL
commentنظرات (۱۲۰ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: امین -
زمان: ۱۴:۰۶:۴۷ - تاریخ: ۱۳۹۱/۱۲/۰۴
سلام .خسته نباشین
من وقتی میخوام یه فایل رو در ایمیلم attach بکنم (مثلا" یه نامه 10 سطری یا یه عکس )، attach نمیشه و این عبارت میاد:
an error occurred with uploading .
مشکلش چیه؟ لطفا" راهنمایی بفرمایین. متشکرم
پاسخ: 
سلام
اگرچه شما اشاره ای به نحوه ارسال ایمیل و سرویس مورد نظر نکرده اید، ولی احتمال می دهیم منظور یاهو میل بوده است، اگر این طور است، موارد زیر را بررسی کنید:
- فرمت فایل exe نباشد و ترجیحا با فرمت های معمول مانند zip فایل ها را فشرده کنید.
- حجم فایل خیلی زیاد نباشد.
- در مرورگرهای مختلف تست کنید.
- اگر برایتان امکان دارد از طریق v p n ایمیلتان را ارسال کنید، گاهی مواقع سیستم مخابرات فایل های مورد نیاز یاهو را به اشتباه مسدود می کند.
اگر مشکل حل نشد، به احتمال خیلی زیاد مورد از خود سرویس یاهو است که هر از چندگاهی دیده می شود.
نویسنده: ali hoseini
زمان: ۱۹:۴۶:۲۲ - تاریخ: ۱۳۹۱/۱۲/۲۹
سلام. این کد آنالیز ارسال ایمیلمه. متاسفانه متن فارسی را پیشتیبانی نمیکنه. میشه بگید مشکل دقیقا چی هست؟؟؟
<?php
$tomail = $_GET['email'];
session_start();
if(isset($_POST['submit'])){
if(!empty($_POST['name']) && !empty($_POST['from']) && !empty($_POST['message']) && !empty($_POST['subject'])){
// send email
$accept = '<div style=color:green>پیغام شما با موفقیت ارسال شد. با تشکر</div>';

$to = $_POST['to'];
$name = $_POST['name'];
$subject = $_POST['subject'];
$from = $_POST['from'];
$user_message = $_POST['message'];

$body = "<div style=\"direction:rtl;font-family:tahoma;font-size:8px;padding:8px;\">".
"نام: $name<br />".
"ایمیل: $from <br />".
"وب سایت: $from <br />".
"توضیحات: <br />".
"$user_message <br /><br />".

$headers .= 'Content-type: text/html; charset=utf-8' . "";
$headers .= 'X-Mailer: php' . "";

"این ایمیل از طریق سرویس فرم تماس با مدیر ارسال شده است </div><br />".
$headers = "From: $from";
$headers .= "Reply-To: $from";

mail($to, $subject, $body, $headers);
}
else{
$accept= '<div style=color:red>لطفا تمامی فیلد ها را تکمیل نمایید.</div>';
}
}
?>
پاسخ: 
سلام
به نظر کدهای شما چند ایراد جزئی دارد، مشکل دقیقا به استفاده نکردن از علائم r\n\ برای ایجاد خط جدید در سربرگ های ایمیل مربوط می شود، کد زیر را امتحان کنید:
<?php
$tomail = $_GET['email'];
session_start();
if(isset($_POST['submit'])){
if(!empty($_POST['name']) && !empty($_POST['from']) && !empty($_POST['message']) && !empty($_POST['subject'])){
// send email
$accept = '<div style=color:green>پیغام شما با موفقیت ارسال شد. با تشکر</div>';

$to = $_POST['to'];
$name = $_POST['name'];
$subject = $_POST['subject'];
$from = $_POST['from'];
$user_message = $_POST['message'];

$body = "<div style=\"direction:rtl;font-family:tahoma;font-size:8px;padding:8px;\">".
"نام: $name<br />".
"ایمیل: $from <br />".
"وب سایت: $from <br />".
"توضیحات: <br />".
"$user_message <br /><br />"."این ایمیل از طریق سرویس فرم تماس با مدیر ارسال شده است </div><br />";

$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'X-Mailer: php' . "\r\n";
$headers = "From: $from". "\r\n";;
$headers .= "Reply-To: $from". "\r\n";

mail($to, $subject, $body, $headers);
}
else{
$accept= '<div style=color:red>لطفا تمامی فیلد ها را تکمیل نمایید.</div>';
}
}
?>
نویسنده: مهسا
زمان: ۲۰:۱۴:۴۳ - تاریخ: ۱۳۹۲/۰۱/۰۷
سلام با تشکر از اطلاعات مفیدتون فقط می خواستم بدونم این مباحث در پروژه ارسال/دریافت ایمیل با پی اچ پی جواب میده؟ با اینکه چه طور میشه یوزر و پسورد غلط را تشخیص داد؟ ممنون میشم جواب بدین با تشکر.
پاسخ: 
سلام
این مباحث برای ارسال ایمیل در php است، اینکه برای پروژه مناسب است یا خیر بستگی به منظور شما دارد، اگر منظورتان این است که با یک کپی پیست یک پروژه داشته باشید، خیر، اما اگر منظورتان این است که در قسمتی از پروژه برای ایجاد سیستم ارسال ایمیل از نمونه کدها استفاده کنید، بله، مناسب است.
در مورد تشخیص صحت نام کاربری و کلمه عبور، از خطاهای برگندانده شده توسط کلاس PHPMailer می توانید استفاده کنید.
نویسنده: مهدی
زمان: ۱۲:۵۹:۵۰ - تاریخ: ۱۳۹۲/۰۱/۲۰
با سلام
کد زیر زبان فارسی را ساپرت نمی کنه لطفا راهنمایی بفرمایید
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<?php
/* Set e-mail recipient */
$myemail = "info@domine.ir";

/* Check all form inputs using check_input function */
$yourname = check_input($_POST['yourname'], "نام را وارد نمایید.");
$subject = check_input($_POST['subject'], "موضوع را وارد نمایید.");
$email = check_input($_POST['email']);
$website = check_input($_POST['website']);
$comments = check_input($_POST['comments'], "متن را وارد نمایید.");

/* If e-mail is not valid show error message */
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email))
{
show_error("E-mail address not valid");
}

/* If URL is not valid set $website to empty */
if (!preg_match("/^(https?:\/\/+[\w\-]+\.[\w\-]+)/i", $website))
{
$website = '';
}

/* Let's prepare the message for the e-mail */
$message = "Hello!

Your contact form has been submitted by:

Name: $yourname
E-mail: $email
URL: $website

Like the website? $likeit
How did he/she find it? $how_find

Comments:
$comments

End of message
";

/* Send the message using mail() function */
mail($myemail, $subject, $message);

/* Redirect visitor to the thank you page */
header('Location: tamasbama.htm');
exit();

/* Functions we used */
function check_input($data, $problem='')
{
$data = trim($data),"Content-Type: text/html; charset=UTF-8\n" ;
$data = stripslashes($data);
$data = htmlspecialchars($data);
if ($problem && strlen($data) == 0)
{
show_error($problem);
}
return $data;
}

function show_error($myError)
{
?>
<b>درخواست شما ارسال نگردید دوباره سعی کنید. </b><br />
<?php echo $myError; ?>
<?php
exit();
}
?>
</body>
</html>
پاسخ: 
سلام
کدی که قرار داده اید ظاهرا علاوه بر این مشکل، از لحاظ syntax هم یک خطا دارد، به هر صورت قسمت های مشخص شده زیر را در کد بالا اصلاح کنید، به احتمال قوی مشکل حل می شود (تست نشده):
$headers = "Content-type: text/html; charset=utf-8 \r\n";

/* Send the message using mail() function */
mail($myemail, $subject, $message, $headers);

/* Redirect visitor to the thank you page */
header('Location: tamasbama.htm');
exit();

/* Functions we used */
function check_input($data, $problem='')
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
if ($problem && strlen($data) == 0)
{
show_error($problem);
}
return $data;
}
نویسنده: مهدی
زمان: ۱۸:۴۲:۱۱ - تاریخ: ۱۳۹۲/۰۱/۲۰
با تشکر درست شد
نویسنده: Admin
زمان: ۲۳:۲۰:۱۴ - تاریخ: ۱۳۹۲/۰۲/۰۴
با عرض سلام
مطلب رو خیلی خوب آموزش دادید امیدوارم که در ادامه راه موفق باشید.
نویسنده: امیررضا
زمان: ۰۲:۲۵:۳۳ - تاریخ: ۱۳۹۲/۰۲/۱۴
سلام میشه در مورد اینکه چطوری همین فرم ارسال نظر رو درست کنیم مطلب بزارید ؟؟؟
خیلی ممنون
پاسخ: 
سلام
آموزشی برای ایجاد فرم تماس در سایت منتشر شده که برای فرم نظرات نیز قابل استفاده است، عبارت "تماس" را در قسمت جستجوی سایت وارد کنید.
نویسنده: Ahed
زمان: ۲۱:۳۷:۴۵ - تاریخ: ۱۳۹۲/۰۳/۰۸
درود:
من هر کاری می کنم باز هم با ارور روبرو می شم از روش معمولی استفاده می کنم و با این کدها (البته نمی دونم کدها درست فرستاده می شه یا نه؟)
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<form method="post" action="tsend.php" name="frm1">
From: <input type="text" name="from"><br/>
From Password: <input type="password" name="frompwd"><br/>
To: <input type="text" name="to"><br/>
Subject:<input type="text" name="sbj"><br/>
Message:<textarea rows="5" cols="20" name="msg"></textarea><br/>
<input type="submit" value="Send">
</form>
</body>
</html>
و صفحه دیگه هم این طور هست
<?php
extract($_POST); // from frompwd to sbj msg

ini_set("SMTP","mail.yahoo.com");

$hdrs="From:Automail<$from>\r\n"; //emre.ozen@emu.edu.tr
$hdrs.="Reply-To:support@x.com"; // reply address

$params="password:$frompwd"; // emre.ozen@emu.edu.tr's password // senders password
//loop
// each turn change the value for $to=x@x.com;y@a.net;z@somewhere.com
mail($to,$sbj,$msg,$hdrs,$params);
//
?>
در php.ini هم تغییرات دادم ولی باز هم با این ارور وصل نشدن به سرور مواجه می شم
من تو خوابگاه دانشجویی زندگی می کنم و از اینترنت مجانی دانشگاه نمیدونم ربطی داره یا نه؟!
و یه سوال دیگه
هر کاری می کنم تابع mysqli_insert_id به من عدد صفر بر می گردونه شرمنده اینجا سوال می کنم چند روز دیگه امتحان دارم و هییچکس نیست به من کمک کنه
(ایران نیستم)
پاسخ: 
سلام
برای ارسال ایمیل از طریق SMTP نمی توانید از تابع mail استفاده کنید، باید الزاما از کلاس هایی مانند phpmailer استفاده کنید که قابلیت استفاده از سرور SMTP را داشته باشند، ضمن اینکه نوع اتصال به اینترنت معمولا فرقی در این خصوص ندارد، مگر اینکه اعمال محدودیت هایی شده باشد که بعید به نظر می رسد.
نکته: تگ form در کد ارسالی بسته نشده!
در مورد تابع mysqli_insert_id، این تابع شماره آخرین ID که به صورت AUTO_INCREMENT ساخته شده را در یک پرس و جو برمی گرداند، حال باید ببینید اصلا پرس و جوی شما ID از نوع AUTO_INCREMENT ایجاد می کند یا خیر.
نویسنده: Ahed
زمان: ۰۰:۲۹:۳۲ - تاریخ: ۱۳۹۲/۰۳/۰۹
ممنون بابت پاسخ سریعتون
این کدهایی هست که استاد سره کلاس باهاشون کار می کرد.
با توجه به این کدها می تونم از phpmailer استفاده کنم یا کلاس دیگه هم هست؟
و اینکه طریقه نصبش روی کامپیوتر (من از wampserver و NetBeans استفاده می کنم) همینطوری هست که تو آموزشتون اوردین؟
پاسخ: 
دقیقا نمی دانیم چه واحد درسی دارید یا چقدر از مقدمات با PHP آشنا هستید، اما حتما می دانید که صرف درج کدها کنار هم بدون یک ارتباط منطقی و بدون اینکه بدانید چه کاری انجام می دهند، نتیجه ای نخواهد داشت، هدف در اینجا ارسال ایمیل از طریق SMTP است، در PHP تابع mail ساده ترین روش برای ارسال ایمیل است که از SMTP استفاده نمی کند، لذا کدهای شما نیز یا باید در بستر عملکرد عادی تابع mail اجرا شوند (که نیاز به یک سرور آنلاین و تنظیمات خاصی است) یا اینکه در سرور مجازی تغییرات گفته شده در آموزش اعمال شوند (تغییرات دقیقا برای wampserver است و اینکه از چه IDE استفاده کنید تاثیری ندارد) و از طریق یک سرور SMTP (مانند سرور گوگل، یاهو و...) ایمیل ها ارسال گردند.
امیدواریم توضیح کافی بوده باشد، در غیر این صورت لطفا آموزش را مطالعه کنید، همه چیز گفته شده.
نویسنده: Ahed
زمان: ۰۰:۴۴:۰۲ - تاریخ: ۱۳۹۲/۰۳/۰۹
در مورد جواب سوال دوم هم متشکرم. تو جدول باید تیک A_I فعال می کردم که نکرده بودم.
ولی با اینکه حالا ای دی عدد می گیره یه مشکل دیگه وجود داره.
من چند صفحه دارم که توی یکیش مواردی مثل عنوان و ایمیل و پیام وجود داره که وقتی از طریق اون اطلاعات رو می دم مشکلی بوجود نمیاد و در دیتابیس ثبت می شه ولی صفحه دیگه برای جواب به پیام وجود داره که در فایل دیگه نوشته شده اونجا وقتی اطلاعات رو وارد می کنم ارور
 Duplicate entry '1' for key 'topic_id'
میده. نمی دونم اشتباه در درست کردن دیتابیس من هست و یا اشتباه در برنامه که من دارم من کدها رو برای شما می فرستم فقط یه نگاه کوچیک به قسمت replay بکنید.
برای forum_topic یه جدول درست کردم که topic_id کلید اصلی و AUTO_INCREMENT و بقیه موارد
و برای forum_posts یه جدول که post_id کلید اصلی و AUTO_INCREMENT هست و در این جدول هم topic_id هست.
<?php
include 'inc.php';
doDB();

//check to see if we're showing the form or adding the post
if (!$_POST) {
// showing the form; check for required item in query string
if (!isset($_GET['post_id'])) {
header("Location: list.php");
exit;
}

//create safe values for use
$safe_post_id = mysqli_real_escape_string($mysqli, $_GET['post_id']);

//still have to verify topic and post
$verify_sql = "SELECT ft.topic_id, ft.topic_title FROM forum_posts AS fp LEFT JOIN forum_topics AS ft ON fp.topic_id = ft.topic_id WHERE fp.post_id = '".$safe_post_id."'";

$verify_res = mysqli_query($mysqli, $verify_sql) or die(mysqli_error($mysqli));

if (mysqli_num_rows($verify_res) < 1) {
//this post or topic does not exist
header("Location: list.php");
exit;
} else {
//get the topic id and title
$topic_info = mysqli_fetch_array($verify_res);
$topic_id = $topic_info['topic_id'];
$topic_title = stripslashes($topic_info['topic_title']);
?>
<!DOCTYPE html>
<html>
<head>
<title>Post Your Reply in <?php echo $topic_title; ?></title>
</head>
<body>
<h1>Post Your Reply in <?php echo $topic_title; ?></h1>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<p><label for="post_owner">Your Email Address:</label><br/>
<input type="email" id="post_owner" name="post_owner" size="40"
maxlength="150" required="required"></p>
<p><label for="post_text">Post Text:</label><br/>
<textarea id="post_text" name="post_text" rows="8" cols="40"
required="required"></textarea></p>
<input type="hidden" name="topic_id" value="<?php echo $topic_id; ?>">
<button type="submit" name="submit" value="submit">Add Post</button>
</form>
</body>
</html>
<?php
}
//free result
mysqli_free_result($verify_res);

//close connection to MySQL
mysqli_close($mysqli);

} else if ($_POST) {
//check for required items from form
if ((!$_POST['topic_id']) || (!$_POST['post_text']) ||
(!$_POST['post_owner'])) {
header("Location: list.php");
exit;
}

//create safe values for use
$safe_topic_id = mysqli_real_escape_string($mysqli, $_POST['topic_id']);
$safe_post_text = mysqli_real_escape_string($mysqli, $_POST['post_text']);
$safe_post_owner = mysqli_real_escape_string($mysqli, $_POST['post_owner']);

//add the post
$add_post_sql = "INSERT INTO forum_posts (topic_id,post_text, post_create_time,post_owner) VALUES ('".$safe_topic_id."', '".$safe_post_text."', now(),'".$safe_post_owner."')";
$add_post_res = mysqli_query($mysqli, $add_post_sql) or die(mysqli_error($mysqli));

//close connection to MySQL
mysqli_close($mysqli);

//redirect user to topic
header("Location: showtopic.php?topic_id=".$_POST['topic_id']);
exit;
}
?>
پاسخ: 
ظاهرا مشکل از این است که بنا به گفته شما ستون topic_id خاصیت AUTO_INCREMENT یا افزایش خودکار دارد، لذا همان طور که از نامش پیدا است باید به صورت خودکار افزایش پیدا کند، اما در پرس و جوی INSERT INTO اگر دقت کنید، در قسمت VALUES مقادیر این ستون نیز به صورت دستی وارد می شود، در حالی که برای ستون های AUTO_INCREMENT این کار به صورت اتوماتیک و توسط MySQL انجام می شود، لذا نباید آن را در پرس و جو درج کنید.
نکته: اگر نیاز به درج مواردی مشابه است، می توانید یک ستون دیگر برای آن در نظر بگیرید.
نویسنده: Ahed
زمان: ۱۷:۳۱:۳۲ - تاریخ: ۱۳۹۲/۰۳/۰۹
با درود بر شما بخاطر پاسخ دهیتون.
من دانشجوی کشاورزی بودم و واسه فوق تغییر رشته دادم به IT و این ترم واحد Open Source Web Applications دارم پاس می کنم. تدریس اینجا هم به صورت عادی بر پایه اینه که ما خیلی چیزها رو بدونیم و متاسفانه من خیلی از مقدمات رو بلد نیستم...
در مورد مشکل اولم هر کاری می کنم نمی تونم میل ارسال کنم با هر دو روش شما این ارور رو میده با یه پرت دیگه واسه جیمیل و یاهو هم امتحان کردم مشکل اینه که الان نمی دونم کدوم پرت بازه؟:
Failed to connect to mailserver at 'mail.gmail.com' port 587, verify your 'SMTP' and 'smtp_port' setting in php.ini or use ini_set() in D:\wamp\www\mailtest\httmail.php on line 11
و در مورد دومی هم خیلی ممنون با توجه به راهنمایی که شما کردید متوجه شدم که جدول ها رو درست طراحی نکرده بودم چون کدها درست بودند (ساخت جداول در دیتابیس کار خونگی بود)
topic_id فقط در یکی از جداول AUTO_INCREMENT بود و در جدول دوم باید یک ستون ساده براش رسم میشد که بر مبنای تعدادش می شد تعداد پستهای جواب داده به اون تاپیک رو محاسبه کرد و post_id خاصیت A_I رو داشت.
در هر صورت یک دنیا متشکرم واسه زحمتی که کشیدید.
حتما همیشه از سایت شما استفاده خواهم کرد.
پاسخ: 
پورت 587 گوگل با پروتکل رمزنگاری tls تست شده و ایمیل ارسال می کند! دقت کنید که برای ارسال ایمیل در لوکال هاست، در کنار استفاده از کلاس phpmailer باید تنظیماتی نیز انجام دهید، هم در wampserver و هم در اکانت جی میل، مشروح این موارد در آموزش گفته شده.
نویسنده: علی ربانی
زمان: ۰۸:۰۸:۳۹ - تاریخ: ۱۳۹۲/۰۴/۲۷
سلام. من وقتی با تابع
mail()
رایانامه ارسال می کنم دائم الاوقات درون پوشه spam قرار می گیرد.
از کمک شما سپاس گزارم.
ممنون از مطالب بسیار مفیدتون
پاسخ: 
سلام
برای ارسال ایمیل هایی با فرستنده معتبر، از SMTP استفاده کنید، روش ارسال ایمیل از طریق SMTP در آموزش به صورت مفصل توضیح داده شده است.
نویسنده: نرگس علی پور
زمان: ۱۱:۵۰:۳۴ - تاریخ: ۱۳۹۲/۰۶/۲۳
با سلام خدمت شما مدیر محترم و با تشکر از سایت فوق العادتون.
من یه هاست اشتراکی گرفتم که محدودیت در ارسال ایمیل داره و اون اینکه در هر ساعت اجازه ارسال 50 ایمیل رو بیشتر نمیده.
حالا سوال من اینجاست که چطور میشه تابعی نوشت که مثلا از یک لیست 2000 تایی ایمیل 50 تا رو به صورت رندم انتخاب کنه و در هر دقیقه یک ایمیل رو ارسال کنه؟ البته اگه کد گزارش گیری از تعداد ایمیل هایی که درست رسیده و تعداد ایمیل هایی که نرسیده هم تهیه کنه، خیلی خوبه.
ممنون.
پاسخ: 
سلام
اگر منظورتان این است که کدها را به صورت کامل برایتان بنویسیم، چنین کاری امکانپذیر نیست، باید وقت بگذارید و قسمتی از کدها را خودتان بنویسید، یا لااقل تلاش کنید که بنویسید، در صورت بروز مشکل در بخشی خاص، می توانیم کمک کنیم، شروع کار خیلی سخت نیست، به طور مثال اولین گام دریافت 50 ایمیل از دیتابیس با استفاده از تابع rand در MySQL است که آموزش آن نیز در مطالب مقدماتی وجود دارد.
نویسنده: نرگس علی پور
زمان: ۱۰:۱۸:۰۴ - تاریخ: ۱۳۹۲/۰۶/۲۴
ممنون که اینقدر سریع پاسخ دادین. مثل اینکه من سوالم رو بد پرسیدم.
من کل کدها رو نوشتم و بدون مشکل کار می کنه. مشکل من فقط توی ارسال ایمیل با فاصله زمانی هست که چطور میشه برای ارسال ایمیل فاصله زمانی مثلا ارسال هر ایمیل 50 ثانیه در نظر گرفت. الان کل ایمیل ها هم زمان ارسال میشه. ولی می خوام ایمیل ها رو با فاصله زمانی ارسال کنه.
با تشکر
پاسخ: 
برای این کار باید سیستم ویژه طراحی کنید که به فرض هر بار 50 ایمیل را ارسال کند و برای آن روز یا آن ساعت آدرس ایمیل های ارسال شده را در لیست ارسال شده ها ثبت کند، سپس چند دقیقه بعد 50 ایمیل انتخاب نشده را انتخاب کند و...، برای فراخوانی فایل در بازه زمانی مشخص نیز باید از امکاناتی مانند Corn jobs در Cpanel استفاده کنید.
نویسنده: نرگس علی پور
زمان: ۱۹:۵۲:۰۱ - تاریخ: ۱۳۹۲/۰۶/۲۴
ممنون از پاسختون و سایت خوبتون.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- مواردی که به کلی خارج از موضوع این مطلب هستند را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم، غیرضروری و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ خاصی داده نخواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- تمام یادداشت ها بررسی و برای هر کاربر زمان مشخصی جهت پاسخگویی در نظر گرفته می شود، لذا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.




5 × 8
 refresh
نکته:
با توجه به تاریخ نگارش آموزش های سایت و پیشرفت تکنولوژی های مرتبط با وب در سالیان اخیر، محتوای برخی از مطالب قدیمی ممکن است نیاز به ویرایش و به روزرسانی داشته باشد که این کار هم زمان با تهیه نسخه جدید «وبگو» به مرور در حال انجام است، لطفا در استفاده از مطالب سایت به این نکته دقت داشته و حتی المقدور از چند منبع مختلف استفاده نمائید.
آخرین دیدگاه ها
form حامد
در:
عالی بود
۲۱:۳۸:۳۱ ۱۳۹۸/۱۱/۰۷

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

form فرید
در:
درود بشما، میخواستم بدونم مثل کلمه @، کلمه ایی ساین هم داریم؟ با تشکر
۱۲:۱۹:۰۷ ۱۳۹۸/۱۱/۰۷

form ناشناس
در:
سلام میشه لطفا به سوالم جواب بدید من می خوام با استفاده از عبارات با قاعده تمام تگ های html رو تشخیص بدم...
۱۰:۱۳:۰۵ ۱۳۹۸/۱۱/۰۷

form PewDiePie
در:
سلام چطور می تونم این کد رو یه لینک هم بهش اضافه کنم یعنی این که وقتی عکس رو می بینی طرف بتونه...
۲۳:۳۶:۲۶ ۱۳۹۸/۱۱/۰۶

form رسول
در:
سلام میخوام بجای نمایش متن، متن موجود در یه لینکو بهم نشون بده ممنون میشم کمکم کنید
۱۳:۳۸:۱۸ ۱۳۹۸/۱۱/۰۶

form حسن
در:
من مطابق کد نوشته شده شما میخواستم آدرس
۱۴:۱۰:۱۳ ۱۳۹۸/۱۱/۰۵

form saemrezaei
در:
سلام واقعا عالییه خیلی استفاده کردم به وبلاگم سر بزن لطفا.
۱۳:۳۷:۳۴ ۱۳۹۸/۱۱/۰۵

form نصراله رضایی
در:
سلام در ادمین های گذشته که باز می کنم تصاویر مشاهده نمی شود و من را به آدرس Huge domains.com ارجاع می...
۲۲:۳۹:۵۳ ۱۳۹۸/۱۱/۰۴

form نقدی زاده
در:
واقعا مرسی یه overflow-y:hidden به body دادم اسکرل افقی برای صفحه نمایش تبلت از بین رفت
۱۴:۴۴:۱۳ ۱۳۹۸/۱۱/۰۴

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

form امین
در:
سلام تشکر بابت راهنماییتون. منظور من این بود که: الان با ثبت نام کاربر a در سایت اطلاعاتش در دیتابیس ثبت میشه و یک پوشه...
۰۳:۱۲:۴۰ ۱۳۹۸/۱۱/۰۲

form شریفی
در:
سلام معنی متن زیر چیست؟
۱۸:۲۸:۰۹ ۱۳۹۸/۱۱/۰۱

form امین
در:
سلام خسته نباشید یه اسکریپت دارم که وقتی کاربر ثبت نام میکنه یه پوشه و محتواش ایجاد میشه. میخوام یه صفحه با هر ثبت نام...
۱۴:۱۸:۵۱ ۱۳۹۸/۱۰/۳۰

form Admin
در:
سلام دوست عزیز. میشه بگویید چگونه میتوان در وبلاگ کادری را باز کرد که بازدید کنندگان بتوانند در آن چیزی بنویسند. ممنون میشم...
۱۱:۲۸:۵۰ ۱۳۹۸/۱۰/۳۰
آگهی