ایجاد: ۱۱:۵۹ ۱۳۹۲/۱۱/۸
ویرایش: ۱۱:۲۶ ۱۳۹۳/۷/۳۰
»
ارسال ایمیل با PHP
در زبان PHP تابع mail وجود دارد که با اجرای آن، به سادگی یک ایمیل به گیرنده مشخص ارسال میشود:
mail('[email protected]', 'My Subject', 'My email text ...');
اما در مورد ارسال نامههای فارسی، نامههای حاوی Bcc (گیرنده مخفی)، نامههای حاوی فایل ضمیمه (attach)، ارسال بواسطه SMTP سرور دیگر و مواردی مشابه آن، کار مستقیم با توابع PHP کمی سخت بوده و نیاز به کدنویسی بیشتر دارد.
به همین دلیل، کلاسها و قطعهکدهایی آماده شده که کار ارسال ایمیل را آسان میکند.
swiftmailer یک نمونه آن است و نمونههای دیگری هم وجود دارد که
phpMailer جزو بهترین، قدرتمندترین و در عین حال سادهترین آنهاست. یک نمونه کد ساده که قبلا در
اینجا نوشته بودم را دوباره اینجا نقل میکنم:
require('class.phpmailer.php');
$mail=new PHPMailer();
$mail->CharSet = 'UTF-8';
$body = '<div style="font:18px Tahoma;color:#159;">
<div style="text-align:center"><img src="besm.png"></div>
<p>سلام</p>
<p>تست یک دو سه</p>
<div style="text-align:center"><img src="sky.jpg"></div>
</div>';
$mail->SetFrom('[email protected]', 'ali.m');
$mail->AddReplyTo('[email protected]','no-reply');
$mail->Subject = '.: پرسش و پاسخ طراحی وب :.';
$mail->AddEmbeddedImage('besm.png', 'sky.jpg');
$mail->MsgHTML($body);
$mail->AddAddress('[email protected]', 'حسن محسنی');
$mail->AddAddress('[email protected]', 'زهرا الوندی');
$mail->AddAddress('[email protected]', 'رضا کشمیری');
$mail->AddBCC('[email protected]', 'زهره مظلومی');
$mail->AddBCC('[email protected]', 'حاج ناصر زاهد');
$mail->AddBCC('[email protected]', 'صدرا محمدی');
$mail->AddAttachment('../image/flower.gif');
$mail->AddAttachment('./book/quran.zip');
$mail->AddAttachment('my-note.doc');
if($mail->Send())
echo 'با موفقیت ارسال شد.';
else
echo 'برنامه موفق به ارسال ایمیل نشد.<hr>' , htmlentities($mail->ErrorInfo);
همانطور که میبینید، پس از include کردن فایل phpmailer در ابتدای برنامه، به سادگی توانستیم پارامترهای مختلف یک ایمیل (و حتی فایلهای ضمیمه) را به راحتی تنظیم کنیم و سپس ایمیل را ارسال کنیم و در صورت برخورد با خطا، توضیح را دریافت کنیم. در صورت تمایل به استفاده از تصاویر درون نامه هم میتوان با متد AddEmbeddedImage تصاویر موردنظر را اضافه کرد تا هرجای html نامه که خواستید، بتوانید به راحتی استفاده کنید.
همچنین در صورت تمایل به استفاده از SMTP سرور دیگر خودتان یا حتی سرورهای رایج (مثل جیمیل) میتوانید قبل از ارسال (Send)، مشخصات smtp موردنظر را نیز اضافه کنید:
$mail->IsSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->SMTPDebug = 1;
$mail->SMTPAuth = true;
$mail->Username = '[email protected]';
$mail->Password = 'f.8^Q_0*0';
ارسال با smtp جیمیل محاسن زیادی دارد و تنها عیب آن محدودیت روزانه ارسال است. بسیاری از هاستها (از جمله هاستهایی که از کنترلپنل دایرکت ادمین استفاده میکنند) به صورت پیشفرض شما را محدود به ارسال روزانه حداکثر 100 ایمیل میکنند که برای اکثر سایتها کافی نیست. همچنین اگر شما بخواهید به هزار نفر یک متن ایمیل را با هاست خود بفرستید، ممکن است به دلیل ارسال هزار ایمیل در ساعت! هاست شما بسته شود یا حداقل، از نظر بنیادهای جهانی ضداسپم، ip سرور شما به عنوان اسپمر تلقی شده و ایمیلهای شما در inbox خواننده نرود بلکه مستقیما برود به اسپم!
برای رفع هر دو محدودیت و مشکل اشاره شده، کافی است که یک اکانت جیمیل بسازید و با استفاده از phpMailer به آن وصل شده و اقدام به ارسال ایمیل کنید. با این کار حتی اگر سرور شما به شما اجازه ارسال 1 ایمیل را هم ندهد، شما مشکلی نخواهید داشت.
محدودیتهای روزانه جیمیل: در هر ارسال، یک متن را حداکثر به 500 نفر میتوان ارسال کرد. (در سایر سرویسهای رایگانی که دیدم، این عدد محدودتر است) و این کار را حداکثر 4 بار میتوان انجام داد. (یعنی میشه ارسال 2000 ایمیل یکسان در هر روز) و در صورتی که متن شما یکسان نباشد، (یعنی به هر کسی ایمیلی با متن خاص خودش ارسال کنید. مثل ایمیلهایی که با
تکنیکهای ایمیل مارکتینگ پیشرفته ارسال میشود) شما هر روز حداکثر 500 با میتوانید ارسال انجام دهید.
همچنین دقت کنید که اگر درصد قابل توجهی از لیست شما، نامه هاشون برگشت بخوره، جیمیل 24-72 ساعت اجازه ارسال را از شما میگیرد و شما فقط میتوانید ایمیل بخوانید!
اگر بیشتر از 2000 ایمیل در روز میفرستید لازمه چند اکانت جیمیل درست کنید!
دریافت ایمیل با PHP
ممکن است بپرسید که چه ضرورتی برای دریافت ایمیلهای یک اکانت خاص در php وجود دارد؟
واقعیت این است که هنوز هم بسیاری از کاربران، محیط خصوصی ایمیل را به محیطهای دیگر ترجیح میدهند و همچنین بخش معتنابهی از زمانی که از اینترنت استفاده میکنند را در محیط ایمیل میگذرانند.
به همین برخی سایتها، همه یا بخشی از خدمات خود را در محیط ایمیل ارائه میدهند. مثلا سایت درسنامه آموزشهای رایگان را به محیط ایمیل کاربران ارسال میکند و برای ثبت نام و تائید ثبت نام کافی است به آدرس خاصی ایمیل بزنید یا reply کنید. یا مثلا سایت posterous که زمانی جزو 1000 سایت برتر جهان بود، به کاربران این امکان را داده بود که از طریق محیط ایمیل، وبلاگنویسی کنند! (کاری که هم اکنون وردپرس و تامبلر و بسیاری دیگر انجام میدهند.)
لذا گاهی اوقات لازم است متون و فایلهایی که به یک آدرس ایمیل خاص فرستاده شده، توسط PHP واکشی شده و در دیتابیس ذخیره گردد. در این موارد نیز با توابع خود PHP میتوان ایمیلها را دریافت کرد. (مثال1، مثال2، مثال3، مثال4، مثال5)
اما باز هم برنامهها و کلاسهای آماده خوبی در این زمینه (خواندن ایمیل یک اکانت مشخص توسط PHP) تهیه شده که php-imap جزو بهترین آنهاست که امکان خواندن لیست ایمیلها، بخشهای مختلف یک ایمیل (مثل فایلهای ضمیمه) و جستجو در ایمیلها و حذف ایمیلها را به سادگی فراهم آورده است.
ساخت یک اکانت جدید ایمیل با PHP
باز هم ممکن است بپرسید چه ضرورتی دارد که با PHP یک اکانت ایمیل در سرور خودمان (یا سرور دیگر) ایجاد کنیم؟!
پاسخ این است که ممکن است بخواهید به صورت آنلاین و آنی و بدون حضور و دخالت خودتان، برای کاربران سایت (یا لااقل کاربران یک بخش خاص مانند مدیریت) یک اکانت ایمیل ایجاد کنید. در اینصورت 2 راه معمول برای این کار وجود دارد:
-
استفاده از دستورات تحت سیستمعامل
دستورات سیستمعاملی بسیار قدرتمند بوده و با استفاده از آن به سادگی میتوان یک یوزر برای ftp, email, database و ... ایجاد کرد. دستورات سیستمعاملی نیز از طریق محیط PHP (با فرامینی همچون exec و ...) قابل اجرا هستند.
-
استفاده از API کنترل پنل
بسیاری از سرورها (برای امنیت بیشتر) امکان اجرای دستور سیستمعاملی از طریق PHP را میبندند. اما از طریق API یی که اغلب کنترلپنلها (cPanel, DirectAdmin و ...) دارند، شما به سادگی میتوانید یک یوزر برای ftp, email, database و ... ایجاد کنید.
یکی از کاربردهای جالب این کار (ایجاد آنی اکانت ایمیل) را در سایتهای «ایمیل موقت» مثل
10minutemail میتوان مشاهده کرد.
CMS و برنامه مدیریت ایمیلها به صورت آماده
برای دریافت و ارسال ایمیل از یک اکانت، برنامههای مدیریت رایگان و قدرتمند خوبی وجود دارد که همراه اغلب کنترلپنلها هم نصب میشود. SquirrelMail یک نمونه ساده آن و RoundCube یک نمونه پیشرفتهتر آن است که به هر دو به زبان PHP نوشته شدهاند. برنامه ساده و جدید Kite نیز یک نمونه زیبا و چشمنواز از اینگونه برنامههاست که به زبان پایتون نگاشته شده و سعی کرده تا حد زیادی ظاهرش شبیه جیمیل باشد. در اینجا 10 برنامه دیگر نیز معرفی شده است.
با اینگونه برنامهها، هم میتوان ایمیلهای همان دامنه و سروری که برنامه روی آن نصب است را چک کرد و هم میتوان اکانتهای ایمیلتان در سایر سرورها (حتی Gmail) را چک کنید. این امر خصوصا برای زمانی که دسترسی به نام آن دامنه مسدود شده باشد، میتواند مفید باشد.
یادداشتهای مرتبط
- API چیست؟
- سرویس های آنلاین رایگان برای نوشتن، تست و بهینه سازی کدهای برنامه نویسی
- لیست مواردی که برای امنیت برنامه PHP لازم است چک شود
- کاربردهای CURL در پی اچ پی
- تشخیص و کشف نوع، نام و مشخصات مرورگر کاربران سایت
- انواع روش های شناسایی و احراز هویت کاربران یک صفحه وب
- ساخت PDF آنلاین
- کار با قابلیت Page Visibility و کاربردهای آن
- قلمرو متغیرها در پی اچ پی و جاوا اسکریپت
- بهینه سازی و کاهش حجم تصاویر برای استفاده در صفحات وب
- تجارت و بازاریابی ایمیلی
- روش ها و تکنیک های پنهان کردن ایمیل
- تجزیه و ترکیب URL در PHP
- نکاتی در مورد نسخه جدید PHP 5.5
- همه آن چیزهایی که لازم است درباره ی فید بدانید
- بهینه سازی آنلاین سی اس اس و جاوا اسکریپت
- انواع راه های تولید کد QR با پی اچ پی و جاوا اسکریپت