Как отправить письмо через Django?



в своем 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=['[email protected]'])
email.send()


конечно, если я настрою сервер отладки через python -m smtpd -n -c DebuggingServer localhost:1025, Я вижу электронную почту в моем терминале.



однако, как мне на самом деле отправить письмо не на сервер отладки, а на [email protected]?



прочитав ваши ответы, позвольте мне кое-что прояснить:




  1. не можете ли вы использовать localhost(простой ubuntu pc) для отправки электронные письма?


  2. Я думал в django 1.3 send_mail() несколько устарел и EmailMessage.send() используется вместо этого?


938   11  

11 ответов:

отправить письмо на реальный SMTP-сервер. Если вы не хотите создавать свои собственные, вы можете найти компании, которые будут работать для вас, например, сами Google.

Я использую Gmail в качестве моего SMTP-сервера для Django. Гораздо проще, чем иметь дело с postfix или любым другим сервером. Я не занимаюсь управлением почтовыми серверами.

In settings.py:

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'password'

Примечание: в 2016 году Gmail больше не позволяет этого по умолчанию. Вы можете использовать внешнюю службу, такую как Sendgrid, или вы можете следовать этому руководству от Google, чтобы уменьшить безопасность, но разрешить эту опцию: https://support.google.com/accounts/answer/6010255

  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 = '[email protected]'
    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=['[email protected]'])
    email.send()
    

для получения дополнительной информации, проверить send_mail и EmailMessage функции в документы.

обновление для Gmail

кроме того, если у вас есть проблемы с отправкой электронной почты через gmail не забудьте проверить этого руководства от google.

в настройках аккаунта Google перейдите в раздел Security > Account permissions > Access for less secure apps и включите эту опцию.

и создать специальный пароль приложения для вашего gmail после повернул на 2-шаг-проверка для оно.

затем вы должны использовать app конкретный пароль в настройках. Поэтому измените следующую строку:

    EMAIL_HOST_PASSWORD = 'your_email_app_specific_password'

для Django версии 1.7, если выше решения не работают, то попробуйте следующее

in settings.py добавить

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

EMAIL_USE_TLS = True

EMAIL_HOST = 'smtp.gmail.com'

EMAIL_HOST_USER = '[email protected]'

#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

мой сайт размещен на Godaddy, и у меня есть частная электронная почта, зарегистрированная на том же. Это настройки, которые работали для меня:

In settings.py:

EMAIL_HOST = 'mail.domain.com'
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'abcdef'
DEFAULT_FROM_EMAIL = '[email protected]'
SERVER_EMAIL = '[email protected]'
EMAIL_PORT = 25
EMAIL_USE_TLS = False

в консоли:

from django.core.mail import EmailMessage
email = EmailMessage('Subject', 'Body', to=['[email protected]'])
email.send()

тогда я получил "1" как O/P т. е. успех. И я тоже получил письмо. :)

вы должны использовать smtp как бэкэнд in settings.py

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

Если вы используете backend в качестве консоли, вы получите вывод в консоли

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

а также ниже настройки в дополнение

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'password'

Если вы используете gmail для этого настройки 2-этап проверки и пароль для конкретного приложения и скопируйте и вставьте этот пароль выше значения EMAIL_HOST_PASSWORD.

Я на самом деле сделал это от Джанго некоторое время назад. Откройте законную учетную запись 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']      = '[email protected]'
    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

поздно, но:

кроме DEFAULT_FROM_EMAIL исправить уже упоминалось, и позволяя менее безопасным приложениям получить доступ к учетной записи, мне пришлось перейти к https://accounts.google.com/DisplayUnlockCaptcha при входе в систему в качестве учетной записи, о которой идет речь, чтобы получить Django для окончательной аутентификации.

Я пошел по этому URL-адресу через SSH-туннель на веб-сервер, чтобы убедиться, что IP-адрес был таким же; я не совсем уверен, что это необходимо, но это не повредит. Вы можете сделать это так:ssh -D 8080 -fN <username>@<host>, затем установите веб-браузер для использования localhost:8080 как прокси SOCKS.

я обнаружил, что использование 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>', '[email protected]', ['[email protected]'])

если вы хотите, чтобы Django отправлял вам по электронной почте каждый раз, когда есть внутренняя ошибка сервера 500, добавьте следующее settings.py:

DEFAULT_FROM_EMAIL = '[email protected]'
ADMINS = [('<Your name>', '[email protected]')]

отправка электронной почты с SendGrid бесплатно до 12k писем в месяц.

вы могли бы использовать "Test Mail Server Tool" для проверки отправки электронной почты на вашем компьютере или локальном хосте. Google и скачать "Test Mail Server Tool" и настроить его.

тогда в вашем settings.py:

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

от Shell:

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

на SendGrid-Django в частности:

SendGrid Django Docs здесь

установить эти переменные в

settings.py

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

in views.py

from django.core.mail import send_mail
send_mail('Subject here', 'Here is the message.', '[email protected]', ['[email protected]'], fail_silently=False)

Comments

    Ничего не найдено.