ساخت بدنه پیغام از فرم و ارسال با ایمیل

آموزش های زیادی وجود دارند برای ایجاد بدنه پیغام و قرار دادن آن در هدر ارسال ایمیل که میگویند بدنه پیغام را به این شکل ایجاد کنید :

خب اگر فرم شما فقط همین سه فیلد را دارد از همین روش استفاده کنید.

این کار یک برچسب برای مشخص کردن فیلدی که ورودی از آن می آید اضافه می کند و دو کاراکتر بازگشت و خط جدید بین هر کدام قرار می دهد. این برای تعداد کم فیلد مناسب است اما برای فیلد های بیشتر می تواند به هم ریخته شود، مخصوصا برای فیلد هایی که خروجی آن ها آرایه است.

در این مطلب می خواهم از روشی استفاده کنم که بدنه پیغام را به راحتی و با یک حلقه foreach ایجاد کنید. تا زمانی که به فیلدها خاصیت name با معنی مناسب دهید می توانید بدنه پیغام را به این روش ایجاد کنید.

نکته : خاصیت name نباید حاوی هیچ فاصله ای باشد. اگر می خواهید از چند کلمه برای نامگذاری استفاده کنید از آندرلاین یا خط فاصله استفاده کنید.

برای این که بدنه پیغام به صورت خودکار ایجاد شود از کد زیر استفاده می کنیم :

توضیح در مورد کد بالا :

کد بالا به وضوح در کامنت های بالای هر خط در صورت لزوم توضیح داده شده ، با این حال در مورد عملکرد کد ها بیشتر توضیح می دهم

mailSent$ = false : با نوشتن این خط کد یک متغیر ایجاد می کنیم که میتوانیم از آن برای هدایت کاربر به یک صفحه تشکر بعد از ارسال ایمیل استفاده کنیم. تا وقتی تابع ()mail با موفقیت اجرا نشده است این متغیر برابر false است.

شاید ترجیح دهید کد بالا را کپی کنید ، با این حال بهتر است که عملکرد آن را بدانید. این کد متغیر های suspect$ missing$ errors$ را برای false بودن بررسی می کند، اگر آن ها false باشند این کد با ایجاد یک حلقه روی آرایه ی expected$ و ذخیره نتیجه در message$ به صورت یک سری از جفت برچسب/مقدار بدنه پیغام را ایجاد می کند. برچسب از خاصیت name فیلد به دست می آید.

نکته ی کلیدی کد بالا که به درک این کد کمک شایانی می کند دستور شرطی است :

{item$}$ به صورت داینمیک یک متغیر بر مبنای مقدار item$ ایجاد می کند. هر بار که حلقه اجرا می شود item$ دارای مقدار عنصر کنونی در آرایه expected$ است. اولین عنصر name است بنابر این {item$}$ به صورت داینمیک متغیری با نام name$ ایجاد می کند و در عمل دستور شرطی به این تبدیل می شود :

در تکرار بعد حلقه {item$}$ یک متغیر با نام email$ ایجاد می کند و این کار روی تمام عناصر ادامه پیدا می کند.

نکته حیاتی در مورد کد بالا این است که بدنه پیغام تنها از موارد درون آرایه expected$ ایجاد می شود و باید نام همه فیلدهای فرم را در این آرایه قرار دهید.

اگر فیلد به عنوان اجباری مشخص نشده است و خالی باشد مقدار آن برابر no selected قرار می گیرد.

کد بالا مقادیر از عناصر چند انتخابی که به صورت آرایه ارزیابی می شوند را نیز پردازش می کند. مانند گروه های چک باکس و لیست های <select> که به صورت زیر آرایه هایی از آرایه POST_$ ارسال می شوند. تابع ()implode زیر آرایه ها را به رشته های متنی جدا شده با ویرگول تبدیل می کند.

هر برچسب از خاصیت Name فیلد عنصر کنونی آرایه expected$ به دست می آید.

توضیح در مورد تابع ()str_replace : اولین آرگومان یک آرایه حاوی خط فاصله و آندرلاین است که اگر یکی از این دو در خاصیت name پیدا شود با آرگومان دوم که یک تک فاصله است جایگزین می شود.  آرگومان سوم هم مقداری است که باید در آن جستجو و جایگزینی انجام شود.

سپس با تابع ()ucfirst اولین حرف بزرگ می شود.

بعد از این بدنه پیغام درون یک رشته متنی قرار گرفت این متن با تابع ()wordwarp طولش به 70 کاراکتر محدود می شود.

