Django के माध्यम से ईमेल कैसे भेजें?


153

मेरे में settings.py, मेरे पास निम्नलिखित हैं:

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

# Host for sending e-mail.
EMAIL_HOST = 'localhost'

# Port for sending e-mail.
EMAIL_PORT = 1025

# Optional SMTP authentication information for EMAIL_HOST.
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_USE_TLS = False

मेरा ईमेल कोड:

from django.core.mail import EmailMessage
email = EmailMessage('Hello', 'World', to=['user@gmail.com'])
email.send()

बेशक, अगर मैं एक डिबगिंग सर्वर के माध्यम से सेटअप करता हूं, तो मैं python -m smtpd -n -c DebuggingServer localhost:1025अपने टर्मिनल में ईमेल देख सकता हूं।

हालाँकि, मैं वास्तव में डिबगिंग सर्वर को नहीं बल्कि user@gmail.com को ईमेल कैसे भेजूँ?

आपके उत्तर पढ़ने के बाद, मुझे कुछ सीधे करने दें:

  1. क्या आप ई-मेल भेजने के लिए लोकलहोस्ट (साधारण ubuntu पीसी) का उपयोग नहीं कर सकते हैं?

  2. मैंने सोचा था कि django 1.3 send_mail()में कुछ हद तक हटा दिया गया है और EmailMessage.send()इसके बजाय इसका उपयोग किया जाता है?


2
1. यदि आप SMTP सर्वर वहां चला रहे हैं तो आप लोकलहोस्ट का उपयोग कर सकते हैं । 2. सटीक तंत्र महत्वहीन है। महत्वपूर्ण हिस्सा यह है कि आपके पास एसएमटीपी सर्वर है।
इग्नासियो वाज़केज़-अब्राम्स

इसलिए यदि मैं पोस्टफिक्स स्थापित करता हूं, तो मैं ईमेल भेज / प्राप्त कर सकता हूं? ऐसा करने के लिए आप उपसर्ग कैसे सेट करते हैं?
डेरेक

6
यह सवाल इस साइट के दायरे से परे है।
इग्नासियो वाज़केज़-अब्राम्स


4
फिर भी SEO हमें इस पेज पर ले जाता है, इग्नासियो।
Phlip

जवाबों:


53

ईमेल को असली SMTP सर्वर पर भेजें। यदि आप अपना स्वयं का सेटअप नहीं करना चाहते हैं तो आप ऐसी कंपनियों को ढूंढ सकते हैं जो आपके लिए एक चलाएंगे, जैसे कि स्वयं Google।


3
बहुत बढ़िया, मैं सिर्फ अपने आप को एक ईमेल! मीकू द्वारा उल्लिखित उपरोक्त लेख एकदम सही था। लेख की टिप्पणियों में छोटे टाइपो सुधार पर ध्यान दें। (और मैंने सिर्फ अपने नियमित कंप्यूटर / लोकलहोस्ट का उपयोग किया था। मैंने हाथ से पहले कुछ और सेट नहीं किया था।)
user984003

166

मैं Django के लिए अपने SMTP सर्वर के रूप में Gmail का उपयोग करता हूं। पोस्टफिक्स या किसी अन्य सर्वर से निपटने की तुलना में बहुत आसान है। मैं ईमेल सर्वर के प्रबंधन के व्यवसाय में नहीं हूं।

सेटिंग्स में:

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'me@gmail.com'
EMAIL_HOST_PASSWORD = 'password'

नोट : 2016 में जीमेल डिफ़ॉल्ट रूप से इसे अनुमति नहीं दे रहा है। आप या तो Sendgrid जैसी बाहरी सेवा का उपयोग कर सकते हैं, या सुरक्षा को कम करने के लिए Google से इस ट्यूटोरियल का अनुसरण कर सकते हैं, लेकिन इस विकल्प की अनुमति दें: https://support.google.com/accounts/answer/6010255


8
क्या आपके पासवर्ड को प्लेनटेक्स्ट के रूप में छोड़ने का कोई विकल्प है?
अनुष्ठान

