PDA

View Full Version : سوال: تفاوت تابع mail با پروتکل smtp چیست؟



dll1024
سه شنبه 05 اردیبهشت 1391, 10:06 صبح
سلام دوستان
در بسیاری از سی ام اس های پی اچ پی برای ارسال ایمیل از دو گزینه mail function و smtp استفاده می کنند. می خواهم بدانم تفاوت این دو گزینه در چیست و کدام گزینه برای چه هدفی بهتر است.

MMSHFE
سه شنبه 05 اردیبهشت 1391, 14:59 عصر
تا جایی که بررسی کردم، تابع mail برای کارهای ساده بیشتر به کار میره و برای کارهای کمی پیچیده تر (مثل Attachکردن فایل به ایمیل و...) از SMTP استفاده میشه چون نتایج بهتری ارائه میکنه.
موفق باشید.

MostafaEs3
سه شنبه 05 اردیبهشت 1391, 16:00 عصر
:متفکر: البته اگه header ها توی همین تابع mail ست بشه میشه attach هم زد روش ... این ایمیل خیلی چیز پیچیده ای هست ! ست کردن هدرها میشه گفت محرمانه اس ! چون هرچی سرچ کنید چیز خیلی بدرد بخوری پیدا نمیشه و باید با هزار بدبختی یاد گرفت یا از استاندارد های طویل RFC استفاده کرد !

amin1softco
سه شنبه 05 اردیبهشت 1391, 16:48 عصر
فرض کن شما هاستت قابلیت ارسال میل نداره یا گفته نمی تونی بیشتر از 20 تا میل در روز بوسیله من ارسال کنی یا سرور ارسال میلتون جداست یا می خواهید از طرف جیمیل ایمیل ارسال کنید در این موارد می شه از smtp استفاده کرد .
یعنی شما مشخصات اون سرور رو مشخص می کنید این پروتکل با اون سرور ارتباط برقرار می کنه و نامه ها (چه ساده چه با ضمیمه یا attachment) را تحویل میده و پروسه ارسال طی می شه .





:متفکر: البته اگه header ها توی همین تابع mail ست بشه میشه attach هم زد روش ... این ایمیل خیلی چیز پیچیده ای هست ! ست کردن هدرها میشه گفت محرمانه اس ! چون هرچی سرچ کنید چیز خیلی بدرد بخوری پیدا نمیشه و باید با هزار بدبختی یاد گرفت یا از استاندارد های طویل RFC استفاده کرد !
ولی شما یک نگاهی به کتاب شبکه آقای تننبام فصل 7 بندازید خیلی واضح همه هدر هاش رو شرح داده.
چیزه بدرد بخور کلاس phpmailer هست و چندتا دیگه که یادم نیست و خیلی هم آسونه کار کردن باهاشون یکمی سرچ کنید!!!

eshpilen
چهارشنبه 06 اردیبهشت 1391, 10:24 صبح
برای ارسال ایمیل همیشه از پروتکل SMTP استفاده میشه. SMTP زبان حرف زدن با سرورها/سرویسهای ایمیل است. یعنی مثل اینکه زبان اونا آلمانی باشه، خب شما باید با زبان آلمانی باهاشون صحبت کنی تا بفهمن چی میگی. بگی سلام، خودتی؟ حالت خوبه؟ میتونی الان بهم سرویس بدی؟ اونم میگه خوبم چی میخوای؟ شما میگی یه ایمیل دارم برای فلان آدرس... و الی آخر. بطور کلی پروتکل یعنی همین.

اما تابع mail روی سرورهای لینوکس درواقع خودش این کار رو انجام نمیده، بلکه ایمیل شما رو میده به یک برنامه ای بنام sendmail که روی سیستم عامل لینوکس هست و یک برنامهء ارسال ایمیل قدیمی و معروفه. sendmail اونوقت با سرویس های ایمیل مورد نظر تماس میگیره و با زبان SMTP باهاشون صحبت میکنه و ایمیل شما رو ارسال میکنه. ضمنا اگر در زمان خاصی به هر دلیلی موفق به برقراری ارتباط با سرور مورد نظر نشه، ایمیل ها رو نگه میداره و هر چند وقت یکبار دوباره تلاش میکنه. خلاصه داستانش اینطوریاس.

