ارسال ایمیل با PHP و تابع mail() و ساخت فرم تماس با ما

2.4 / 5. تعداد رای: 8

آموزش ارسال ایمیل با استفاده از PHP mail
آموزش ارسال ایمیل با استفاده از PHP mail

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

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

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

ارسال ایمیل با PHP

استفاده از این روش نسبت به موارد دیگر دشواری ندارد و اگر شما تمامی موارد گفته‌شده در اینجا را گام‌به‌گام انجام دهید، قادر خواهید بود به‌راحتی از تابع mail()، برای ارسال ایمیل‌های خود استفاده کنید.

خب قبل از اینکه به سراغ آموزش مورد گفته‌شده برویم باید حتماً از فعال و روشن بودن سرویس SendMail خود مطمئن شوید.

ابتدا سرویس Sendmail را فعال کنید

این نکته را به یاد داشته باشید که شما برای روشن کردن این سرویس باید حتماً دسترسی مدیر داشته باشید. در وهله اول باید وارد پنل مدیریتی‌هاست خود شوید و وارد قسمت Emails» Mail Service Control شوید.

با کلیک کردن بر روی گزینه موردنظر یک صفحه برای شما باز خواهد شد که می‌توانید با استفاده از گزینه‌هایی که در آنجا قرار دارد Mail Service را فعال یا غیرفعال کنید. البته این مورد به‌صورت پیش‌فرض فعال است و شما فقط باید این روند را برای اطمینان بیشتر طی کنید.

حالا یک فایل تست برای PHP Mail بسازید

خب در قدم بعدی شما باید یک پوشه PHP Mail Script بسازید و آن را در public_html قرار دهید. برای ساخت این پرونده باید وارد پنل هاست خود شوید و از بخش File Manager، Go to File Manager را انتخاب کنید.

پس‌ازآن شما به یک صفحه جدید هدایت خواهید شد که می‌توانید با کلیک کردن بر روی “Add New” یک فایل جدید بسازید. حالا باید یک اسم برای این پوشه انتخاب کنید و بر روی “Create” کلیک کنید.

فایل جدید، با اسمی که برای آن انتخاب کرده‌اید به فایل‌های شما اضافه‌شده است، تنها کاری که باید انجام دهید این است که بر روی آن دبل کلیک کنید تا فایل برای شما باز شود. قطعه کد زیر را در آن جایگذاری کنید و اطلاعات خواسته‌شده را در آن وارد کنید، سپس بر روی “Save” کلیک کنید. (اطلاعات خواسته‌شده در عنوان بعدی توضیح داده شده است.)

<?php
    ini_set( 'display_errors', 1 );
    error_reporting( E_ALL );
    $from = "test@mihanwp.com";
    $to = "test@gmail.com";
    $subject = "Checking PHP mail";
    $message = "PHP mail works just fine";
    $headers = "From:" . $from;
    mail($to,$subject,$message, $headers);
    echo "The email message was sent.";
?>

الآن شما این امکان را دارید که از طریق دسترسی YourDomain/testmail.php، با استفاده از مرورگر خود، یک ایمیل ارسال کنید. (به‌جای YourDomain: اسم دامنه‌ای که استفاده می‌کنید و testmail: اسم فایلی که ساختید را وارد کنید.) البته برای اینکه بقیه اجزای این کد را به‌درستی جایگذاری کنید باید ادامه این مقاله را مطالعه کنید.

به همین راحتی! حالا می‌‌توانید یک ایمیل ارسال کنید و از کارکرد این کد اطمینان حاصل نمایید.

بیایید اجزای PHP Mail را با هم بشناسیم

در این قسمت، قطعه کد بالا را خط‌به‌خط برای شما بررسی خواهیم کرد تا بتوانید بهتر با اجزای PHP Mail آشنا شوید و موارد خواسته‌شده را جایگذاری کنید.

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

ini_set( 'display_errors', 1 );
error_reporting( E_ALL );

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

$from = "test@mihanwp.com";

قسمت بعدی مربوط به ایمیل پذیرنده است، ایمیل کاربر را در این بخش وارد نمایید:

$to = "test@gmail.com";

عنوان ایمیل را در این بخش وارد کنید:

$subject = "Checking PHP mail";

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

$message = "PHP mail works just fine";

این خط مربوط به اطلاعات بسیار ضروری مانند آدرس فرستنده و موارد دیگر است:

$headers = "From:" . $from;

اجرای فایل PHP Mail با استفاده از قطعه کد زیر اتفاق خواهد افتاد:

mail ($to,$subject,$message,$headers);

و در آخر نیز اگر اسکریپت به‌‌درستی اجرا شده باشد این پیغام نمایش داده خواهد شد:

echo "The email message was sent.";

ساخت فرم تماس با ما در PHP

PHPMailer تنها برای ارسال ایمیل نیست و کاربردهای دیگری مانند ساخت فرم تماس با ما نیز دارد. در این بخش ما به شما آموزش خواهیم داد چگونه به‌راحتی با استفاده از PHPMailer یک فرم تماس با ما برای سایت خود بسازید.

برای این کار می‌‌توانید از کد زیر استفاده کنید:

<?php

use PHPMailer\PHPMailer\PHPMailer;

