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

السؤال

نشر

اواجهة مشكلة عدم ارسال ايميل من الاستضافة و في localhost يقوم بالارسال بدون اي مشكلة

views.py

تحتوي على ثنين من form و اضفت لهم captcha ... انا قمت بازالة المفتاح السري للcaptcha

def home(request):
    if request.method == 'POST':
        form_type = request.POST.get('form_type', '')
        
        # Common reCAPTCHA validation for both forms
        recaptcha_response = request.POST.get('g-recaptcha-response')
        data = {
            'secret': '**********************',
            'response': recaptcha_response
        }
        r = requests.post('https://www.google.com/recaptcha/api/siteverify', data=data)
        result = r.json()

        if result['success']:
            if form_type == 'contact_form':
                # Fetch data from Contact Us page
                name = request.POST.get('name', '')
                email = request.POST.get('email', '')
                subject = request.POST.get('subject', '')
                message = request.POST.get('message', '')
                # Save in database
                data = Contact(name=name, email=email, subject=subject, message=message)
                data.save()
                # Send an email
                send_mail(
                    f'New Contact: {subject}',
                    f'From: {name}, Email: {email}\n\nMessage:\n{message}',
                    email,
                    ['support@webside.ca'],
                    fail_silently=False,
                )
                messages.success(request, 'Your message has been sent. Thank you!')
                return redirect('home')
            
            elif form_type == 'application_form':
                first_name = request.POST.get('firstName', '')
                last_name = request.POST.get('lastName', '')
                status = request.POST.get('status', '')
                phone = request.POST.get('phone', '')
                email = request.POST.get('email', '')
                postal_code = request.POST.get('postalCode', '')
                province = request.POST.get('province', '')
                agreement = request.POST.get('flexCheckIndeterminate') == 'on'
                data = Apply(first_name=first_name, last_name=last_name, status=status, phone=phone, email=email, postal_code=postal_code, province=province, agreement=agreement)
                data.save()
                send_mail(
                    f'New Apply',
                    f'From: {first_name} {last_name}, Status: {status}, Phone: {phone}, Email: {email}, Postal Code: {postal_code}, Province: {province}\n\nHas agreed to contact: {"Yes" if agreement else "No"}',
                    email,
                    ['admin@webside.ca'],
                    fail_silently=False,
                )
                return JsonResponse({'success': True})
        else:
            # Handle the case where CAPTCHA is not successfully completed
            messages.error(request, 'Invalid reCAPTCHA. Please try again.')
            return JsonResponse({'success': False}, status=400)

    return render(request, 'pages/home.html')

كود html:

هذه form تكون على شكل نافذة منبثقة عند النقر على زر معين تعرض form

  <div class="modal fade" id="formModal" tabindex="-1" aria-hidden="true">
    <div class="modal-dialog modal-dialog-centered">
      <div class="modal-content">
        <div class="modal-header">
          <h5 class="modal-title" id="exampleModalLabel">Apply Now</h5>
          <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
        </div>
        <div class="modal-body">
          <form method="post" id="applyForm">
            {% csrf_token %}
            <div class="mb-3">
              <input type="hidden" name="form_type" value="application_form">
              <label for="firstName" class="form-label">First Name*</label>
              <input type="text" class="form-control" id="firstName" name="firstName" required>
            </div>
            <div class="mb-3">
              <label for="lastName" class="form-label">Last Name*</label>
              <input type="text" class="form-control" id="lastName" name="lastName" required>
            </div>
            <div class="mb-3">
              <label for="status" class="form-label">Status*</label>
              <select class="form-control" id="status" name="status" required>
                <option value="">Select Status</option>
                <option value="Canadian Citizen">Canadian Citizen</option>
                <option value="Permanent Resident">Permanent Resident</option>
                <option value="Refugee">Refugee</option>
                <option value="Work Permit">Work Permit</option>
                <option value="Visitor Visa">Visitor Visa</option>
                <option value="International Student">International Student</option>
              </select>
            </div>
            <div class="mb-3">
              <label for="userPhone" class="form-label">Phone</label>
              <input type="number" class="form-control" id="userPhone" name="phone">
            </div>
            <div class="mb-3">
              <label for="userEmail" class="form-label">Email*</label>
              <input type="email" class="form-control" id="userEmail" name="email" required>
            </div>
            <div class="mb-3">
              <label for="postalCode" class="form-label">Postal Code</label>
              <input type="text" class="form-control" id="postalCode" name="postalCode">
            </div>
            <div class="mb-3">
              <label for="province" class="form-label">Province</label>
              <select class="form-control" id="province" name="province">
                <option value="">Select Province</option>
                <option value="Alberta">Alberta</option>
                <option value="British Columbia">British Columbia</option>
                <option value="Manitoba">Manitoba</option>
                <option value="New Brunswick">New Brunswick</option>
                <option value="Newfoundland and Labrador">Newfoundland and Labrador</option>
                <option value="Nova Scotia">Nova Scotia</option>
                <option value="Ontario">Ontario</option>
                <option value="Prince Edward Island">Prince Edward Island</option>
                <option value="Quebec">Quebec</option>
                <option value="Saskatchewan">Saskatchewan</option>
                <option value="Northwest Territories">Northwest Territories</option>
                <option value="Nunavut">Nunavut</option>
                <option value="Yukon">Yukon</option>
              </select>
            </div>
            <div class="mb-3">
              <input class="form-check-input" type="checkbox" value="on" id="flexCheckIndeterminate"
                name="flexCheckIndeterminate" required>
              <label class="form-check-label" for="flexCheckIndeterminate">
                I agree to be contacted by email
              </label>
            </div>

            <div class="g-recaptcha" data-sitekey="6LeV7rApAAAAANhHYmNEky9nNreToYW3fJonpSar"></div>
            <br>
            <span class="loader"></span>
            <button type="submit" class="btn btn-primary">Submit</button>
          </form>

          <!-- Success Message, hidden initially -->
          <div id="successMessage" style="display: none;">
            <div class="content">
              <div class="wrapper-1">
                <div class="wrapper-2">
                  <h1>Thank you!</h1>
                  <p>We will contact you as soon as possible</p>
                  <button class="go-home" onclick="window.location.href='/';">
                    go home
                  </button>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>

