জ্যাঙ্গোতে প্রেরণ ইমেল পাঠানো [বন্ধ]


90

আমার টেস্ট করা দরকার যে আমার জাঙ্গো অ্যাপ্লিকেশন সঠিক সামগ্রী সহ ইমেলগুলি প্রেরণ করে। আমি বাহ্যিক সিস্টেমে নির্ভর করতে চাই না (অ্যাড-হক জিমেইল অ্যাকাউন্টের মতো), যেহেতু আমি প্রকৃত ইমেল পরিষেবাটি পরীক্ষা করছি না ...

আমি, সম্ভবত, ইমেলগুলি স্থানীয়ভাবে, কোনও ফোল্ডারের মধ্যে যেমন পাঠানো হয় তে সঞ্চয় করতে চাই। কীভাবে এটি অর্জন করবেন তার কোনও পরামর্শ?


মডারেটর: দয়া করে এই প্রশ্নটি লক করুন। উত্তরের মধ্যে প্রচুর স্প্যাম যুক্ত করা হচ্ছে, সমাধানগুলি প্রস্তাব করা যা কেবলমাত্র বাহ্যিক পরিষেবাদি প্রচারের জন্য হাস্যকর জটিল।
নেমেসিসডিজাইন

উত্তর:


43

ইমেল প্রেরণের জন্য আপনি একটি ফাইল ব্যাকএন্ড ব্যবহার করতে পারেন যা বিকাশ এবং পরীক্ষার জন্য খুব সহজ সমাধান; ইমেলগুলি প্রেরণ করা হয় না তবে ফোল্ডারে সংরক্ষিত থাকে যা আপনি নির্দিষ্ট করতে পারেন!


4
ইমেল ব্যাকেন্ডস সম্পর্কে আরও তথ্য: ডকস.ডজ্যাঙ্গোপ্রজেক্ট / এএন / দেব / টপিক্স / ইমেল / # ইমেল- ব্যাকেন্ডস । কখনও কখনও এমনকি সাধারণ কনসোল ব্যাকএন্ডও যথেষ্ট
জিউস

4
কিন্তু (স্বয়ংক্রিয়) পরীক্ষার সময় উত্পন্ন ইমেলটি অ্যাক্সেস করার কোনও উপায় আছে কি?
ওভারড্রাইভার

182

জ্যাঙ্গো পরীক্ষার কাঠামোতে আপনাকে ই-মেইল পরিষেবা পরীক্ষার জন্য সহায়তা করার জন্য কিছু সহায়ক তৈরি করেছে ।

দস্তাবেজ (সংক্ষিপ্ত সংস্করণ) থেকে উদাহরণ:

from django.core import mail
from django.test import TestCase

class EmailTest(TestCase):
    def test_send_email(self):
        mail.send_mail('Subject here', 'Here is the message.',
            'from@example.com', ['to@example.com'],
            fail_silently=False)
        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(mail.outbox[0].subject, 'Subject here')

4
+1 ভাল উত্তর। তবে আমি এটি জটিল ক্ষেত্রে send_mailব্যবহার করতে পারি না , যখন কখন ব্যবহার করা যায় না।
সান্টিয়াগোবসুল্টো

4
আরও স্পষ্টভাবে ডকটি এখানে রয়েছে: ডকস.ডজ্যাঙ্গোপ্রজেক্ট
en

4
আপনি যদি এমন কোনও ফাংশন পরীক্ষা করে যা সেন্ডমেলকে কল করে এবং আপনি অ্যাক্সেস করতে না পারেন তবে কীভাবে আপনি এটি করবেন mail?
ম্যাট ডি

4
@ ম্যাথেজড্রিলকে অন্য ফাংশনে ডাকা mail.outboxহলে আপনি এখনও অ্যাক্সেস করতে পারবেন send_mail
পাইমারকো

4
@pymarco আপনি যদি কোর থেকে মেল আমদানি mail.outbox[0].bodyকরেন send_mailতবে অন্য কোথাও সম্পাদনা করা হলেও আপনাকে প্রেরিত ইমেলটি দেখাবে ।
রব

17

