اذهب إلى المحتوى
  • 0

كيف يمكنني ارسال بريد الكتروني بدون ان يكون المستخدم مسجل دخول في laravel

يوسف محمد49

السؤال

Recommended Posts

  • 1

ارسال رسائل البريد الكتروني في لارافل بسيطه وهتحتاجها في معظم مشاريعك يمكنك اتباع الخطوات التاليه لتنفيذ ما طلبت 

اولا في ملف .env يجب ان تضع اعدادات البريد الاكتروني الخاص بالاسضافه سواء كانت هوستينجر او جودادي .. 
مثال علي اعدادت هوستينجر 
 

MAIL_MAILER=smtp
MAIL_HOST=smtp.hostinger.com
MAIL_PORT=465
MAIL_USERNAME=academy@hsoub.com البريد الكتروني الخاص باستضافة مشروعك
MAIL_PASSWORD="************" كلمة السر الخاصه بالبريد
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS="academy@hsoub.com" عنوان البريد المرسل 
MAIL_FROM_NAME="${APP_NAME}"

ثما قم بإنشاء ملف Mailable في Laravel لكي تحدد كيفية عرض البريد الإلكتروني ومحتواهعن طريق الامر التالي

php artisan make:mail TestEmail

سيتم انشاء ملف تلقائي بهذه الاسم TestEmail ولان ساعطيك مثال كامل لارسال otp عبر البريد من احد المشاريع التي عملت عليها 
بعد انشاء الملف يمكنك اعداده بهذه الطريقه 
 

class TestEmail extends Mailable
{
    use Queueable, SerializesModels;
    public $message;
    public $fromEmail;
    public $subject;
    public $email;
    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($message, $fromEmail, $subject, $email)
    {
        $this->message = $message;
        $this->fromEmail = $fromEmail;
        $this->subject = $subject;
        $this->email = $email;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        $otp = $this->generateOtp($this->email);
        return $this->view('email', ['code' => $otp, 'username' => "Guest", 'massge' => $this->message, "subject" => $this->subject]);
    }
    protected function generateOtp($email)
    {
       
        $otp = new Otp;
        $otpCode = $otp->generate($email, 'numeric', 6, 60);
        return (string) $otpCode->token;
    }
}

 


هذه هي الخصائص العامة (public properties) للفئة تحمل قيم متعلقة برسالة البريد الإلكتروني مثل الرسالة نفسها، البريد الإلكتروني المُرسل منه، الموضوع، وعنوان البريد الإلكتروني المُرسل إليه.

public $message;, public $fromEmail;, public $subject;, public $email


دالة generateOtp($email) مسؤوله عن تُوليد رمز OTP وتستقبل بريدًا إلكترونيًا كمدخل

بنسبه لهذه الجزء من الكود 
 

return $this->view('email', ['code' => $otp, 'username' => "Guest", 'massge' => $this->message, "subject" => $this->subject]);

 هذا الجزء يُرسل البريد الإلكتروني باستخدام قالب محدد ("email.blade.php" ) ويمرر البيانات إلى القالب مثل الرمز OTP واسم المستخدم والرسالة والموضوع.

الخطوه الثانيه هي انشاء قالب email سكون ملف blade بسيط مثل هذه
 

