آموزش ارسال ایمیل با PHP
در این آموزش، ما شما را مرحله به مرحله برای ساخت یک برنامه PHP که به کاربران اجازه میدهد اطلاعات خود را ثبت کنند، آنها را در یک پایگاه داده SQLite ذخیره کنند و یک ایمیل تایید با استفاده از PHPMailer ارسال کنند، راهنمایی میکنیم. در پایان این آموزش، شما یک سیستم ثبت نام کاملاً کاربردی خواهید داشت.
پیشنیازها
قبل از شروع، مطمئن شوید که موارد زیر را دارید:
- نصب PHP 7.4 یا بالاتر روی سیستم شما
- Composer برای مدیریت وابستگیها
- SQLite
- یک حساب Gmail
مرحله 1: تنظیم پروژه
ابتدا، یک پوشه جدید برای پروژه خود ایجاد کرده و وارد آن شوید:
نصب وابستگیها
از Composer برای نصب PHPMailer استفاده کنید:
composer require phpmailer/phpmailer
مرحله 2: ایجاد پایگاه داده
قبل از اینکه به کد اصلی بپردازیم، باید پایگاه داده SQLite خود را ایجاد کنیم. یک فایل به نام create-database.php
ایجاد کنید و کد زیر را در آن قرار دهید:
<?php
try {
// ایجاد اتصال به پایگاه داده SQLite
$db = new PDO('sqlite:users.db');
// ایجاد جدول کاربران
$db->exec("CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT,
phone TEXT,
email TEXT,
description TEXT
)");
echo "Database and table created successfully.";
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
این فایل را اجرا کنید تا پایگاه داده و جدول کاربران ایجاد شوند:
مرحله 3: نوشتن اسکریپت API
یک فایل به نام api.php
ایجاد کنید و کد زیر را در آن قرار دهید:
<?php
// تنظیم هدر برای پاسخ JSON
header('Content-Type: application/json');
// لود کردن فایل autoload.php از طریق Composer
require 'vendor/autoload.php';
// استفاده از کلاسهای PHPMailer
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
// ذخیره آدرس ایمیل و رمز عبور در متغیرهای سراسری
$GLOBALS['mail_address'] = 'your-email@gmail.com';
$GLOBALS['mail_password'] = 'your-app-password';
// تعریف تابع برای ارسال ایمیل تاییدیه
function sendConfirmationEmail($email, $name, $phone, $description)
{
// ایجاد نمونهای از PHPMailer
$mail = new PHPMailer(true);
try {
// تنظیمات سرور
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = $GLOBALS['mail_address'];
$mail->Password = $GLOBALS['mail_password'];
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
// گیرندگان
$mail->setFrom('your-email@gmail.com', 'Your Name');
$mail->addAddress($email, $name);
// محتوا
$mail->isHTML(true);
$mail->Subject = 'Registration Confirmation';
$mail->Body = "Hello $name,<br><br>Your registration with the following details has been received:<br><br>"
. "Phone: $phone<br>"
. "Email: $email<br>"
. "Description: $description<br><br>"
. "Thank you!";
$mail->AltBody = "Hello $name,nnYour registration with the following details has been received:nn"
. "Phone: $phonen"
. "Email: $emailn"
. "Description: $descriptionnn"
. "Thank you!";
// ارسال ایمیل
$mail->send();
return true;
} catch (Exception $e) {
error_log('Mailer Error: ' . $mail->ErrorInfo);
return $mail->ErrorInfo;
}
}
try {
// ایجاد اتصال به پایگاه داده SQLite
$db = new PDO('sqlite:users.db');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// خواندن ورودی JSON
$input = json_decode(file_get_contents(''), true);
// بررسی صحت ورودی
if (!isset($input['name'], $input['phone'], $input['email'], $input['description'])) {
throw new Exception('Invalid input');
}
// آمادهسازی و اجرای دستور SQL برای درج دادهها در جدول کاربران
$stmt = $db->prepare("INSERT INTO users (name, phone, email, description) VALUES (:name, :phone, :email, :description)");
$stmt->bindParam(':name', $input['name']);
$stmt->bindParam(':phone', $input['phone']);
$stmt->bindParam(':email', $input['email']);
$stmt->bindParam(':description', $input['description']);
$stmt->execute();
// ارسال ایمیل تاییدیه
$emailStatus = sendConfirmationEmail($input['email'], $input['name'], $input['phone'], $input['description']);
if ($emailStatus === true) {
echo json_encode(['status' => 'success', 'message' => 'User registered and email sent']);
} else {
echo json_encode(['status' => 'success', 'message' => 'User registered but email not sent', 'error' => $emailStatus]);
}
} catch (Exception $e) {
error_log('Error: ' . $e->getMessage());
echo json_encode(['status' => 'error', 'message' => $e->getMessage()]);
}
?>
توضیحات کد
تنظیم هدر برای پاسخ JSON:
header('Content-Type: application/json');
این خط، هدر پاسخ HTTP را به application/json
تنظیم میکند تا مرورگر یا کلاینت بداند که محتوای پاسخ JSON است.
لود کردن فایل autoload.php از طریق Composer:
require 'vendor/autoload.php';
این خط، فایل autoload.php
را که توسط Composer ایجاد شده است، لود میکند تا همه وابستگیهای پروژه به صورت خودکار لود شوند.
استفاده از کلاسهای PHPMailer:
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
این خطوط، کلاسهای PHPMailer
و Exception
را به اسکریپت اضافه میکنند تا بتوانیم از آنها استفاده کنیم.
ذخیره آدرس ایمیل و رمز عبور در متغیرهای سراسری:
$GLOBALS['mail_address'] = 'your-email@gmail.com';
$GLOBALS['mail_password'] = 'your-app-password';
این خطوط، آدرس ایمیل و رمز عبور (رمز عبور اپلیکیشن) را در متغیرهای سراسری ذخیره میکنند تا در سایر قسمتهای کد قابل دسترسی باشند.
تعریف تابع برای ارسال ایمیل تاییدیه:
function sendConfirmationEmail($email, $name, $phone, $description)
این تابع اطلاعات ثبتنام (ایمیل، نام، تلفن و توضیحات) را میگیرد و یک ایمیل تاییدیه ارسال میکند.
تنظیمات سرور ایمیل:
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = $GLOBALS['mail_address'];
$mail->Password = $GLOBALS['mail_password'];
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
این خطوط، تنظیمات لازم برای اتصال به سرور SMTP Gmail را انجام میدهند.
تنظیم گیرندگان و محتوا:
$mail->setFrom('your-email@gmail.com', 'Your Name');
$mail->addAddress($email, $name);
$mail->isHTML(true);
$mail->Subject = 'Registration Confirmation';
$mail->Body = "Hello $name,
Your registration with the following details has been received:
"
. "Phone: $phone
"
. "Email: $email
"
. "Description: $description
"
. "Thank you!";
$mail->AltBody = "Hello $name,nnYour registration with the following details has been received:nn"
. "Phone: $phonen"
. "Email: $emailn"
. "Description: $descriptionnn"
. "Thank you!";
این خطوط، فرستنده، گیرنده و محتوای ایمیل را تنظیم میکنند.
ارسال ایمیل:
$mail->send();
این خط، ایمیل را ارسال میکند و در صورت موفقیت، true
برمیگرداند. در صورت بروز خطا، خطا ثبت و جزئیات آن بازگشت داده میشود.
اتصال به پایگاه داده SQLite:
$db = new PDO('sqlite:users.db');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
این خطوط، اتصال به پایگاه داده SQLite را برقرار و حالت خطای PDO را به استثناها تنظیم میکنند.
خواندن ورودی JSON:
این خط، دادههای JSON دریافت شده را خوانده و به آرایه PHP تبدیل میکند.
بررسی صحت ورودی:
if (!isset($input['name'], $input['phone'], $input['email'], $input['description'])) {
throw new Exception('Invalid input');
}
این بخش، وجود تمامی فیلدهای لازم را بررسی میکند و در صورت عدم وجود، یک استثنا پرتاب میکند.
درج دادهها در پایگاه داده:
$stmt = $db->prepare("INSERT INTO users (name, phone, email, description) VALUES (:name, :phone, :email, :description)");
$stmt->bindParam(':name', $input['name']);
$stmt->bindParam(':phone', $input['phone']);
$stmt->bindParam(':email', $input['email']);
$stmt->bindParam(':description', $input['description']);
$stmt->execute();
این خطوط، یک دستور SQL برای درج دادههای کاربر در جدول users
آماده و اجرا میکنند.
ارسال ایمیل تاییدیه:
$emailStatus = sendConfirmationEmail($input['email'], $input['name'], $input['phone'], $input['description']);
if ($emailStatus === true) {
echo json_encode(['status' => 'success', 'message' => 'User registered and email sent']);
} else {
echo json_encode(['status' => 'success', 'message' => 'User registered but email not sent', 'error' => $emailStatus]);
}
مرحله 4: ایجاد فرم HTML با استفاده از Bootstrap
یک فایل به نام index.html
ایجاد کنید و کد زیر را در آن قرار دهید:
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ثبت نام کاربر</title>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<h2 class="text-center">ثبت نام کاربر</h2>
<form id="registrationForm">
<div class="form-group">
<label for="name">نام</label>
<input type="text" class="form-control" id="name" placeholder="نام خود را وارد کنید" required>
</div>
<div class="form-group">
<label for="phone">تلفن</label>
<input type="text" class="form-control" id="phone" placeholder="شماره تلفن خود را وارد کنید" required>
</div>
<div class="form-group">
<label for="email">ایمیل</label>
<input type="email" class="form-control" id="email" placeholder="ایمیل خود را وارد کنید" required>
</div>
<div class="form-group">
<label for="description">توضیحات</label>
<textarea class="form-control" id="description" rows="3" placeholder="توضیحات اضافی را وارد کنید" required></textarea>
</div>
<button type="submit" class="btn btn-primary">ثبت نام</button>
</form>
<div id="response" class="mt-3"></div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script>
$('#registrationForm').on('submit', function(event) {
event.preventDefault();
var formData = {
name: $('#name').val(),
phone: $('#phone').val(),
email: $('#email').val(),
description: $('#description').val()
};
$.ajax({
url: 'api.php',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(formData),
success: function(response) {
$('#response').html('<div class="alert alert-success">' + response.message + '</div>');
},
error: function(jqXHR, textStatus, errorThrown) {
var errorMessage = jqXHR.responseJSON ? jqXHR.responseJSON.message : 'An error occurred';
$('#response').html('<div class="alert alert-danger">' + errorMessage + '</div>');
}
});
});
</script>
</body>
</html>
مرحله 5: تست سیستم
پس از ایجاد فایلها، سرور محلی خود را اجرا کنید:
php -S localhost:8000
سپس مرورگر خود را باز کرده و به آدرس http://localhost:8000/index.html
بروید. فرم ثبت نام را پر کنید و روی دکمه “ثبت نام” کلیک کنید. اگر همه چیز به درستی تنظیم شده باشد، باید پیامی مبنی بر موفقیتآمیز بودن ثبت نام و ارسال ایمیل مشاهده کنید.
استفاده از POSTMAN برای تست API
POSTMAN یک ابزار عالی برای تست API های RESTful است. در این بخش، نحوه استفاده از POSTMAN برای ارسال درخواست به API ما را توضیح میدهیم.
مرحله 1: دانلود و نصب POSTMAN
ابتدا POSTMAN را از وبسایت رسمی POSTMAN دانلود و نصب کنید.
مرحله 2: تنظیم درخواست در POSTMAN
- باز کردن POSTMAN: پس از نصب، POSTMAN را باز کنید.
- ایجاد یک درخواست جدید:
- روی دکمه
New
کلیک کنید وHTTP Request
را انتخاب کنید.
- روی دکمه
- تنظیم روش HTTP و URL:
- روش HTTP را به
POST
تغییر دهید. - URL را به
http://localhost:8000/api.php
تنظیم کنید (با فرض اینکه سرور محلی شما روی این آدرس اجرا میشود).
- روش HTTP را به
- تنظیم هدرها:
- به تب
Headers
بروید و هدر زیر را اضافه کنید:
- به تب
Key: Content-Type
Value: application/json
تنظیم بدنه درخواست:
- به تب
Body
بروید وraw
و سپسJSON
را انتخاب کنید. - بدنه درخواست را به صورت زیر تنظیم کنید:
{
"name": "John Doe",
"phone": "123456789",
"email": "john.doe@example.com",
"description": "Test registration"
}
ارسال درخواست:
- روی دکمه
Send
کلیک کنید تا درخواست ارسال شود. - باید پاسخی مشابه زیر دریافت کنید:
{
"status": "success",
"message": "User registered and email sent"
}
استفاده از CURL برای تست API
CURL یک ابزار خط فرمان برای انتقال دادهها با استفاده از پروتکلهای مختلف است. در اینجا نحوه ارسال درخواست به API با استفاده از CURL را توضیح میدهیم.
ارسال درخواست با CURL
دستور زیر را در ترمینال یا خط فرمان خود اجرا کنید:
curl -X POST http://localhost:8000/api.php -H "Content-Type: application/json" -d '{
"name": "John Doe",
"phone": "123456789",
"email": "john.doe@example.com",
"description": "Test registration"
}'
این دستور یک درخواست POST به http://localhost:8000/api.php
ارسال میکند و دادههای JSON شامل نام، شماره تلفن، ایمیل و توضیحات را به عنوان بدنه درخواست ارسال میکند. اگر همه چیز به درستی کار کند، باید پاسخی مشابه زیر دریافت کنید:
{
"status": "success",
"message": "User registered and email sent"
}
توضیحات دستور CURL
-X POST
: مشخص میکند که این یک درخواست POST است.http://localhost:8000/api.php
: آدرس URL که درخواست به آن ارسال میشود.-H "Content-Type: application/json"
: تنظیم هدر درخواست بهapplication/json
.-d '...'
: دادههای JSON که به عنوان بدنه درخواست ارسال میشوند.
And To Do So From Now Until The Death, Whatever the Cost
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام