source

장고를 통해 이메일을 보내는 방법은?

nicesource 2023. 6. 13. 22:24
반응형

장고를 통해 이메일을 보내는 방법은?

내 안에서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. 당신은 이메일을 보낼 때 localhost(단순 우분투 PC)를 사용할 수 없나요?

  2. 저는 장고 1.3으로 생각했습니다.send_mail()다소 사용되지 않고 있습니다.EmailMessage.send()대신 사용됩니까?

저는 Gmail을 장고의 SMTP 서버로 사용합니다.포스트픽스나 다른 서버를 처리하는 것보다 훨씬 쉽습니다.저는 이메일 서버를 관리하는 일을 하고 있지 않습니다.

설정에서.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

전자 메일을 실제 SMTP 서버로 보냅니다.만약 독자적인 회사를 설립하고 싶지 않다면 구글과 같은 회사를 운영할 수 있습니다.

  1. :django-admin.py startproject gmail
  2. 설정을 편집합니다.아래 코드를 포함한 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()
    

자세한 내용은 문서의 및 기능을 확인하십시오.

Gmail 업데이트

또한 gmail을 통해 이메일을 보내는 데 문제가 있다면 구글에서 이 가이드를 확인하는 것을 잊지 마십시오.

설정에서 합니다.Security > Account permissions > Access for less secure apps이 옵션을 활성화합니다.

또한 2단계 인증을 설정한 후 지메일에 대한 앱별 암호를 만드십시오.

그러면 설정에서 앱별 비밀번호를 사용해야 합니다.따라서 다음 행을 변경합니다.

    EMAIL_HOST_PASSWORD = 'your_email_app_specific_password'

또한 HTML 전자 메일을 보내고 싶다면 이 항목을 확인하십시오.

내 사이트는 다음에 호스팅됩니다.Godaddy그리고 저는 개인 이메일을 같은 것에 등록했습니다.다음은 저에게 효과적인 설정입니다.

설정에서.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()

그리고 저는 O/PI로 "1"을 받았습니다.성공.그리고 저도 메일을 받았습니다.:)

  • domain.com 의 의미는 무엇입니까?

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

마지막 줄은 장고 1.7을 위한 트릭을 했습니다.

설정에서 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'

이에 대해 gmail을 사용하는 경우 2단계 확인응용 프로그램별 암호를 설정하고 위의 EMAIL_HOST_PASSWORD 값에 해당 암호를 복사하여 붙여넣습니다.

저는 Django로 이메일 보내기를 설정하는 가장 쉬운 방법이 SendGrid를 사용하는 것이라고 생각했습니다.작동 방식은 다음과 같습니다.

  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로 이메일을 보내는 것은 한 달에 최대 12,000개의 이메일을 무료로 보낼 수 있습니다.

저는 사실 이것을 조금 전에 장고에서 했습니다.합법적인 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

"메일 서버 테스트 도구"를 사용하여 컴퓨터 또는 로컬 호스트에서 전자 메일 전송을 테스트할 수 있습니다.Google에서 "Test Mail Server Tool"을 다운로드하여 설정합니다.

그런 다음 설정에서.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)

늦었지만:

그 외에도DEFAULT_FROM_EMAIL다른 사람들이 언급한 수정 사항, 그리고 덜 안전한 앱이 계정에 액세스할 수 있도록 허용하여, 저는 장고가 최종 인증을 받도록 하기 위해 문제의 계정으로 로그인하는 동안 https://accounts.google.com/DisplayUnlockCaptcha 으로 이동해야 했습니다.

저는 IP 주소가 동일한지 확인하기 위해 SSH 터널을 통해 웹 서버로 해당 URL로 이동했습니다. 필요한지는 완전히 확신할 수 없지만 문제가 될 수는 없습니다.다음과 같이 할 수 있습니다.ssh -D 8080 -fN <username>@<host>그런 다음 사용할 웹 브라우저를 설정합니다.localhost:8080양말 대리로서

SendGrid - 장고의 경우 구체적으로:

여기로 Grid Django Docs 보내기

다음 변수 설정

설정.파이의

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)

아래 형식은 나를 위해 일했습니다.

EMAIL_BACKEND = 'django.core.mail.backends.sys.이메일 백엔드'

EMAIL_USE_TLS = True EMAIL_HOST = 'mail.xxxxxxxxx.xxx'

EMAIL_PORT = 465

EMAIL_HOST_USER = 'support@xxxxxxx.xxx'

EMAIL_HOST_PASSWORD = 'xxxxxxxx'

설정에서.py 다음과 같이 이메일을 구성합니다.

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'user@gmail.com'
EMAIL_HOST_PASSWORD = 'password'

대부분의 경우 Gmail 설정이 누락됩니다.보안 수준이 낮은 앱 액세스가 켜져 있는지 확인합니다.여기에서 절차를 확인할 수도 있습니다.

그런 다음 django.core.mail import send_mail 보기 내에서 이메일을 보냅니다.

def send(request):
    send_mail(
        ‘Email Subject here’,
        ‘Email content’,
        settings.EMAIL_HOST_USER,
        [‘emailto@gmail.com’],
        fail_silently=False)

언급URL : https://stackoverflow.com/questions/6367014/how-to-send-email-via-django

반응형