Как отправить письмо через 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]?
прочитав ваши ответы, позвольте мне кое-что прояснить:
не можете ли вы использовать localhost(простой ubuntu pc) для отправки электронные письма?
Я думал в django 1.3
send_mail()несколько устарел иEmailMessage.send()используется вместо этого?
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
- создать проект:
django-admin.py startproject gmailредактировать 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запустить интерактивный режим:
python manage.py shellимпорт модуля EmailMessage:
from django.core.mail import EmailMessageотправить по электронной почте:
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. Вот как это работает:
- создать учетную запись SendGrid (и подтвердите свою электронную почту)
- добавить следующий код
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 в частности:
установить эти переменные в
settings.py
EMAIL_HOST = 'smtp.sendgrid.net' EMAIL_HOST_USER = 'sendgrid_username' EMAIL_HOST_PASSWORD = 'sendgrid_password' EMAIL_PORT = 587 EMAIL_USE_TLS = Truein 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