আপনি ইউনিট-টেস্টিংয়ে থাকলে সেরা সমাধান হ'ল জাঙ্গো দ্বারা প্রদত্ত ইন-মেমরি ব্যাকএন্ড ব্যবহার করা ।

EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'

একটি হিসাবে এটি ব্যবহার ক্ষেত্রে নিন py.test চোকান

@pytest.fixture(autouse=True)
def email_backend_setup(self, settings):
    settings.EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'  

প্রতিটি পরীক্ষায়, mail.outboxসার্ভারটি পুনরায় সেট করা হয়, সুতরাং পরীক্ষার মধ্যে কোনও পার্শ্ব প্রতিক্রিয়া নেই।

from django.core import mail

def test_send(self):
    mail.send_mail('subject', 'body.', 'from@example.com', ['to@example.com'])
    assert len(mail.outbox) == 1

def test_send_again(self):
    mail.send_mail('subject', 'body.', 'from@example.com', ['to@example.com'])
    assert len(mail.outbox) == 1

8

মেলহোগ ব্যবহার করুন

মেলগ্যাচার দ্বারা অনুপ্রাণিত, ইনস্টল করা সহজ।

গো দিয়ে তৈরি - একাধিক প্ল্যাটফর্মে মেলহগ ইনস্টলেশন ছাড়াই চলে।


এছাড়াও, এতে জিম নামে একটি উপাদান রয়েছে , মেলহগ কওস বানর , যা আপনাকে বিভিন্ন সমস্যার সাথে ইমেল প্রেরণের পরীক্ষা করতে সক্ষম করে:

জিম কী করতে পারে?

  • সংযোগ প্রত্যাখ্যান করুন
  • হার সীমা সংযোগ
  • প্রমাণীকরণ প্রত্যাখ্যান
  • প্রেরকদের প্রত্যাখ্যান করুন
  • প্রাপকদের প্রত্যাখ্যান করুন

এটি সম্পর্কে এখানে আরও পড়ুন ।


(মূল মেইল ​​ক্যাচারের মতো নয়, যা ইউটিএফ -8 এ এনকোডযুক্ত ইমোজি সহ ইমেল প্রেরণ করার সময় আমার উপর ব্যর্থ হয়েছিল এবং এটি বর্তমান প্রকাশে সত্যই স্থির ছিল না, মেলহগ ঠিক কাজ করে))


5

যে কোনও প্রকল্পের জন্য সংযুক্তি প্রেরণের প্রয়োজন হয় না, আমি জাঙ্গো-মেলার ব্যবহার করি , যার প্রেরণটি ট্রিগার না হওয়া অবধি সমস্ত বহির্মুখী ইমেলগুলি একটি সারিতে শেষ হয় এবং তাদের প্রেরণের পরেও তারা লগইন হয় - এগুলির সবগুলি অ্যাডমিনে দৃশ্যমান, আপনার ইমেল কোডটি কী ইন্টার্টুবগুলিতে ফায়ার চেষ্টা করছে তা দ্রুত পরীক্ষা করা সহজ করে তোলে।


এর পরেও, জ্যাঙ্গো-মেলারের দ্বারা নির্মিত বার্তা অবজেক্টগুলির অর্থ আপনি ইউনিট পরীক্ষায়ও সেগুলি উত্সাহিত করতে পারেন (এবং তাদের বিষয়বস্তুগুলি পরীক্ষা করতে পারেন) আমি জানি যে ডামি মেলবক্সের পরীক্ষার স্যুটটিতে আউটবাউন্ড মেলবক্স সমর্থন রয়েছে তবে জ্যাঙ্গো-মেলার ব্যবহার করে না ম্যানেজমেন্ট কমান্ড এটি না পাঠিয়ে মেল পাঠায় না, যার অর্থ আপনি সেই মেলবক্স অবজেক্টটি ব্যবহার করতে পারবেন না)
স্টিভ জলিম

আপডেট, আমার আসল উত্তর থেকে যুগে যুগে: github.com/SmileyChris/django-mailer-2 এছাড়াও সংযুক্তিগুলি সমর্থন করে
স্টিভ জলিম

4

