В моем 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()
?
Отправьте электронное письмо на настоящий SMTP-сервер. Если вы не хотите настраивать свои собственные, вы можете найти компании, которые будут запускать один для вас, например, сами Google.
Я использую Gmail как мой SMTP-сервер для Django. Гораздо проще, чем иметь дело с postfix или любым другим сервером. Я не занимаюсь управлением почтовыми серверами.
В 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 p >
django-admin.py startproject gmail
Измените settings.py с кодом ниже:
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'yourpassword'
EMAIL_PORT = 587
Запуск интерактивного режима: python manage.py shell
Импортируйте модуль EmailMessage:
from django.core.mail import EmailMessage
Отправьте электронное письмо:
email = EmailMessage('Subject', 'Body', to=['[email protected]'])
email.send()
Для версии 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 = '[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, и у меня есть частная электронная почта, зарегистрированная на том же. Это настройки, которые работали для меня:
В 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 в качестве backend в settings.py
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 = '[email protected]'
EMAIL_HOST_PASSWORD = 'password'
Если для этого используется gmail, установите двухэтапную аутентификацию и специальный пароль для приложения и скопируйте и вставьте этот пароль в EMAIL_HOST_PASSWORD стоимость.
Я действительно сделал это из 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'] = '[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
smtplib
напрямую; Джанго справится с этой частью за вас.
send_mail
и использую свою собственную ...
Я нашел, используя SendGrid, самый простой способ настроить отправку электронной почты с помощью Django. Вот как это работает:
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 отправлял вам сообщения по электронной почте, когда есть ошибка внутреннего внутреннего сервера, добавьте следующее к своему settings.py
:
DEFAULT_FROM_EMAIL = '[email protected]'
ADMINS = [('<Your name>', '[email protected]')]
Отправка электронной почты с помощью SendGrid бесплатна до 12 тыс. писем в месяц.
Поздно, но:
В дополнение к исправлению DEFAULT_FROM_EMAIL
, о котором упоминали другие пользователи, и разрешению доступа к учетной записи менее защищенным приложениям, мне пришлось перейти на https://accounts.google.com/DisplayUnlockCaptcha во время входа в учетную запись, чтобы заставить Django окончательно пройти аутентификацию.
Я отправился на этот URL через туннель SSH на веб-сервер, чтобы убедиться, что IP-адрес был таким же; Я не совсем уверен, что это необходимо, но это не может повредить. Вы можете сделать это так: ssh -D 8080 -fN <username>@<host>
, а затем установите для вашего веб-браузера localhost:8080
как прокси-сервер SOCKS.
Вы можете использовать "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
Из оболочки:
from django.core.mail import send_mail
send_mail('subject','message','sender email',['receipient email'], fail_silently=False)