장고:이메일app 만들기: 두 판 사이의 차이

학교의 모든 지식. SMwiki
둘러보기로 이동 검색으로 이동
편집 요약 없음
편집 요약 없음
 
(같은 사용자의 중간 판 하나는 보이지 않습니다)
3번째 줄: 3번째 줄:
==개요==
==개요==
장고에서 사용자에게 이메일을 보낼 일이 있다. 이러한 기능들을 한번에 관리하기 위한 앱.
장고에서 사용자에게 이메일을 보낼 일이 있다. 이러한 기능들을 한번에 관리하기 위한 앱.
=== 제공자에 따른 서버명, 포트 ===
{| class="wikitable"
!'''메일 Provider'''
!'''SMTP 서버명'''
!'''포트'''
!사전준비
|-
|Gmail
|smtp.gmail.com
|587
|구글에서 앱 비밀번호까지 얻자. [https://coding-kindergarten.tistory.com/204 링크]
|-
|Naver
|smtp.naver.com
|587
|
|-
|Live
|smtp.live.com
|587
|
|-
|Daum
|smtp.daum.net
|465
|
|-
|nate.com
|smtp.mail.nate.com
|465
|
|-
|outlook.com
|smtp.outlook.com
|587
|
|}


=과정=
=과정=
24번째 줄: 62번째 줄:


===settings.py 수정===
===settings.py 수정===
이메일을 보내기 위한 smtp 서버를 설정해주어야 한다. 없는 내용이니 다음과 같이, 이용하려는 서비스에 따라 추가해 준다.<syntaxhighlight lang="python">
이메일을 보내기 위한 smtp 서버를 설정해주어야 한다. 없는 내용이니 다음과 같이, 이용하려는 서비스에 따라 추가해 준다.
 
각 서비스에 따른 설정은 위의 제공자에 따른 서버명, 포트를 참고하자.<syntaxhighlight lang="python">
# Email settings
# Email settings
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
68번째 줄: 108번째 줄:
     messages.info(request, '이메일을 발송하였습니다~')
     messages.info(request, '이메일을 발송하였습니다~')
     return redirect('성공 후 보낼 주소')
     return redirect('성공 후 보낼 주소')
</syntaxhighlight>파이썬의 모듈을 이용한 복잡한 방식.<syntaxhighlight lang="python">
</syntaxhighlight>
import smtplib  # 이메일을 보내는 모듈
from email.mime.text import MIMEText  # 메일 본문을 html로 나타내기 위해
from email.mime.multipart import MEMEMultipart  # 메시지객체를 위해


def sendEmail(request):
= 관련에러 =
    # 어디로 보낼 것인가? 입력받은 데이터를 토대로.
    receiver = request.POST['receiver']
   
    ###################사전정보 입력
    # 보내는 사람 정보
    sender = "[email protected]"
    sender_password = "설정한 비밀번호"
    # 메일서버로그인
    server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
    server.login(sender, sender_password)
    # 메시지객체생성
    msg = MIMEMultipart('alternative')
    msg['Subject'] = "제목입력"
    msg['From'] = sender
    msg['To'] = receiver
    msg.attach(content)
    # 메일발송
    server.sendmail(msg['From'], msg['To'], )
    server.quit()
    return redirect(....)


=== SMTPServerDisconnected ===
설정에서 무언가 잘못되어 연결 자체가 되지 않은 경우. 포트번호가 다르거나 할 때 나온다.


</syntaxhighlight>
=== SMTPAuthenticationError ===
비밀번호 등의 설정이 잘못된 경우. 보통 Gmail을 사용할 때 발생하는데, Gmail에선 어플리케이션 비밀번호를 따로 관리한다. 위의 서비스별 안내를 참고해 진행해보자.
<br />

2022년 7월 15일 (금) 18:26 기준 최신판

장고! 웹 프레임워크! 틀:장고

  1. 장고:개요
  2. 장고:웹페이지설계
    1. 장고:앱
    2. 장고:url
    3. 장고:model
      1. 장고:DB
      2. 장고:모델 필드
      3. 장고:모델의 변경
    4. 장고:view
      1. 장고:클래스형 뷰, 제네릭 뷰
      2. 장고:view 각종 기능
    5. 장고:template
    6. 장고:static. 정적파일 사용하기
      1. 장고:CSS 사용하기
      2. 장고:JS 사용하기
      3. 장고:글꼴 사용
      4. 장고:부트스트랩
    7. 장고:media. 미디어 파일 사용하기
  3. 장고:관리자페이지
  4. 장고:settings.py
  5. 장고:기능구현
    1. 장고:회원관리
    2. 장고:유저
    3. 장고:커스텀 유저
    4. 장고:소셜로그인
    5. 장고:입력받기
    6. 장고:저장된 내용 활용하기
    7. 장고:변수 내보내기
    8. 장고:글쓰기
    9. 장고:페이징(페이지나누기)
    10. 장고:답변쓰기(댓글쓰기)
    11. 장고:추천,즐겨찾기
    12. 장고:새글(최신글) 나타내기
    13. 장고:썸머노트 설치
    14. 장고:네비게이션 바 만들기
    15. 장고:검색기능
    16. 장고:카테고리 만들기
    17. 장고:사진 올리기
    18. 장고:파일 업로드
    19. 장고:이메일app 만들기
    20. 장고:매직 그리드
  6. 장고:웹서비스
    1. 장고:Git
    2. 장고:리눅스에 올리기
    3. 장고:우분투에 올리기(nginx 사용)
    4. 장고:도커로 올리기
  7. 장고:팁

개요[편집 | 원본 편집]

장고에서 사용자에게 이메일을 보낼 일이 있다. 이러한 기능들을 한번에 관리하기 위한 앱.

제공자에 따른 서버명, 포트[편집 | 원본 편집]

메일 Provider SMTP 서버명 포트 사전준비
Gmail smtp.gmail.com 587 구글에서 앱 비밀번호까지 얻자. 링크
Naver smtp.naver.com 587
Live smtp.live.com 587
Daum smtp.daum.net 465
nate.com smtp.mail.nate.com 465
outlook.com smtp.outlook.com 587

과정[편집 | 원본 편집]

앱 생성[편집 | 원본 편집]

앱을 생성하고..

urls.py수정[편집 | 원본 편집]

앱의 url경로를 추가한다.

path('Email/', include('Email.urls'))

앱의 urls.py 작성[편집 | 원본 편집]

app_name = 'email'
from . import views

urlpatterns = [
    path('send/', views.sendEmail, name='send')]

settings.py 수정[편집 | 원본 편집]

이메일을 보내기 위한 smtp 서버를 설정해주어야 한다. 없는 내용이니 다음과 같이, 이용하려는 서비스에 따라 추가해 준다.

각 서비스에 따른 설정은 위의 제공자에 따른 서버명, 포트를 참고하자.

# Email settings
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_USE_TLS = True
EMAIL_PORT = 465  # 장고 한그릇 뚝딱에선 587이라 기입되어 있다.
EMAIL_HOST_USER = '각자 이메일'
EMAIL_HOST_PASSWORD = '각자 암호'

위를 설정했다면 나머지를 짜기 전에 테스트를 해보자.

파이썬 콘솔로 접속하여.. python manage.py shell

>>> from django.core.mail import EmailMessage

>>> email = EmailMessage('title', 'content', to=['[email protected]'])

>>> email.send()

위 형태로 보내보면 메일이 간다. 이걸 확인했다면 settings.py 설정은 완료.

view 작성[편집 | 원본 편집]

사전작업[편집 | 원본 편집]

구글이든 어떤 서비스에서든 계정>보안탭에서 앱의 엑세스를 허용한다.

view 작성[편집 | 원본 편집]

장고의 기능을 사용하면 우리가 해왔던 것들처럼 탬플릿을 사용할 수 있다.

딱히 메일서버를 연동시키는 일도 없이 좋다.

from django.core.mail import EmailMessage  # 이메일을 보내는 모듈. 파이썬에선 smtplib를 사용하지만, 장고 자체의 기능이 더 편리하다.
from django.template.loader import render_to_string  # 템플릿을 렌더링하기 위한 기능.
def verification(request):
    if request.method == "POST":
        pass
    content = {'user' : request.user}
    msg_html = render_to_string('verification.html', content)
    msg = EmailMessage(subject="이메일 인증",
                       body=msg_html,
                       to=[request.user.email],
                       )
    msg.content_subtype = 'html'  # html 코드로 나타내기 위함.
    msg.send()
    messages.info(request, '이메일을 발송하였습니다~')
    return redirect('성공 후 보낼 주소')

관련에러[편집 | 원본 편집]

SMTPServerDisconnected[편집 | 원본 편집]

설정에서 무언가 잘못되어 연결 자체가 되지 않은 경우. 포트번호가 다르거나 할 때 나온다.

SMTPAuthenticationError[편집 | 원본 편집]

비밀번호 등의 설정이 잘못된 경우. 보통 Gmail을 사용할 때 발생하는데, Gmail에선 어플리케이션 비밀번호를 따로 관리한다. 위의 서비스별 안내를 참고해 진행해보자.