1
आप मैनड्रिल जैसी एक ईमेल सेवा का उपयोग कर सकते हैं जो आपको इसके बजाय एक पासफ़्रेज़ का उपयोग करने देगा, हालाँकि मुझे यकीन नहीं है कि यह आपके लिए अधिक उपयोगी है। आप अपने सर्वर पर इंस्टॉल की गई एन्क्रिप्शन कुंजी का उपयोग भी कर सकते हैं, और EMAIL_HOST_PASSWORD = my_decrypt ('abi304hubaushl9rchy2y9fd29') की तरह कुछ बना सकते हैं
जॉर्डन

27
इसे पर्यावरण चर में डालें। उसके बाद, EMAIL_HOST_PASSWORD = os.environ ['MY_PASSWORD_THAT_YOU_CANT_KNOW']
आकर्षित हुआ

1
मैंने आपके कोड का उपयोग किया है। मेरा जीमेल अकाउंट कुछ दिनों के बाद ब्लॉक कर दिया गया है। मेरा सर्वर शायद प्रति दिन 20 से कम ईमेल भेजता है। क्या किसी के पास भी ऐसा ही मुद्दा था?
यूजीन

8
SMTPAuthenticationError और मुझे एक ईमेल " साइन-इन का प्रयास रोका गया ... जो आधुनिक सुरक्षा मानकों को पूरा नहीं करता है " से मिलता है। इस तरह दिखता है । " कम सुरक्षित ऐप्स के लिए पहुंच चालू करके" वर्कअराउंड । और वह काम किया
स्टेन पर बॉब स्टीन

40
  1. एक परियोजना बनाएँ: django-admin.py startproject gmail
  2. नीचे दिए गए कोड के साथ settings.py संपादित करें:

    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    EMAIL_USE_TLS = True
    EMAIL_HOST = 'smtp.gmail.com'
    EMAIL_HOST_USER = 'youremail@gmail.com'
    EMAIL_HOST_PASSWORD = 'email_password'
    EMAIL_PORT = 587
  3. इंटरैक्टिव मोड चलाएँ: python manage.py shell

  4. EmailMessage मॉड्यूल आयात करें:

    from django.core.mail import EmailMessage
  5. ईमेल भेजें:

    email = EmailMessage('Subject', 'Body', to=['your@email.com'])
    email.send()

अधिक informations के लिए, दस्तावेजों में जांच send_mailऔर EmailMessageविशेषताएं ।

Gmail के लिए अद्यतन करें

इसके अलावा अगर आपको gmail के माध्यम से ईमेल भेजने में समस्या है, तो Google से इस गाइड की जांच करना याद रखें ।

अपनी Google खाता सेटिंग में, Security > Account permissions > Access for less secure appsइस विकल्प पर जाएं और सक्षम करें।

2-चरण-सत्यापन चालू करने के बाद अपने जीमेल के लिए एक ऐप विशिष्ट पासवर्ड भी बनाएं

फिर आपको सेटिंग्स में ऐप विशिष्ट पासवर्ड का उपयोग करना चाहिए । तो निम्न पंक्ति बदलें:

    EMAIL_HOST_PASSWORD = 'your_email_app_specific_password'

यदि आप HTML ईमेल भेजने के इच्छुक हैं, तो इसे देखें


मैं आपके चरणों का पालन करता हूं, मैं ईमेल नहीं भेज सकता, ईमेल प्राप्त नहीं करता /
qg_java_17137

outlookoffice365 के लिए EMAIL_HOST क्या होगा ?
अंतू

14

मेरी साइट होस्ट की गई है Godaddyऔर मेरे पास उसी पर एक निजी ईमेल पंजीकृत है। ये सेटिंग्स हैं जो मेरे लिए काम करती हैं:

सेटिंग्स में:

EMAIL_HOST = 'mail.domain.com'
EMAIL_HOST_USER = 'abc@domain.com'
EMAIL_HOST_PASSWORD = 'abcdef'
DEFAULT_FROM_EMAIL = 'abc@domain.com'
SERVER_EMAIL = 'abc@domain.com'
EMAIL_PORT = 25
EMAIL_USE_TLS = False

