Как отправить электронную почту через 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=['user@gmail.com']) email.send() 

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

Однако как я могу отправить электронное письмо не на сервер отладки, а на user@gmail.com?

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

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

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

  • Как отправить электронное письмо нескольким получателям, используя python smtplib?
  • Присоединить txt-файл в Python smtplib
  • Подключиться к SMTP (SSL или TLS) с помощью Python
  • Расширение SMTP AUTH не поддерживается сервером в python 2.4
  • Нет атрибута «SMTP», ошибка при попытке отправить электронную почту на Python
  • Django: Отправить SMTP-адрес электронной почты через GoDaddy
  • Кодирование темы почты (SMTP) в Python с символами, отличными от ASCII
  • Поддержка прокси-сервера python smtplib
  • 10 Solutions collect form web for “Как отправить электронную почту через Django?”

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

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

    В settings.py:

     EMAIL_USE_TLS = True EMAIL_HOST = 'smtp.gmail.com' EMAIL_PORT = 587 EMAIL_HOST_USER = 'me@gmail.com' 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_USE_TLS = True EMAIL_HOST = 'smtp.gmail.com' EMAIL_HOST_USER = 'youremail@gmail.com' EMAIL_HOST_PASSWORD = 'yourpassword' 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() 

    Для 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

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

    В settings.py:

     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» как O / P ie Success. И я тоже получил почту. 🙂

    Вы должны использовать 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 = 'urusername@gmail.com' 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'] = '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 

    Я нашел использование 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']) 

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

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

    Отправка электронной почты с помощью 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) 
    Python - лучший язык программирования в мире.