روی ویندوز تاجاییکه میدونم چون دیگه برنامهء sendmail وجود نداره مستقیما از SMTP استفاده میشه. یعنی وقتی از تابع mail استفاده میکنید دیگه ایمیل شما به یه واسطه ای بنام sendmail داده نمیشه.
حالا اینکه چرا روی لینوکس هم PHP خودش مستقیما از SMTP استفاده نمیکنه شاید بخاطر این باشه که برنامهء sendmail در محیط لینوکس روش استاندارد و متمرکز برای ارسال ایمیل هست، و ضمنا شاید در این کار نسبت به PHP کیفیت و امکانات بهتری داشته باشه (بالاخره یه برنامهء باسابقه و مجهزی هست).
البته اونایی که تجربه دارن میگن الان برنامه های بهتری نسبت به sendmail وجود دارن.

amin1softco
چهارشنبه 06 اردیبهشت 1391, 11:42 صبح
تریپه جو گیر :دی

برای ارسال ایمیل همیشه از پروتکل SMTP استفاده میشه.
نه از پروتکل imap هم استفاده می شه.

MMSHFE
چهارشنبه 06 اردیبهشت 1391, 11:44 صبح
ضمن تشکر از توضیح خوب و جامعتون، فکر میکنم منظور ایشون از پروتکل SMTP یا همون Simple Mail Transfer Protocol توابعی هستن که مستقیماً از این پروتکل استفاده میکنن و اشتباهاً اونها رو تحت عنوان پروتکل SMTP درنظر گرفتن.
موفق باشید.