खोल में:

from django.core.mail import EmailMessage
email = EmailMessage('Subject', 'Body', to=['def@domain.com'])
email.send()

फिर मुझे ओ / पी यानी सफलता के रूप में "1" मिला। और मुझे मेल भी आया। :)

  • Domain.com का मतलब क्या है?

धन्यवाद, यह पुरानी परियोजनाओं के लिए सबसे आसान तरीका है <Django 1.4
फ्रैंकोइस कॉन्स्टैंट

13

Django संस्करण 1.7 के लिए, यदि उपरोक्त समाधान काम नहीं करते हैं, तो निम्न प्रयास करें

में settings.py ऐड

#For email
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

EMAIL_USE_TLS = True

EMAIL_HOST = 'smtp.gmail.com'

EMAIL_HOST_USER = 'sender@gmail.com'

#Must generate specific password for your app in [gmail settings][1]
EMAIL_HOST_PASSWORD = 'app_specific_password'

EMAIL_PORT = 587

#This did the trick
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

अंतिम पंक्ति ने django 1.7 के लिए चाल चली


यह किसी कारण से मेरे लिए काम नहीं किया। मैं पासवर्ड गलत होने के कारण त्रुटि करता रहा। जो अजीब है क्योंकि मुझे मेलगंज से प्रत्यक्ष प्रमाण मिला है।
एलेक्स स्टीवर्ट

10

आपको सेटिंग्स में बैकएंड के रूप में smtp का उपयोग करने की आवश्यकता है

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

यदि आप कंसोल के रूप में बैकएंड का उपयोग करते हैं, तो आप कंसोल में आउटपुट प्राप्त करेंगे

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

और इसके अलावा सेटिंग्स नीचे

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'urusername@gmail.com'
EMAIL_HOST_PASSWORD = 'password'

यदि आप इसके लिए जीमेल का उपयोग कर रहे हैं , तो 2-चरणीय सत्यापन और एप्लिकेशन विशिष्ट पासवर्ड सेट करें और उस पासवर्ड को EMAIL_HOST_PASSWORD मान के ऊपर कॉपी और पेस्ट करें।


5

मैंने SendGrid का उपयोग करके Django के साथ ईमेल भेजने का सबसे आसान तरीका पाया। यहां देखिए यह कैसे काम करता है:

  1. SendGrid खाता बनाएँ (और अपना ईमेल सत्यापित करें)
  2. निम्नलिखित को अपने में जोड़ें settings.py: EMAIL_HOST = 'smtp.sendgrid.net' EMAIL_HOST_USER = '<your sendgrid username>' EMAIL_HOST_PASSWORD = '<your sendgrid password>' EMAIL_PORT = 587 EMAIL_USE_TLS = True

और आप सब सेट हैं!

ईमेल भेजने के लिए:

from django.core.mail import send_mail
send_mail('<Your subject>', '<Your message>', 'from@example.com', ['to@example.com'])

यदि आप चाहते हैं कि जब भी 500 आंतरिक सर्वर त्रुटि हो, तो Django आपको ईमेल करे, निम्नलिखित को अपने साथ जोड़ें settings.py:

DEFAULT_FROM_EMAIL = 'your.email@example.com'
ADMINS = [('<Your name>', 'your.email@example.com')]

SendGrid के साथ ईमेल भेजना प्रति माह 12k ईमेल तक मुफ्त है।


1
बहुत बढ़िया, लेकिन यह प्रलेखन के अनुसार उपयोगकर्ता नाम के रूप में 'एपाइकी' का उपयोग करने के लिए इसे प्राप्त करने में सक्षम नहीं है, और SendGrid सूची एक साधारण Sendmail के लिए प्रति apikey में तीन दर्जनों अनुमति विन्यास ...
SYK

3