کد ارسال ایمیل هنوز ایجاد نشده است اما برای آزمایش mailsent$ برابر true قرار می گیرد.

این کد ها را باید درون فایل پردازشگر ایمیل قرار دهیم و در بالای فرم خود اینکلود کنیم. زیرا در همه ی فرم ها مشترک است.

در فایل contact.php خود کد زیر را قرار می دهیم :

توضیح در مورد کد بالا :

در ابتدا بررسی می شود که فرم ارسال شده و ایمیل آماده ارسال است یا نه.

سپس مقدار درون message$ و headers$ را به تابع ()htmlentities دادیم تا اطمینان حاصل شود که مرورگر به خوبی آن را نمایش می دهد. چنانچه آزمایش با موفقیت انجام شده باشد با وارد کردن مقادیر صحیح در فیلد ها با زدن دکمه ی ارسال بدنه پیغام و هدرها به درستی در پایین صفحه نمایش داده می شوند.

در این صورت آماده اضافه کردن کد برای ارسال ایمیل هستیم.

خب فرض کنیم که ازمایش شما با موفقیت به اتمام رسید و مقادیر ورودی و هدر چاپ شد. اکنون میخواهیم بگوییم که فرم واقعا با ایمیل ارسال شود.

در فایل پردازشگر ایمیل به جای

کد پایین را قرار می دهیم.

در این کد ادرس مقصد ، خط موضوع ، بدنه پیغام که ایجاد کردیم و هدرها را به تابع ()mail دادیم. اگر اداره ایمیل توسط سرور ایمیل موفق باشد مقدار true بر گردانده می شود. اگر خطا به وجود آمده باشد مقدار false برگردانده می شود و دستور شرطی عنصر به نام mailfail به آرایه errors$ اضافه می کند و به شما اجازه می دهد تا ورودی کاربر را در زمان نمایش دوباره فرم نگه دارید !

هدایت کاربر به صفحه ی تشکر در صورت موفقیت آمیز بودن ارسال ایمیل

به سراغ contact.php خود بر میگردیم ، به بالای فرم ، جایی که پردازشگر را اینکلود (ریکوایر) کردیم. میخواهیم تابع header را فراخوانی کنیم و این تابع باید در بالای صفحه قرار بگیرد.

آدرس www.example.com را با آدرس سایت خود عوض کنید.

این دستور بررسی می کند که آیا mailsent$ برابر با true است یا خیر. اگر برابر با true بود ()header کاربر را به صفحه tank_you.php هدایت می کند که در آن ذکر شده است که پیغام ارسال شده است. دستور exit در خط بعدی اطمینان حاصل می کند که اسکریپت بعد از هدایت کاربر به اتمام می رسد.

اگر mailsent$ برابر با false باشد صفحه contact.php دوباره نمایش داده می شود و لازم است که به کاربر درباره عدم ارسال پیغام اخطار داده شود.

شرط های اصلی درون پرانتز قرار می گیرند، بنابر این هر جفت پرانتز به عنوان یک واحد در نظر گرفته می شود. اخطار دربراه عدم ارسال ایمیل تنها وقتی نمایش داده می شود که فرم ارسال شده و عبارت های مشکوک در آن پیدا شده باشند یا اگر فرم ارسال شده و [‘mailfail’]errors$ دارای مقدار باشد.

یادداشت آخر

کد نمایش دهنده بدنه پیغام و هدرها را که به صورت آزمایشی در پایین contact.php ( شامل تگ های pre ) بود را حذف کنید.

دقت کنید که در آزمایش محلی این اسکریپت ممکن است در نهایت به صفحه تشکر منتقل شوید ولی هیچ ایمیلی ارسال نشود زیرا محیط آزمایشی شامل سرور ارسال ایمیل نیست.

2 دیدگاه در “ساخت بدنه پیغام از فرم و ارسال با ایمیل”

  1. سلام
    ممنون از محتوای خوبی که منتشر
    میکنید.
    ما به همراه یک گروه از متخصصین حوزه وب گروه تلگرامی جامعه وبمستران ایران را لانچ کردیم.

    با توجه به اینکه شما هم در این زمینه فعال هستید خوشحال می شیم به ما بپیوندید
    تا تعاملات مفیدی باهم داشته باشیم
    لینک گروه خدمتتون
    https://t.me/joinchat/DBhKUBJE3gUMxzABig66Ig

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

5 × چهار =