حل مشکل ارسال ایمیل در لوکال هاست (localhost)

حل مشکل ارسال ایمیل در لوکال هاست (localhost)

اگر یک توسعه‌دهنده وب باشید، حتما با نرم‌افزار‌های لوکال هاست (xampp یا wamp یا…)  کار کرده‌اید. و اگر با این نرم‌افزارها کار کرده‌اید، حتما با مشکل ارسال ایمیل در لوکال هاست دست و پنجه نرم کرده‌اید!

یکی از مواردی که تمام برنامه‌نویسان تحت وب با آن خیلی سروکار دارند، ارسال ایمیل به کاربران است، و این امر در نرم افزار‌های لوکال هاست بصورت پیشفرض امکان پذیر نیست.

از آنجا که ما تمام برنامه‌های خود را در لوکال هاست توسعه می‌دهیم و آن‌ها را تست و خطایابی (Debug) می‌کنیم، مشکل ارسال ایمیل در لوکال هاست برای ما برنامه‌نویسان وب مشکل بسیار بزرگی محسوب می‌شود. اما سوال اصلی اینجاست، مشکل از چیست و آیا راه حلی دارد؟ بله. لطفا با ما همراه باشید تا به حل این مشکل بپردازیم.

مشکل ارسال ایمیل در لوکال هاست از چیست؟

همانطور که می‌دانید سرور‌ها با استفاده از پروتکل SMTP که مخفف عبارت Simple Mail Transfer Protocol است، اقدام به ارسال ایمیل به سرور‌های دیگر می‌کنند. پس برای اینکه یک سرور بتواند ایمیلی ارسال کند باید بتواند به خوبی با این پروتکل متصل باشد و اقدامات لازم را انجام دهد.

حال سوال اینجاست که لوکال هاست ما به چه پورتی (port) برای ارسال ایمیل متصل است؟ به هیچ پورتی! پس طبیعتا نمی‌تواند ایمیلی ارسال کند. مشکل اصلی هم دقیقا همین‌جاست. برای ارسال ایمیل از طریق لوکال هاست ما باید پروتکل SMTP را برای لوکال هاست خود تنظیم کنیم.

تنظیم پروتکل SMTP در لوکال هاست

برای تنظیم پروتکل SMTP در لوکال هاست، ابتدا به مسیر نصب لوکال هاست‌ خود بروید و درون پوشه php به‌دنبال فایلی با نام php.ini باشید. در این فایل کل تنظیمات مربوط به پیکربندی زبان PHP وجود دارد که می‌توانید آنها را شخصی‌سازی کنید.

فایل php.ini را با یک ادیتور (notepad یا هرچیز دیگر)  باز کنید و با استفاده از کلید‌های ترکیبی Ctrl+F عبارت [mail function] را در این فایل پیدا کنید.

در ادامه این عبارت می‌توانید دستور‌های زیر را پیدا کنید، که به ترتیب باید مقادیر صحیح را برای آنها قرار دهید. در این مثال ما مقادیر مربوط به ارسال ایمیل با استفاده از اکانت جیمیل را بررسی می‌کنیم:

SMTP = smtp.gmail.com
smtp_port = 587
sendmail_from = my-gmail-id@gmail.com
sendmail_path = “\”C:\xampp\sendmail\sendmail.exe\” -t”

در خط اول باید آدرس سرور SMTP را وارد کنید که ما مقدار smtp.gmail.com را تنظیم کردیم که آدرس سرور SMTP مربوط به اکانت‌های gmail است.

در خط دوم باید شماره پورت SMTP را وارد کنید. این شماره در سرور‌های مختلف متفاوت است، در این مثال چون از سرور جیمیل استفاده می‌کنیم عدد 587 را وارد کردیم که شماره پورت SMTP سرور جیمیل است.

در خط سوم باید آدرس ایمیل خود را وارد کنید که به اصطلاح ایمیل‌های ارسالی از طرف آن ایمیل ارسال شوند.

در خط چهارم باید آدرس فایل sendmail.exe را به فایل php.ini معرفی کنیم. در اینجا کافیست تا اگر لوکال‌هاست خود را در مسیر دیگری نصب کردید. این مسیر را ویرایش کنید.

خب تا اینجا تنظیمات مربوط به فایل php.ini تمام شد. اما این تنظیمات فقط برای ارسال ایمیل با استفاده از زبان PHP لازم بود. تنظیمات اصلی در جای دیگری است. به مسیر نصب لوکال هاست رفته و فایل sendmail.ini که در پوشه sendmail قرار دارد را با یک ادیتور متن باز کنید.

تمام کدهای درون این فایل را پاک کرده و کد زیر را در آن قرار دهید:

[sendmail]
smtp_server=smtp.gmail.com
smtp_port=587
error_logfile=error.log
debug_logfile=debug.log
auth_username=my-gmail-id@gmail.com
auth_password=my-gmail-password
force_sender=my-gmail-id@gmail.com

همانطور که مشاهده می‌کنید، آدرس سرور (smtp_server)، آدرس پورت (smtp_port)، آدرس جیمیل خود (auth_username و force_sender) و همچنین پسورد جیمیل خود (auth_password) را برای ارسال ایمیل در لوکال هاست تنظیم کرده‌ایم. مقادیر مربوط به error_logfile و debug_logfile را می‌توانید بدون تغییر بگذارید.

تمام شد! حال می‌توانید در پروژه‌های خود با خیال راحت به ارسال ایمیل در لوکال هاست بپردازید.

نکته: بعد از اتمام کار حتما یکبار لوکال هاست خود را Restart کنید تا تنظیمات جدید اعمال شوند.

توجه: احتمالا گوگل به شما اجازه ارسال ایمیل از طریق دسترسی به پورت smtp را نمی‌دهد (بخاطر مسائل امنیتی). اما شما می‌توانید در تنظیمات اکانت گوگل خودتان با رفتن به بخش security و از قسمت less secure app access این اجازه را به نرم‌افزار‌های دیگر بدهید تا با استفاده از پورت smtp به اکانت گوگل شما متصل شوند.

تنظیمات اکانت گوگل
مرحله اول) رفتن به تنظیمات اکانت گوگل
تنظیمات Less Secure app access
مرحله دوم) روشن کردن گزینه Less secure app access

امیدوارم این آموزش کوتاه ولی کاربردی برای شما توسعه‌دهندگان مفید باشد. لطفا سوالات خود در این زمینه را در قسمت نظرات همین صفحه با ما درمیان بگذارید.