मैं वास्तव में कुछ समय पहले Django से यह किया था। एक वैध GMail खाता खोलें और यहां क्रेडेंशियल्स दर्ज करें। यहाँ मेरा कोड है -

from email import Encoders
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart

def sendmail(to, subject, text, attach=[], mtype='html'):
    ok = True
    gmail_user = settings.EMAIL_HOST_USER
    gmail_pwd  = settings.EMAIL_HOST_PASSWORD

    msg = MIMEMultipart('alternative')

    msg['From']    = gmail_user
    msg['To']      = to
    msg['Cc']      = 'you@gmail.com'
    msg['Subject'] = subject

    msg.attach(MIMEText(text, mtype))

    for a in attach:
        part = MIMEBase('application', 'octet-stream')
        part.set_payload(open(attach, 'rb').read())
        Encoders.encode_base64(part)
        part.add_header('Content-Disposition','attachment; filename="%s"' % os.path.basename(a))
        msg.attach(part)

    try:
        mailServer = smtplib.SMTP("smtp.gmail.com", 687)
        mailServer.ehlo()
        mailServer.starttls()
        mailServer.ehlo()
        mailServer.login(gmail_user, gmail_pwd)
        mailServer.sendmail(gmail_user, [to,msg['Cc']], msg.as_string())
        mailServer.close()
    except:
        ok = False
    return ok

1
smtplibसीधे उपयोग करने की कोई आवश्यकता नहीं है ; Django आपके लिए उस हिस्से को संभाल लेगा।
इग्नासियो वाज़केज़-अब्राम्स

ओह यह है! यह कैसे होगा? यहाँ मैं पूरी तरह से डिफ़ॉल्ट django send_mailफंक्शन को बायपास करता हूं और अपना खुद का उपयोग करता हूं ...
Srikar Appalaraju

1
send_mail()यह है कि आप इसे कैसे करेंगे। आपको अभी भी संदेश को स्वयं इकट्ठा करने की आवश्यकता है, लेकिन आपको एसएमटीपी बिट्स के बारे में चिंता करने की आवश्यकता नहीं है।
इग्नासियो वाज़क्वेज़-अब्राम्स

2

देर से, लेकिन:

DEFAULT_FROM_EMAILफिक्स के अलावा अन्य लोगों ने उल्लेख किया है, और कम-सुरक्षित ऐप्स को खाते तक पहुंचने की अनुमति दी है, मुझे Django को अंतिम रूप से प्रमाणित करने के लिए खाते में प्रवेश करने के दौरान https://accounts.google.com/DisplayUnlockCaptcha पर नेविगेट करना होगा। ।

मैं उस URL पर SSH सुरंग के माध्यम से वेब सर्वर पर गया था ताकि यह सुनिश्चित हो सके कि IP पता वही था; अगर यह जरूरी है तो मुझे पूरी तरह यकीन नहीं है लेकिन यह चोट नहीं पहुंचा सकता। आप ऐसा कर सकते हैं: ssh -D 8080 -fN <username>@<host>तो, अपने वेब ब्राउज़र को localhost:8080सॉक्स प्रॉक्सी के रूप में उपयोग करने के लिए सेट करें ।


2

आप अपने मशीन या लोकलहोस्ट पर ईमेल भेजने का परीक्षण करने के लिए "टेस्ट मेल सर्वर टूल" का उपयोग कर सकते हैं । Google और "टेस्ट मेल सर्वर टूल" डाउनलोड करें और इसे सेट करें।

फिर आपकी सेटिंग में:

EMAIL_BACKEND= 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 25

शेल से:

from django.core.mail import send_mail
send_mail('subject','message','sender email',['receipient email'],    fail_silently=False)

1

के लिए SendGrid - Django विशेष रूप से:

SendGrid Django डॉक्स यहाँ

में इन चर सेट करें

settings.py

EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = 'sendgrid_username'
EMAIL_HOST_PASSWORD = 'sendgrid_password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

विचारों में

from django.core.mail import send_mail
send_mail('Subject here', 'Here is the message.', 'from@example.com', ['to@example.com'], fail_silently=False)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.