MMSHFE
چهارشنبه 06 اردیبهشت 1391, 11:46 صبح
نه از پروتکل imap هم استفاده می شه.
دوست عزیز، IMAP و POP برای دریافت هستن! منبع (http://en.wikipedia.org/wiki/Internet_Message_Access_Protocol)

amin1softco
چهارشنبه 06 اردیبهشت 1391, 12:23 عصر
دعوااااااااا... چرا میزنی یخه رو ول کن :دی
ما که اولش نوشتیم تریپه جو گیر

armsoftpc
چهارشنبه 06 اردیبهشت 1391, 12:37 عصر
یه سوال توی این دعوا می خواستم مطرح کنم ، اونم این که چطور با phpmailer میل ها را دریافت کنیم ، اصلا این میل ها کجا می خواند ، ذخیره بشند.
اگر می خواهید بگید که لازم نیست که میلی رو ذخیره کنیم (با imap) خوب اون وقت اصلا phpmailer از iamp پشتیبانی نمی کنه!

amin1softco
چهارشنبه 06 اردیبهشت 1391, 13:05 عصر
phpmailer تا جایی که من می دونم یک کلاس که با php نوشته شده و از تابع mail php و پروتکل smtp استفاده می کنه و rfc رو پیاده کرده شما با چند تا تابع می تونید میل هاتون رو با ضمیمه یا انواع مختلف دیگه ارسال کنید . و تا جایی که می دونم اصلاً ربطی به دریافت میل نداره ولی خوب شاید گسترشش داده باشند.
imap هم طبق گفته دوستان فقط برای دریافت ایمیل طراحی شده .

MMSHFE
چهارشنبه 06 اردیبهشت 1391, 14:38 عصر
یه سوال توی این دعوا می خواستم مطرح کنم ، اونم این که چطور با phpmailer میل ها را دریافت کنیم ، اصلا این میل ها کجا می خواند ، ذخیره بشند.
اگر می خواهید بگید که لازم نیست که میلی رو ذخیره کنیم (با imap) خوب اون وقت اصلا phpmailer از iamp پشتیبانی نمی کنه!
اولاً که دعوایی در کار نیست. ثانیاً نمونه کد رو دانلود کنید و توی فایل index.php مشخصات نام کاربری و رمز عبور خودتون رو بنویسید و اجراش کنید تا ایمیلهای خونده نشده رو بهتون نشون بده.
موفق باشید.

MMSHFE
چهارشنبه 06 اردیبهشت 1391, 15:12 عصر
یه نکته یادم رفت بگم و اون اینکه از PHPMailer استفاده نکردم و اکستنشن php_imap خود PHP رو بکار بردم. موفق باشید.

MostafaEs3
چهارشنبه 06 اردیبهشت 1391, 15:30 عصر
آره منم یکی برای یاهو همینطوری نوشتم .

من تاحالا توی ارسال ایمیل دوتا چیز رو نفهمیدم !
اول اینکه یکسری ایمیل ها بصورت (دریافت کننده نامشخص) ارسال میشن و مستقیم میان اینباکس . با پی اچ پی نتونستم اینکارو بکنم .. یعنی حتی توی هدر ها هم که چک میکنید نوشته دریافت کننده نامشخص
دوم فونت تاهوما روی موضوع ایمیل هست که توی رشته ی کدشده ی base64 یکسری تغییرات داده بود فونتش شده بود تاهوما !!

:اشتباه:

Unique
چهارشنبه 06 اردیبهشت 1391, 15:35 عصر
دوستان کامل توضیح دادند ولی من هم توضیحاتی بدم بد نیست ، توی شبکه برای انجام هر فرآیندی از پروتکل ها استفاده میشه که برای ارسال ایمیل از 3 پروتکل SMTP,POP3,IMAP استفاده میشه که SMTP برای ارسال ایمیل هست و POP3,IMAP برای دریافت که IMAP خیلی مدرن تر و کامل تر از POP3 هست و فکر کنم (احتمال 99%) پس از پروتکل POP3 معرفی شده ، توی محیط لینوکس برای ارسال و دریافت ایمیل از MTA ها استفاده میشن مثل sendmail و postfix و ... این MTA ها بسیار به روز هستند و RFC های مربوطه را هم به خوبی پشتیبانی میکنند ، حالا شما توی php.ini باید مسیر MTA را معرفی کنید تا بشه از طریق تابع MAIL ایمیل فرستاد.
پس تابع Mail بسیار کارآمد هست و فقط شما باید خودتون Header های مناسب را بنویسید.

علاوه بر این روش کتابخونه های توی لینوکس و ویندوز هست که با توابع راحتشون اجازه میدهند شما خیلی ساده ایمیل ارسال کنید بهترین کلاسی که برای SMTP من توی php دیدم همون phpmailer هست.پس هیچ فرقی نداره شما از طریق کجا ایمیل میفرستین چون آخرش دارین با smtp کار میکنید. اما ریزه کاریهاشو نمیبینین. اگه دوست دارین امتحان کنین کافیه RFC مربوط به smtp را بگیرین و مثلا با همین telnet خود ویندوز (توی ویندوز 7 به صورت پیش فرض نصب نیست و باید خودتون نصبش کنین) شروع کنین با Mail Server یاهو یا gmail سر و کله بزنین !

برای دریافت ایمیل هم php یک افزونه شاهکار داره به نام imap http://php.net/manual/en/book.imap.php که میشه هم با pop3 و هم با imap ایمیل ها را دریافت کرد.

MMSHFE
چهارشنبه 06 اردیبهشت 1391, 16:18 عصر
یک نکته دیگه هم بد نیست بگم و اون اینکه به نحوه استفاده از تابع imap_utf8 دقت کنید که باعث میشه اطلاعاتی مثل Subject و... در ایمیلهای فارسی به شکل درست به نمایش در بیاد.
موفق باشید.

dll1024
پنج شنبه 07 اردیبهشت 1391, 10:29 صبح
مرسی از همتون
در کل سوال من این بود که برای اطلاع رسانی کاربرای مشترک سایت از طریق تابع PHPMAIL ایمیل ارسال بشه بهتره یا از طریق SMTP
واسه تعداد بالای ایمیل، چون بعد از یه مدتی کاربرای سایت زیاد میشن و تعداد ایمیل های ارسالی بالا میره.

MMSHFE
پنج شنبه 07 اردیبهشت 1391, 12:00 عصر
دوست عزیز باز هم که همون سؤال اول رو مطرح کردین. PHPMAIL و کلاس PHP-Mailer و... همگی از SMTP استفاده میکنن. توی اکثر سایتهایی که آمار بازدید زیاد دارن هم از همین تابع استفاده میشه و اگه هدرها رو به درستی تنظیم کنید، نه مشکلی ازنظر ارسال پیش میاد و نه ایمیلها Spam میشن. البته به شرطی که سرورتون اجازه ارسال اون تعداد ایمیلی که میخواین رو در فواصل زمانی کوتاه بده که باید از پشتیبانی سؤال کنید. همچنین اگه یک اکانت ایمیل روی سرورتون دارین، تنظیمات SMTP اون رو دریافت کنید و بعد، ایمیلها رو با همون تنظیمات ارسال کنید تا بعنوان ایمیل جعلی شناخته نشن.
موفق باشید.