জাজানোও একটি ইন-মেমরি ইমেল ব্যাকএন্ড রয়েছে। মেমরি ব্যাকএন্ডের অধীনে ডক্সে আরও বিশদ । এটি জাজানগোতে উপস্থিত রয়েছে 1.6 এটি আগে কোনও কিছুতে উপস্থিত কিনা তা নিশ্চিত নয়।



1

এখানে কয়েকটি টুকরো টুকরো টুকরো টুকরো করে বেঁধে দেওয়া, এখানে ভিত্তি করে একটি সোজা সেটআপ filebased.EmailBackend। এটি স্বতন্ত্রভাবে টাইমস্ট্যাম্পড ফাইলের নাম থাকা স্বতন্ত্র লগ ফাইলগুলির সাথে সংযোগ করার জন্য একটি তালিকা ভিউ রেন্ডার করে। তালিকার একটি লিঙ্কে ক্লিক করা ব্রাউজারে সেই বার্তাটি প্রদর্শন করে (কাঁচা):

সেটিংস

EMAIL_BACKEND = "django.core.mail.backends.filebased.EmailBackend"
EMAIL_FILE_PATH = f"{MEDIA_ROOT}/email_out"

দেখুন

import os

from django.conf import settings
from django.shortcuts import render

def mailcheck(request):

    path = f"{settings.MEDIA_ROOT}/email_out"
    mail_list = os.listdir(path)

    return render(request, "mailcheck.html", context={"mail_list": mail_list})

টেমপ্লেট

{% if mail_list %}
  <ul>
  {% for msg in mail_list %}
    <li>
      <a href="{{ MEDIA_URL }}email_out/{{msg}}">{{ msg }}</a>
    </li>
  {% endfor %}
  </ul>
{% else %}
  No messages found.
{% endif %}

urls

path("mailcheck/", view=mailcheck, name="mailcheck"),

0

আপনার নিজের থেকে সহজ এসএমটিপি সার্ভারটি উত্তরাধিকার সূত্রে smtpd.SMTPServerএবং কেন threading.Thread:

class TestingSMTPServer(smtpd.SMTPServer, threading.Thread):
    def __init__(self, port=25):
        smtpd.SMTPServer.__init__(
            self,
            ('localhost', port),
            ('localhost', port),
            decode_data=False
        )
        threading.Thread.__init__(self)

    def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):
        self.received_peer = peer
        self.received_mailfrom = mailfrom
        self.received_rcpttos = rcpttos
        self.received_data = data

    def run(self):
        asyncore.loop()

প্রক্রিয়া_মেসেজ কল করা হয় যখনই আপনার এসএমটিপি সার্ভার একটি মেইল ​​অনুরোধ গ্রহণ করে, আপনি সেখানে যা চান তা করতে পারেন।

পরীক্ষার কোডে, এরকম কিছু করুন:

smtp_server = TestingSMTPServer()
smtp_server.start()
do_thing_that_would_send_a_mail()
smtp_server.close()
self.assertIn(b'hello', smtp_server.received_data)

শুধু মনে রাখবেন কল করে asyncore লুপ (শোনা থেকে সার্ভার স্টপ) শেষ পর্যন্ত।close()asyncore.dispatchersmtp_server.close()


0

আপনার যদি কোনও টমগেট সার্ভার উপলব্ধ থাকে, বা অন্য সার্লেলেট ইঞ্জিন রয়েছে, তবে একটি দুর্দান্ত পদ্ধতির "পোস্ট হক" যা একটি ছোট সার্ভার যা অ্যাপ্লিকেশনটিকে ঠিক এসএমটিপি সার্ভারের মতো দেখায়, তবে এটিতে একটি ব্যবহারকারী ইন্টারফেস অন্তর্ভুক্ত রয়েছে যা আপনাকে দেখার অনুমতি দেয় এবং প্রেরিত ইমেল বার্তাগুলি পরীক্ষা করুন। এটি ওপেন সোর্স এবং অবাধে উপলভ্য।

এটি অনুসন্ধান করুন: পোস্ট গিটহব সাইট Post

ব্লগ পোস্ট দেখুন: পোস্টহক: ইমেল প্রেরণকারী অ্যাপ্লিকেশনগুলি পরীক্ষা করে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.