كود جافا سكريبت:

        document.getElementById('applyForm').addEventListener('submit', function (e) {
            e.preventDefault();
            const formData = new FormData(this);
            const submitButton = this.querySelector('button[type="submit"]');
            const loader = document.querySelector('.loader');

            submitButton.disabled = true;
            loader.style.display = 'block'; // Display the loader

            fetch("{% url 'home' %}", {
                method: 'POST',
                body: formData,
                headers: {
                    'X-Requested-With': 'XMLHttpRequest'
                },
            }).then(response => {
                if (!response.ok) throw new Error('Network response was not ok');
                return response.json();
            }).then(data => {
                if (data.success) {
                    $('#applyForm').hide(); // Hide the form
                    $('#successMessage').show(); // Show success message
                } else {
                    throw new Error('Failed to submit');
                }
            }).catch(error => {
                alert(error.message);
            }).finally(() => {
                loader.style.display = 'none'; // Hide the loader
                submitButton.disabled = false;
            });
        });

 

Recommended Posts

  • 0
نشر

هل يمكنك فتح ال console عن طريق الضغط على CTRL + SHIFT + J وإخباري هل يظهر خطأ عند محاولة إرسال ال form واذا كان يظهر خطأ هل يمكنك إرساله , وايضا هل يوجد خطأ فى ال log الخاص بالاستضافه ؟

من الممكن أن يكون الخطأ فى ال captcha لذلك حاول حذف هذين السطرين مؤقتا .

بتاريخ 25 دقائق مضت قال Abdulazeez Altameemi:
r = requests.post('https://www.google.com/recaptcha/api/siteverify', data=data)
        result = r.json()

وايضا قم بإستبدال هذ السطر 

بتاريخ 26 دقائق مضت قال Abdulazeez Altameemi:
if result['success']:

بالكود التالي:

if True:

ومحاولة إرسال ال form مرة أخرى وإخبارى بالنتيجة

  • 0
نشر

المشكلة على الأغلب تتعلق بإعدادات البريد الإلكتروني في بيئة الاستضافة، فعند إرسال البريد الإلكتروني في بيئة الإنتاج، قد تكون هناك إعدادات ناقصة أو غير صحيحة في ملف `settings.py` الخاص بمشروع Django.

لذا تأكد من إعدادات البريد الإلكتروني في `settings.py` لتكون كالتالي:

   EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
   EMAIL_HOST = 'smtp.gmail.com'
   EMAIL_PORT = 587
   EMAIL_USE_TLS = True
   EMAIL_HOST_USER = 'your-email@gmail.com'
   EMAIL_HOST_PASSWORD = 'your-email-password'
   DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

لضمان أنك تستطيع رؤية الأخطاء التي تحدث عند محاولة إرسال البريد الإلكتروني، يمكنك تمكين تسجيل الأخطاء في Django. أضف الكود التالي إلى `settings.py`:

   import os

   LOGGING = {
       'version': 1,
       'disable_existing_loggers': False,
       'handlers': {
           'file': {
               'level': 'DEBUG',
               'class': 'logging.FileHandler',
               'filename': os.path.join(BASE_DIR, 'debug.log'),
           },
       },
       'loggers': {
           'django': {
               'handlers': ['file'],
               'level': 'DEBUG',
               'propagate': True,
           },
       },
   }

