السلام عليكم اعمل على موقع php اريد ان اضيف ميزة التحقق من البريد الاكترونى استخدمت مكتبة phpmailer
ولامن حاليا المكتبة لاتعمل هل يوجد طريقة اسهل لعمل هذة المهمة شكرا مقدما
من خلال PHPMailer عليك توليد توكن عند تسجيل الحساب من قبل المستخدم، وتخزين التوكن بجانب الإيميل الخاص به في قاعدة البيانات.
ثم إرسال بريد تحقق إلى إيميل المستخدم به رابط يحتوي على ذلك التوكن، وعند الضغط عليه يتم التحقق من الإيميل.
وإليك توضيح:
require 'PHPMailer/PHPMailer.php'; $mail = new PHPMailer\PHPMailer\PHPMailer(true); $mail->setFrom('your_email@example.com', 'Your Name'); $mail->addAddress($user_email, $user_name); $mail->Subject = 'Verify Your Email Address'; $token = bin2hex(random_bytes(16)); // عليك كتابة كود لحفظ التوكن في قاعدة البيانات $verify_link = 'https://example.com/verify-email?token=' . $token; $mail->Body = 'Please click on the following link to verify your email address: ' . $verify_link; if (!$mail->send()) { echo 'Error sending email: ' . $mail->ErrorInfo; } else { echo 'Email sent successfully!'; }
أما بدون الإعتماد على المكتبة PHPMailer، فستحتاج إلى إنشاء دالة لإرسال كود إلى بريد المستخدم بالإعتماد على دالة mail() في php والكود تستطيع إرساله بشكل مباشر ليدخله المستخدم أو في رابط التحقق نفسه ويقوم هو بالضغط عليه مباشرًة، ثم إنشاء دالة للتحقق من الكود المُرسل من قبل المستخدم.
لكن دالة mail لا تعمل مع جميع مقدمي خدمة البريد الإلكتروني وقد يتم تحديد البريد الذي ترسله على أنه spam لذا لن يصل للمستخدم.
تظهر هذه المشكلة
Fatal error: Uncaught PHPMailer\PHPMailer\Exception: SMTP Error: Could not connect to SMTP host. Failed to connect to server in C:\Program Files\Ampps\www\api-server\PHPMailer\src\PHPMailer.php:2282 Stack trace: #0 C:\Program Files\Ampps\www\api-server\PHPMailer\src\PHPMailer.php(2058): PHPMailer\PHPMailer\PHPMailer->smtpConnect() #1 C:\Program Files\Ampps\www\api-server\PHPMailer\src\PHPMailer.php(1687): PHPMailer\PHPMailer\PHPMailer->smtpSend() #2 C:\Program Files\Ampps\www\api-server\PHPMailer\src\PHPMailer.php(1521): PHPMailer\PHPMailer\PHPMailer->postSend() #3 C:\Program Files\Ampps\www\api-server\index.php(27): PHPMailer\PHPMailer\PHPMailer->send() #4 {main} thrown in C:\Program Files\Ampps\www\api-server\PHPMailer\src\PHPMailer.php on line 2282
هل قمت بتكوين تفاصيل خادم SMTP بشكل صحيح؟ وهم:
أيضًا تستطيع ضبط SMTPDebug بقيمة 2 للحصول على تفاصيل أكثر عن الخطأ.
للتوضيح تلك هي الإعدادات التي يجب عليك ضبطها:
$mail = new PHPMailer\PHPMailer\PHPMailer(); $mail->isSMTP(); $mail->SMTPDebug = 2; $mail->Host = 'smtp.host.com'; $mail->SMTPAuth = true; $mail->Username = 'username'; $mail->Password = 'password'; $mail->SMTPSecure = PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS; // أو PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_SMTPS $mail->Port = 587; // أو 465 لـ SSL، أو 25 لغير المشفر $mail->setFrom('from@gmail.com', 'Mailer'); $mail->addAddress('to@gmail.com', 'User'); $mail->Subject = 'Here is the subject'; $mail->Body = 'This is the body in plain text for non-HTML mail clients'; if(!$mail->send()) { echo 'Message could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; } else { echo 'Message has been sent'; }
عليك تعديل القيم السابقة بما لديك.
أنصحك بقراءة التالي:
بعد التعديل على الكود والتاكد ان كل شى على ما يرام يظهر هذا الخطا
2024-05-18 22:44:43 SERVER -> CLIENT: 220 smtp.gmail.com ESMTP ffacd0b85a97d-354bae5ef22sm2604403f8f.67 - gsmtp
2024-05-18 22:44:43 CLIENT -> SERVER: EHLO localhost
2024-05-18 22:44:43 SERVER -> CLIENT: 250-smtp.gmail.com at your service, [197.59.91.87]250-SIZE 35882577250-8BITMIME250-STARTTLS250-ENHANCEDSTATUSCODES250-PIPELINING250 SMTPUTF8
2024-05-18 22:44:43 CLIENT -> SERVER: STARTTLS
2024-05-18 22:44:43 SERVER -> CLIENT: 220 2.0.0 Ready to start TLS
SMTP Error: Could not connect to SMTP host.
2024-05-18 22:44:43 CLIENT -> SERVER: QUIT
2024-05-18 22:44:43
2024-05-18 22:44:43
SMTP connect() failed.
Message could not be sent.Mailer Error: SMTP connect() failed.
التعليقات