<!DOCTYPE html>
<html>
<head>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f7f9fc;
            padding: 50px;
        }

        .container {
            max-width: 600px;
            background-color: #ffffff;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
            margin: 0 auto;
        }

        .header {
            padding: 10px 0;
            text-align: center;
            border-top-left-radius: 8px;
            border-top-right-radius: 8px;
        }

        .header img {
            max-width: 120px;
        }

        .company-name {
            font-size: 20px;
            font-weight: bold;
            margin-top: 10px;
        }

        .content {
            padding: 20px;
            line-height: 1.5;
        }

        .otp {
            font-size: 24px;
            font-weight: bold;
            letter-spacing: 2px;
            text-align: center;
            margin: 20px 0;
            color: #333;
            background-color: #f1f1f1;
            padding: 10px 0;
            border-radius: 5px;
        }

        .footer {
            text-align: center;
            padding: 20px 0;
            color: #888888;
            font-size: 12px;
        }

        /* Dark mode styles */
        @media (prefers-color-scheme: dark) {
            body {
                background-color: #333;
            }

            .container {
                background-color: #444;
            }

            .header,
            .content,
            .footer {
                color: #eee;
            }

            .otp {
                color: #444;
                background-color: #eee;
            }
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="header">
            <img src="https://adrenaline-edu.com/images/1.png" alt="https://adrenaline-edu.com/images/1.png">
        </div>
        <div class="content">
            <p>Hello, {{ $username }}</p>
            <p>{{ $massge }}:</p>
            <div class="otp">{{ $code }}</div>
            <p>This OTP is valid for 60 minutes. If you didn't request this code, please ignore this email.</p>
        </div>

    </div>
</body>
</html>


الخطوه الثالثه والاخير هي ارسال البريد الكتروني عن طريق الكود التالي 
 

 $message = "Please use the following OTP to verify your email address";
 $fromEmail = "adrenaline@adrenaline-edu.com";
 $subject = "Verification needed";
 Mail::to($email)->send(new TestEmail($message, $fromEmail, $subject, $inpout));

سيظهر معك كما موضع بصوره 
 

Screenshot 2024-06-21 174822.png

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

أول شيء، لازم نضبط إعدادات البريد في Laravel. ستحتاج تعدل في ملف .env عشان تضيف بيانات خادم البريد (SMTP).

الخطوة 1: تعديل ملف البيئة .env

ملف .env هو المكان الذي تحفظ فيه إعدادات البيئة الخاصة بمشروعك، مثل إعدادات قاعدة البيانات والبريد الإلكتروني. تحتاج لإعداد بيانات SMTP الخاصة بخادم البريد الذي ستستخدمه لإرسال الرسائل.

افتح ملف .env الموجود في جذر مشروعك وأضف الإعدادات التالية (استبدل بالقيم المناسبة):

MAIL_MAILER=smtp
MAIL_HOST=smtp.example.com      # عنوان خادم البريد (مثل smtp.gmail.com إذا كنت تستخدم Gmail)
MAIL_PORT=587                   # المنفذ المستخدم (587 لـ TLS، 465 لـ SSL)
MAIL_USERNAME=your_email@example.com # بريدك الإلكتروني
MAIL_PASSWORD=your_email_password    # كلمة المرور لبريدك الإلكتروني
MAIL_ENCRYPTION=tls             # نوع التشفير (tls أو ssl)
MAIL_FROM_ADDRESS=your_email@example.com # عنوان البريد الذي سترسل منه الرسائل
MAIL_FROM_NAME="${APP_NAME}"    # اسم المرسل الذي سيظهر في البريد الإلكتروني

الخطوة 2: إنشاء بريد إلكتروني جديد
Mailable هو كلاس مخصص في Laravel لتسهيل عملية إرسال البريد الإلكتروني. لإنشاء Mailable جديد، افتح التيرمنال في جذر مشروعك واستخدم الأمر التالي:

php artisan make:mail ExampleMail

هذا الأمر سينشئ ملفًا جديدًا في app/Mail/ExampleMail.php. هذا الملف سيحتوي على القالب الأساسي للرسالة التي سترسلها.

الخطوة 3: تخصيص البريد
الان، نفتح الملف ExampleMail.php ونخصصه عشان نضيف التفاصيل اللي نريدها في البريد:

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class ExampleMail extends Mailable
{
    use Queueable, SerializesModels;

    public $details; // متغير لتخزين تفاصيل الرسالة

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($details)
    {
        $this->details = $details; // تخزين التفاصيل الممررة للرسالة
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->subject('Test Email') // موضوع البريد الإلكتروني
                    ->view('emails.example'); // عرض القالب
    }
}

الخطوة 4: إنشاء قالب البريد الإلكتروني

القالب هو الملف الذي يحدد شكل ومحتوى البريد الإلكتروني. لنقم بإنشاء قالب بسيط.

افتح مجلد resources/views وأنشئ مجلد جديد باسم emails، ثم أنشئ ملف جديد باسم example.blade.php وضع فيه المحتوى التالي:

<!DOCTYPE html>
<html>
<head>
    <title>Test Email</title>
</head>
<body>
    <h1>{{ $details['title'] }}</h1>
    <p>{{ $details['body'] }}</p>
</body>
</html>

في هذا القالب، نستخدم متغيرات title و body التي سنمررها عند إرسال البريد الإلكتروني.

الخطوة 5: كتابة كود الإرسال

الآن، نحتاج لكود يقوم بإرسال البريد الإلكتروني. يمكننا وضع هذا الكود في أي مكان نريد، سواء في Controller أو مباشرة في Route.

لنبسط الأمور، سنضعه في Route. افتح ملف routes/web.php وأضف الكود التالي:

use Illuminate\Support\Facades\Route;
use App\Mail\ExampleMail;
use Illuminate\Support\Facades\Mail;

Route::get('/send-email', function () {
    // تفاصيل الرسالة
    $details = [
        'title' => 'Mail from Laravel Application',
        'body' => 'This is a test email sent from Laravel.'
    ];

    // إرسال البريد الإلكتروني
    Mail::to('recipient@example.com')->send(new ExampleMail($details));

    // رسالة تأكيد الإرسال
    return 'Email sent successfully!';
});

في هذا الكود:

قمنا بإنشاء Route جديدة باسم /send-email.

داخل هذا Route، قمنا بتعريف تفاصيل الرسالة مثل title و body.

استخدمنا Mail::to لتحديد مستقبل الرسالة وأرسلنا الرسالة باستخدام ExampleMail.

الان لتشغيل التطبيق واختبار البريد الإلكتروني افتح متصفحك واذهب إلى http://your-domain/send-email (استبدل your-domain بالعنوان الفعلي لتطبيقك). إذا كانت الإعدادات صحيحة، سترى رسالة "Email sent successfully!" والبريد الإلكتروني سيتم إرساله إلى العنوان المحدد.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...