فهو سيسمح بتتبع الأخطاء التي تحدث عند محاولة إرسال البريد الإلكتروني من خلال ملف `debug.log`.

  • 0
نشر

يمكن أن تكون المشكلة في إعدادات البريد الإلكتروني الخاصة بـ Django على الاستضافة. هناك احتمالان رئيسيان للمشكلة:

1. إعدادات البريد الإلكتروني في Django:
   - تأكد من تكوين إعدادات البريد الإلكتروني بشكل صحيح في ملف `settings.py` الخاص بمشروع Django الخاص بك. تحتاج إلى تحديد معلومات الاعتماد الصحيحة لخادم البريد الصادر (SMTP) الذي تستخدمه لإرسال البريد الإلكتروني.
   -تكون من الشكل :
    
   

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'your-smtp-host'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'your-email@example.com'
EMAIL_HOST_PASSWORD = 'your-email-password'
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER


 

2. قيود الاستضافة:
   - بعض خدمات الاستضافة تفرض قيودًا على إرسال البريد الإلكتروني، مثل حجم رسائل البريد أو قيود بروتوكول SMTP. يجب التحقق من قواعد الاستضافة الخاصة بك للتأكد من عدم وجود أي قيود تمنع إرسال رسائل البريد الإلكتروني من الاستضافة.

 

ويكن مراجعة الجواب التالي لاعداد البريد الالكتروني والتاكد من انك قمت بالاعداد الصحيح 

 

  • 0
نشر
بتاريخ 16 ساعة قال محمد_عاطف:

 

وايضا قم بإستبدال هذ السطر 

بالكود التالي:

if True:

ومحاولة إرسال ال form مرة أخرى وإخبارى بالنتيجة

قام بالارسال عندما قمت بتغير هذا الجزء

بتاريخ 16 ساعة قال محمد_عاطف:
if result['success']:

الى هذا

بتاريخ 16 ساعة قال محمد_عاطف:
if True:

لكن في هذه الحالة هل ستعمل captcha

  • 0
نشر
بتاريخ 30 دقائق مضت قال Abdulazeez Altameemi:

لكن في هذه الحالة هل ستعمل captcha

لا لن تعمل ال captcha الآن حيث قمنا بإيقافها لنختبر الكود .

يمكنك التحقق من إعدادات captcha على جوجل من الممكن أن المشكلة أنك لم تقم بإضافة الموقع الجديد ليعمل على ال captcha

  • 0
نشر
بتاريخ 4 ساعة قال محمد_عاطف:

لا لن تعمل ال captcha الآن حيث قمنا بإيقافها لنختبر الكود .

يمكنك التحقق من إعدادات captcha على جوجل من الممكن أن المشكلة أنك لم تقم بإضافة الموقع الجديد ليعمل على ال captcha

انا متأكد من اضافة الموقع

بتاريخ 21 ساعة قال محمد_عاطف:
r = requests.post('https://www.google.com/recaptcha/api/siteverify', data=data)
result = r.json()

 

هل توجد طريقة لمعرفة ما يرجعة المتغير result في الاستضافة

  • 0
نشر
بتاريخ On 16‏/5‏/2024 at 18:14 قال Abdulazeez Altameemi:

هل توجد طريقة لمعرفة ما يرجعة المتغير result في الاستضافة

من خلال تسجيل النتيجة في ملف لوج، وذلك باستخدام حزمة logging:

import logging

logging.basicConfig(filename='recaptcha_verification.log', level=logging.DEBUG)

r = requests.post('https://www.google.com/recaptcha/api/siteverify', data=data)
result = r.json()

logging.debug('Response: %s', result)

وستجد ملف باسم recaptcha_verification.log في مجلد المشروع يحوي النتيجة.

وفي حال كان لديك وصول إلى ssh في الاستضافة فتستطيع استخدام print لطباعة النتيجة ورؤية ذلك في التيرمنال.

  • 0
نشر
بتاريخ On 17‏/5‏/2024 at 20:16 قال Mustafa Suleiman:

ظوفي حال كان لديك وصول إلى ssh في الاستضافة فتستطيع استخدام print لطباعة النتيجة ورؤية ذلك في التيرمنال.

الطريقة الاولى لم تنجح معي لم يظهر لي اي ملف

بالنسة للاستضافة لدي حساب المسؤول و يمكنني الوصول الى ssh 

هل يمكنك ان تخبرني بالمزيد اخي مصطفى؟

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...