require 'vendor/autoload.php';

    $mail = new PHPMailer;

    $mail->isSMTP();

    $mail->Host = 'smtp.mihanwp.com';

    $mail->Port = 587;

    $mail->SMTPAuth = true;

    $mail->Username = 'test@mihanwp.com';

    $mail->Password = 'EMAIL_ACCOUNT_PASSWORD';

    $mail->setFrom('test@mihanwp.com', 'Mr. Drago');

    $mail->addAddress('example@gmail.com', 'Receiver Name');

    if ($mail->addReplyTo($_POST['email'], $_POST['name'])) {

        $mail->Subject = 'PHPMailer contact form';

        $mail->isHTML(false);

        $mail->Body = <<<EOT

Email: {$_POST['email']}

Name: {$_POST['name']}

Message: {$_POST['message']}

EOT;

        if (!$mail->send()) {

            $msg = 'Sorry, something went wrong. Please try again later.';

        } else {

            $msg = 'Message sent! Thanks for contacting us.';

        }

    } else {

        $msg = 'Share it with us!';

    }

?>

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Contact form</title>

</head>

<body>

<h1>Do You Have Anything in Mind?</h1>

<?php if (!empty($msg)) {

    echo "<h2>$msg</h2>";

} ?>

<form method="POST">

    <label for="name">Name: <input type="text" name="name" id="name"></label><br><br>

    

    <label for="email">Email: <input type="email" name="email" id="email"></label><br><br>

    

    <label for="message">Message: <textarea name="message" id="message" rows="8" cols="20"></textarea></label><br><br>

    <input type="submit" value="Send">

</form>

</body>

</html>

روندی که شما باید در این بخش طی کنید دقیقاً مانند همان فرآیندی است که شما در بخش قبلی طی کردید. اولین کاری که باید انجام دهید این است که یک فایل در پوشه public_html بسازید و اسم آن را به‌دلخواه انتخاب نمایید.

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

بعدازاینکه بر روی “Send” کلیک کردید، ایمیل برای کاربر ارسال خواهد شد و کاربر با Submits کردن آن می‌تواند محتوای ارسالی را در صندوق ورودی ایمیل خود مشاهده کند. ایمیلی که می‌خواهید محتوا را برای آن ارسال کنید را باید در کد بالا و در بخش زیر اضافه کنید:

$mail->addAddress('example@gmail.com', 'Receiver Name');

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

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

به‌‌عنوان مثال شما می‌‌توانید از پلاگین‌‌های Quform و Contact Form 7 برای ساخت فرم تماس با ما استفاده کنید.

رفع خطای PHP Mailer

ممکن است شما هنگام استفاده از PHP و PHPMailer با یک سری خطاهای مشترک روبه‌رو شوید که ما در این قسمت برخی از رایج‌ترین آن‌ها را برای شما به همراه نحوه رفع آن‌ها بیان خواهیم کرد.

یکی از بیشترین مواردی که هنگام استفاده از PHP و PHPMailer ممکن است برای شما پیش بیاید، رد شدن آدرس ایمیل پذیرنده یا کاربر است که این مورد با نمایش ارور “Sender Address Rejected” برای شما ارسال خواهد شد.

زمانی‌که با این خطا مواجه شدید، باید اول آدرس ایمیل کاربر را بررسی کنید و از وجود داشتن آن اطمینان پیدا کنید، پس‌ازآن اگر ایمیل اشتباهی وارد شده بود آن را تغییر دهید و دوباره ارسال کنید. علاوه‌براین شما باید بررسی کنید که SPF Record حتماً فعال باشد.

مشکل دیگری که ممکن است برای شما پیش بیاید، قرار گرفتن ایمیل‌ها در پوشه Spam است، که این مشکل ممکن است به دلایل مختلفی ازجمله مواردی که در زیر به آن اشاره‌کرده‌ایم برای شما نمایش داده شود:

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

و اما خطای دیگری که شما ممکن است با آن برخورد داشته باشید، عدم تأیید ایمیلتان توسط Gmail است. اگر شما از ایمیلی استفاده کنید که متعلق به خود نباشید و یا اینکه آن ایمیل اصلاً وجود نداشته باشد ارور “Gmail Couldn’t Verify That YourDomain.com Sent This Message” را مشاهده خواهید کرد.

به امید اینکه این مقاله برای شما مفید واقع شده باشد. موفق و سربلند باشید. 🙂

نظر شما در این مورد چیه؟

  1. U321426 ۲۷ بهمن ۱۴۰۱

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

    • Reza Rad رضا راد ۱۰ اسفند ۱۴۰۱

      سلام یکم طولانی هست جواب سوالتون و به نظرم با سرچ توی گوگل بهتر پیداش میکنید اما به طور کلی باید یک a با نام mx بسازید با آی پی ایمیل سرور و سپس رکورد mx با اون رکورد a بسازید.

  2. U311836 ۲ اسفند ۱۴۰۰

    سلام، با تشکر از سایت و مطلب خوبتون
    راستش من توی php اطلاعاتی ندارم. فایل تست اول رو من ایجاد کردم و آدرسهای ایمیل خودم رو هم جایگزین کردم ولی ایمیلی ارسال نمیشه! آیا نیاز به فایلهای دیگه و یا احیانا تغییراتی توی هاست داره؟ من در سی پنل و روی هاست واقعی تست میکنم
    با سپاس

    • Reza Rad رضا راد ۴ اسفند ۱۴۰۰

      سلام تغییرات هاست با مدیریت هست و اگر تنظیمات سرور صحیح باشه باید ارسال کنه

  3. U38410 ۵ تیر ۱۴۰۰

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

    • Reza Rad رضا راد ۵ تیر ۱۴۰۰

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

  4. U38410 ۵ تیر ۱۴۰۰

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

    • Reza Rad رضا راد ۵ تیر ۱۴۰۰

      سلام وقت بخیر. بله افزونه‌های فرم ساز زیادی هست با چنین قابلیت‌هایی

      • U38410 ۶ تیر ۱۴۰۰

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