جی میل (Gmail) پدر تمام سرویس های ایمیل است. با ارائه فضای ذخیره سازی نامحدود و اینترفیس استثنایی, یک طوفانی رو به پا کرده است.
حالا چقدر عالی خواهد بود که بتوانیم یک رابط کاربری سفارشی برای سرویس جی میل بسازیم.
در آموزش خواندن اینباکس gmail در php قصد داریم به شما نحوه ساختن اینباکس برای ایمیل های خود از جی میل را نشان بدیم.
می توانیم این کد رو توسعه بدیم و قابلیت های بیشتری را به عنوان تکمیل کننده به این وب کلاینت ایمیل خود با استفاده از PHP اضافه کنیم.
دسترسی به سرور ایمیل و خواندن پیام های آن با استفاده از پروتکل هایی مانند IMAP , POP قابل انجام است. این پیام های خوانده شده از سرور ایمیل (mail server) می تواند برای لیست کردن ایمیل ها در یک صندق پستی ایمیل, ساخت ناتیفکیشن برای پیام های خوانده نشده و خیلی از اهداف دیگر مورد استفاده شود.
در این کد, ما از اسکتنشن IMAP در PHP برای اتصال به سرور جی میل و واکشی (fetch) داده های ایمیل استفاده می کنیم.
کانکشن موردنظر ما با ارسال درخواست دسترسی توسط اطلاعاتی مثل هاست , یوزرنیم , پسورد و غیره انجام می شود.
با داشتن این کانکشن, در مثال خواندن اینباکس gmail در php , یک درخواست جستجو با کلیدواژه بر اساس آرایه ای از پیام های برگشت داده شده توسط جیمیل, ارسال می کنیم.
برای ارتقا اپلیکیشن خودمان به یک نسخه تکامل یافته از وب کلاینت جیمیل با PHP , نیاز داریم که از ارسال ایمیل با GMAIL SMTP نیز استفاده کنید.
پیکربندی IMAP در محیط PHP و Gmail
زبان PHP شامل توابع از پیش ساخته imap_*
برای اتصال و دریافت دسترسی به سرور ایمیل خارجی دارد.
قبل از اجرای توابع imap_* در PHP , اطمینان حاصل کنید که IMAP نصب و فعال است. تابع phpinfo() اطلاعاتی از کتابخانه, پلاگین های نصب شده و غیره را به شما می دهد.
برای اجرا مثال خواندن اینباکس gmail در php با IMAP بر روی محیط لوکال, از مراحل زیر برای نصب و فعال سازی IMAP استفاده کنید.اسکرین شات نهایی برای فعال کردن دسترسی IMAP در سمت gmail است.
- کتابخانه IMAP در PHP را نصب کنید. اگر قبلا نصب بود, این مرحله را نادیده بگیرید. (بطور پیش فرض نصب است)
- اکستنشن کتابخانه IMAP را از طریق فایل پیکربندی php (php.ini) با حذف
;
در ابتدای خط, فعال کنید
12345//For Windows,;extension=php_imap.dll//For Linux,;extension=imap.so - مقدار محدودیت برای
max_execution_time
را در فایل ini افزایش بدید - برای اعمال تغییرات apache یا وب سرور را ریستارت کنید.
- به جیمیل رفته و از طریق settings > forwarding and POP/IMAP دسترسی IMAP Access را فعال کنید.
مثال: خواندن لیست ایمیل ها از جیمیل (خواندن اینباکس gmail در php با IMAP)
کد PHP زیر برای ساختن اتصال به سرور جیمیل برای دریافت داده های ایمیل استفاده شده است.
تابع imap_open() برای ساخت آبجکت کانکشن با ارسال host
, username
, password
استفاده شده است.
با متغییر $connection
, آرایه ای از ایمیل ها بر اساس شاخص جستجو برگشت داده می شود.
با استفاده از آبجکت آرایه ای $emailData
و تکرار در یک حلقه foreach
یک خلاصه ای از ایمیل و محتوای آن را دریافت می کنیم.
این پیام های دریافتی از جیمیل در یک حالت جدول مانند نمایش داده می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<h1>Gmail Email Inbox using PHP with IMAP</h1> <?php if (! function_exists('imap_open')) { echo "IMAP is not configured."; exit(); } else { ?> <div id="listData" class="list-form-container"> <?php /* Connecting Gmail server with IMAP */ $connection = imap_open('{imap.gmail.com:993/imap/ssl}INBOX', 'Your Gmail Username', 'Password') or die('Cannot connect to Gmail: ' . imap_last_error()); /* Search Emails having the specified keyword in the email subject */ // $emailData = imap_search($connection, 'SUBJECT "Article "'); /* Get Inbox All Emails without set any Filter */ $emailData = imap_search($inbox,’ALL’); if (! empty($emailData)) { ?> <table> <?php foreach ($emailData as $emailIdent) { $overview = imap_fetch_overview($connection, $emailIdent, 0); $message = imap_fetchbody($connection, $emailIdent, '1.1'); $messageExcerpt = substr($message, '0', 150); $partialMessage = trim(quoted_printable_decode($messageExcerpt)); $date = date("d F, Y", strtotime($overview[0]->date)); ?> <tr> <td><span class="column"> <?php echo $overview[0]->from; ?> </span></td> <td class="content-div"><span class="column"> <?php echo $overview[0]->subject; ?> - <?php echo $partialMessage; ?> </span><span class="date"> <?php echo $date; ?> </span></td> </tr> <?php } // End foreach ?> </table> <?php } // end if imap_close($connection); } ?> </div> |
خروجی : خواندن اینباکس gmail در php با IMAP
اسکرین شات زیر به شما خروجی دریافت ایمیل های اینباکس جیمیل با استفاده از PHP را نمایش می دهد.
امیدوارم از آموزش خواندن اینباکس gmail در php نهایت استفاده را برده باشید .
برای دانلود سورس کد کامل این آموزش از باکس دانلود استفاده کنید.
هر سوالی داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق و پیروز باشید
سلام و درود
از من خواسته شده تا امکانی رو به سایت اضافه کنم تا هر کاربری بتونه ایمیل های خودشو در پنل خودش از جیمیل بخونه و به هر کاربری خواست ایمیل ارسال کنه من اول خواستم از این اموزش شما استفاده کنم اما بعد متوجه شدم که این راهش نیست و باید ازapi gmail برای این کار استفاده کنم
آیا این قضیه رو درست متوجه شدم که باید ازapi gmail برای این کار استفاده کنم؟ کاش یه اموزش هم در این زمینه داشتید خیلی خیلی به این اموزش نیاز دارم
به نظرتون باید چیکار کنم؟
سلام.
از این آموزش استفاده کنید جواب میده
با سلام بنده طبق مراحل گفته شده پیش رفتم اما پس از اجرا با خطای زیر مواجه میشه
Cannot connect to Gmail: Certificate failure for imap.gmail.com: self signed certificate: /OU=No SNI provided; please fix your client./CN=invalid2.invalid
سلام.
اطلاعات احراز هویت رو بدرستی وارد نکردید
خیلی ممنون از پاسخگوییتون
اطلاعات مگر شامل ایمیل و رمز عبور نیست؟
بعد از اجرا بلافاصله از جیمیل پیام هشدار میاد و میگه که این ورود جدید رو مسدود کرد
داخل جیمیل باید بهش دسترسی رو بدید
با سلام من این راه اندازی کردم و به درستی ایمیل دریافت می کردم ولی بعد چند روز دستور imap هیچ واکنشی نداره ، البته من زمان درخواست رو هر ۳۰ ثانیه گذاشتم
احتمال داره که بن شده باشم؟
مقدار درخواست در هر ساعت چقدره؟
سلام.
بله احتمال بن یا محدود شدن وجود داره. در خصوص لیمیت اطلاعی ندارم باید توضیحات خود گوگل رو مطالعه کنید :
https://support.google.com/a/answer/1071518?hl=en
سلام. من سایت دارم و واقع از شما چیز های خوبی یاد گرفتم. یک ایمیل درست کردم به نام info@email.ir که میخواستم بدونم میشه این ایمیل را هم ذخیره کرد؟
چون خیلی سخته هی هردفعه بریم توی webmail لاگین کنم
سلام. خیلی خوشحالیم که مفید واقع شده.
متاسفانه این مورد رو تست نکردم ولی احتمالا اگر پورت از سمت هاست (اشتراکی ها برای امنیت بعضی مواقع می بندن) بسته نشده باشه میتونید استفاده کنید اگر جواب نداد باید جستجو کنید یا اسکریپت آماده را تست کنید که این مورد هم باید داخل گیت هاب یه تحقیق انجام بدید.
موفق باشید
دست گل شما درد نکنه . درست شد. یه دنیا ممنون. موفق باشین.
خوشحالیم که مشکل رفع شد. موفق و پیروز باشید
من بدون هیچ مشکلی به سرور جی میل وصل میشم ولی مشکل اینه که هیچ ایملی رو برام نمی خونه وقتی مقدار متغییر $emailData رو چاپ کردم دیدم مقدار خالی هست.تو اینباکس جی میلم هم ایمل دارم. ممنون میشم راهنمایی کنید.
اول دقت کنید که حتما پیکربندی IMAP رو به درستی پیش رفته و انجام دادید
در خط ۱۵ فایل php مورد نظر به جای
$emailData = imap_search($connection, ‘SUBJECT “Article “‘);
از
$emailData = imap_search($inbox,’ALL’);
استفاده کنید تا تمام ایمیل ها خوانده بشه چون در تابع قبلی ما یه شرط سرچ داشتیم که عنوان های خاص رو بر می گردوند ولی در این مقدار جدید که گفته شد جایگزین کنید همه اینباکس خوانده میشه
با سلام و احترام. برای خواندن اینباکس جی میل با پی اچ پی در تابع imap_open پارامتر اولشو چنین عبارتی وارد کردین ‘{imap.gmail.com:993/imap/ssl}INBOX’. آیا ما باید این پارامتر رو تغییر بدیم و مقدار دیگری جاش وارد کنیم. لطفا راهنمایی کنید. ممنون و تشکر.
سلام. همانطور که از مقدارش مشخص است نباید تغییر بدید چرا که برای اتصال به سرور جی میل نیاز است.
موفق باشید.
سلام من همه مراحل رو درست رفتم ولی این پیغام میده Cannot connect to Gmail: Too many login failures
حتی دریافتشو محدود کردم به تاریخ یک روز گفتم شاید بخاطر بودن زیاد ایمیل هاست ولی باز این پیغام داد میشه راهنمائی کنید
سلام. اسکریپت رو داخل یک هاست تست کنید
موفق باشید.