ارسال ایمیل در برنامه های تحت وب مسئله ای معمولی و پر کاربرد است که هر برنامه نویسی که در سطح واقعی فعالیت میکند، به ارسال ایمیل با اهداف مختلف نیاز پیدا خواهد کرد.
در زبان برنامه نویسی محبوب PHP توابعی به صورت پیشفرض برای ارسال ایمیل وجود دارد که گزینه های بسیاری را برای ارسال ایمیل در اختیار برنامه نویسی قرار میدهد. با استفاده از تابع معرفی شده در پی اچ پی، میتوانیم ایمیل های متنی یا ایمیل هایی با محتوای HTML حتی همراه با فایل ضمیمه ارسال کنیم.
البته استفاده از این نوع ارسال ایمیل در یک برنامه، بعضاً ممکن است به دلیل محدودیت های سرور، در مقیاس بسیار بزرگ چندان کارآمد نبوده و موجب شود به سمت روش های دیگری روی آوریم. اما در مقیاس معمولی، روشی خوب، مناسب و ساده است.
در برنامه های تحت وب، ممکن است به دلایل مختلفی نیاز به ارسال ایمیل احساس شود، برخی از این دلایل عبارتند از:
- اطلاع رسانی کاربران از رویدادهای مهمی که در سیستم رخ داده است.
- کاربران بتوانند از طریق فرم های تماس، با مسئول سایت ارتباط برقرار کنند.
- توسعه دهنده یا پشتیبان سیستم از وضعیت پیش بینی نشده و خطاهای احتمالی سیستم مطلع شود.
- ارسال خبرنامه به کاربران مشترک
- ارسال ایمیل خوش آمد گویی / فعالسازی حساب کاربری و یا فراموشی رمز عبور برای کاربران
- ارسال ایمیل های مرتبط با کاربران نظیر فاکتور، وضعیت سفارش، اطلاعات سفارش و …
همانطور که میبینید با اهداف مختلفی میتوانیم در سیستم خود امکان ارسال ایمیل را در نظر بگیریم.
ارسال ایمیل با تابع mail در PHP
یکی از ساده ترین روش های ارسال ایمیل در پی اچ پی استفاده از تابع mail()
که در این زبان از پیش تعریف شده است، می باشد. این تابع از پروتکل SMTP استقاده کرده و بدون درخواست نام کاربری و رمز عبور مربوط به ایمیل تعریف شده، اقدام به ارسال ایمیل از سرور میکند.
ساختار کلی تابع mail()
به صورت زیر است.
mail( TO, SUBJECT, MESSAGE, HEADERS, PARAMETERS );
سه آرگوما اول این تابع به صورت اجباری و دو پارامترد یگر اختیاری است.
- پارامتر TO : آدرس ایمیل دریافت کننده یا دریافت کنندگان ایمیل را مشخص میکند.
- پارامتر SUBJECT : مشخص کننده موضوع ایمیل ارسال شده می باشد که در صندوق پستی دریافت کننده نمایش داده میشود.
- پارامتر MESSAGE : محتوای پیامی است که قرار است به صورت ایمیل به دریافت کننده (ها) ارسال شود. این پیام میتواند چند خطی باشد با این شروط که هر خط با کاراکتر خط جدید (
\n
) از یکدیگر جدا شده و هر خط حداکثر حاوی 70 کاراکتر باشد. - پارامتر HEADERS : هدرهای افزوده شده برای ایمیل را مشخص میکند. این هدرها شامل آدرس فرستنده ایمیل و مقادیر BCC و CC و … می باشد.
- پارامتر PARAMETERS : پارامترهای اضافی برای برنامه های پست الکترونیک را مشخص میکند.
توجه داشته باشید که برای مشخص کردن چند گیرنده برای ایمیل ارسالی، میتوان در پارامتر اول تابع mail()
، تمام آدرس های گیرندگان را که با علامت کاما (,
) از یکدیگر جدا شده اند را قرار داد.
پس از صدا زده شدن تابع mail()
، سعی میشود ایمیل مورد نظر ارسال شود. به عنوان خروجی تابع، اگر true داشته باشیم، به این معناست که ایمیل به موفقیت از سرور ما ارسال شده و در صورتی که با false مواجه شویم، متوجه خواهیم شد مشکلی در ارسال ایمیل به وجود آمده است.
سه پارامتر اول به عنوان ورودی تابع، مشخص و واضح است. در ادامه ابتدا به بررسی چگونگی تعریف هدرها برای یک ایمیل خواهیم پرداخت و سپس ساختار کلی ارسال یک ایمیل را بررسی میکنیم.
تنظیم هدر (header) برای ایمیل در PHP
همانطور که در ابتدای آموزش گفته شد، هدرها برای مشخص کردن تنظیمات و اطلاعات اضافی ایمیل در حال ارسال استفاده میشوند. به عنوان مثال میتوان با استفاده از هدرهای ایمیل، آدرس فرستنده، آدرس های گیرنده به صورت BCC و CC و نیز فرمت و کاراکتر سِت (یونی کد یا charset) ایمیل را مشخص کنیم.
در صورتی که بخواهیم به همراه ایمیل، فایلی را به عنوان ضمیمه (attachment) ارسال کنیم، می بایست در header ایمیل تعریف شود.
یک ساختار ساده برای هدر ایمیل را میتوان به صورت زیر در نظر گرفت.
<?php $header = "From:sender@domain.com \r\n"; $header .= "Cc:cc@targetdomain.com \r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-type: text/html\r\n"; ?>
نوع header یک ساختار متنی است که با راحتی قابل خواندن و فهمیدن است. در صورتی که کدهای ایمیل های دریافتی خود در پست الکترونیکی تان را نیز بررسی کنید، معمولاً در ابتدای تمام ایمیل های ساختاری مشابه ساختار فوق را مشاهده خواهید کرد که میتواند حاوی اطلاعاتی در مورد سرور ارسال کننده ایمیل باشد.
در قطعه کد فوق مشخص است که ابتدا فرستنده ایمیل (sender@domain.com) را مشخص کرده ایم، سپس یک دریافت کننده مخفی به صورت cc تعریف کرده و در ادامه ورژن ارسال ایمیل و نوع محتوای درون پیام (Message) را مشخص کرده ایم.
کاراکترهای \r\n
در انتهای هر خط، به معنی ایجاد خط جدید است. یعنی هر کدام از اطلاعات فوق را در یک خط نوشته و به تابع میدهیم.
در سومین خط، یک ورژن برای MIME
انتخاب کرده ایم. MIME در حقیقت یک استاندارد جهانی برای ارسال و دریافت ایمیل است که از طریق این استاندارد ایمیل های ارسالی در دستگاه های مختلف به خوبی شناخته و خوانده میشود. (MIME مخفف Multipurpose Internet Mail Extensions)
اطلاعات هدر ایمیل را به صورت مرتب تر و کلی تر میتوانیم به صورت زیر نیز تعریف کنیم.
<?php $headers = "From: Sender Name < sender@domain.com >\n"; $headers .= "Cc: CC Name < cc@targetdomain.com >\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=utf-8\r\n"; ?>
در قسمت Content-Type
مقداری نیز برای یونی کد (charset) محتوا مشخص کرده ایم.
مقادیر دیگری نیز میتوانیم به عنوان هدر در ایمیل خود ارسال کنیم.
برای مثال، با استفاده از تعریف ویژگی زیر میتوان آدرس ایمیل دریافت کننده پاسخ ایمیل را مشخص کرد.
Reply-To: reply@domain.com
با این کار، وقتی دریافت کننده ایمیل، به پاسخ دادن به ایمیل دریافتی ما اقدام میکند، ایمیل ارسال شده توسط او به آدرس تعریف شده در این ویژگی فرستاده میشود. با استفاده از این روش میتوانیم آدرس گیرنده پاسخ و فرستنده ایمیل را از یکدیگر متمایز کنیم.
ویژگی های دیگری نیز میتوان تعریف کرد که از اهداف این آموزش خارج است، اما میتوانید به جستجو در مورد نحوه تعریف اولویت (priority)، سیستم و ورژن پلتفرم فرستنده ایمیل و … بپردازید.
بسیار خب، اکنون میتوانیم با سادگی و با تعریف مقادیر مورد نیاز، یک ایمیل به مقصد مورد نظرمان ارسال کنیم.
قطعه کد زیر یک پیام حاوی یک متن تستی را به آدرس مشخص شده ارسال میکند.
<?php $to = "user@mailserver.com"; $subject = "موضوع ایمیل"; $message = "سلام! \n این یک ایمیل برای تست ارسال می باشد. "; $header = "From:sender@domain.com \r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-type: text/html\r\n"; $res = mail ($to,$subject,$message,$header); if( $res == true ) { echo "ایمیل با موفقیت ارسال شد!"; }else { echo "مشکلی در ارسال ایمیل به وجود آمده است!"; } ?>
ارسال ایمیل با قالب html در php
در حالت عادی، زمانی که اقدام به ارسال ایمیل با استفاده از تابع mail()
میکنیم، با محتوای متن پیام ما به صورت متن ساده (plain text) برخورد میشود. در صورتی که بخواهیم در متن ایمیل خود از تگ های HTML نیز استفاده کنیم، میتوان هماننده ویژگی هایی که بالاتر تعریف شد، در قسمت content-type
خود مشخص کنیم که ایمیل حاوی تگ های html نیز هست. به این صورت پیام های ارسالی ما به همراه با قالب بندی انجام شده با html ارسال میشود.
<?php $to = "user1@mailserver.com, user2@mailserver.com"; $subject = "ایمیل با ساختار html"; $message = '<html><head>'; $message .= '<style>.colored{color:red;}</style>'; $message .= '</head><body>'; $message .= '<p>کاربر گرامی، سلام</p>'; $message .= '<p class="colored">این یک متن با رنگ متفاوت در ایمیل ارسالی است!</p>'; $message .= '</body></html>'; $headers = "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n"; $headers .= 'From: <test@domain.com>' . "\r\n"; mail($to, $subject, $message, $headers); ?>
در به روز رسانی بعدی این آموزش، به چگونگی ارسال فایل ضمیمه به همراه ایمیل خود خواهیم پرداخت.
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
سلام یه مشکلی دارم
من الان کد رو که روی دامنم اجرا میکنم ایمیل ارسال نمیشه و طبق کد شما میگه ایمیل ارسال نشد
نمیدونید مشکل از چیه؟
سلام
داخل هاست میزبانتون امکان ارسال ایمیل با اسکریپت وجود داره؟ از سرویسدهندهتون سؤال کنید. یکی از رایجترین مشکلاته.
سلام مگه رمز ایمیل را نباید بزنیم جوابش را ایمیل کنید
سلام
خیر نیازی نیست. شما فقط آدرسش رو انتخاب میکنید. این ارسال با اسکریپته و از روی سرور خودتون ارسال میشه. البته ممکنه برای جلوگیری از اسپم سرورها محدودیتهایی ایجاد کنند که از دامینهای دیگه نتونید بفرستید.
سلام من برنامه نویس اندروید هستم و میخوام به در آمد برسم
متأسفانه ما تجربه زیادی در حوزه موبایل نداریم.
روشهای درآمدی مختلفی در حوزه برنامهنویسی داریم که سعی داریم از هفتهٔ آینده در پیج اینستاگرام درموردش بحث کنیم. البته در آینده هم ویدئوهایی در سایت منتشر میکنیم.
در مجموع باید با روشهای درآمدی آشنا بشید و یک یا دوتا رو انتخاب کنید؛ مثلاً استخدامی، فریلنسری یا اجرای یه ایده سه تا از پرطرفدارترینها هستند.
عالی بود، همیشه موفق باشید
سلامت باشی حمید عزیز.
سلام
اینطوری که گفتید میشه از یه اسم و دامین دیگه هم ایمیل بفرستم. درسته؟
سلام. بله امکانش هست. اما به دلیل جلوگیری از اسپم، معمولا این کار توسط سرور میزبان منع میشود یا اگر برای ارسال ایمیل با php از دامین سرویسهای ایمیلی استفاده کنید احتمال اسپم شدن بسیار زیاد میشود.
عالیه که اموزش هاتون قدم به قدمه مرسی