참고
https://blog.naver.com/dsz08082/223102679738
1. SMTP 인증 오류
- 문제: 이메일 전송 중
socket.gaierror: [Errno -2] Name or service not known 오류가 발생.
- 원인: SMTP 서버 호스트 이름이 올바르게 DNS로 해석되지 않았거나 네트워크 설정 문제.
- 해결 방법:
.env 파일이나 Django 설정 파일에서 EMAIL_HOST 설정이 올바른지 확인.
- 서버에서
nslookup 명령어를 사용하여 SMTP 서버 호스트 이름이 IP 주소로 해석되는지 확인.
- 네트워크 방화벽 설정을 점검하고, 필요한 경우 수정하여 SMTP 서버와의 통신이 가능하도록 설정.
2. AWS SES 권한 문제
- 문제:
InvalidClientTokenId 또는 IncompleteSignature 오류 발생.
- 원인: IAM 계정의 액세스 키가 잘못되었거나 서명(Signature Version 4) 생성 중 문제가 발생.
- 해결 방법:
- IAM 계정에서 새 액세스 키를 발급받고
.env 파일에 업데이트.
- 액세스 키에 특수 문자가 포함되어 있다면 새 액세스 키를 생성하여 문제를 해결.
3. Boto3를 통한 이메일 발송 오류
- 문제: Boto3를 사용하여 이메일을 전송할 때
SignatureDoesNotMatch 오류 발생.
- 원인: AWS 서명 생성 시 발생하는 문제로, AWS 액세스 키나 비밀 키가 잘못되었을 수 있음.
- 해결 방법:
- 새 액세스 키와 비밀 키를 발급받아 사용.
- Boto3 클라이언트 설정 시, 올바른 지역 이름(
region_name)과 인증 정보를 사용했는지 확인.
4. 샌드박스 모드 문제
- 문제: Amazon SES 계정이 샌드박스 모드에 있어 모든 이메일이 수신되지 않거나 제한됨.
- 해결 방법:
- Amazon SES 콘솔에서 샌드박스 모드를 해제 요청.
- 필요한 경우, 수신자 이메일을 미리 승인된 주소로 추가.
5. 환경 변수 문제
- 문제: Django 설정에서 AWS SES 관련 환경 변수를 제대로 읽지 못함.
- 해결 방법:
django-environ을 사용하여 .env 파일을 올바르게 로드하고 있는지 확인.
- 환경 변수가 Django 설정 파일에서 올바르게 전달되는지 로그를 통해 확인.
6. SMTP와 Boto3 간의 차이
- 문제: Django의
django.core.mail.backends.smtp.EmailBackend와 Boto3를 통한 이메일 발송 간의 차이로 인해 혼란이 발생.
- 해결 방법:
django-ses를 사용하거나 Boto3를 직접 사용하여 이메일을 전송하도록 설정.
- Boto3는 AWS SDK이므로, AWS 클라이언트를 직접 구성해 사용할 수 있음.
django-ses는 Django에서 Amazon SES와의 통합을 쉽게 하는 백엔드입니다.
7. Nginx와 Django 연동 문제
- 문제: 정적 파일이 제대로 로드되지 않거나 Nginx와 Django 간의 프록시 문제가 발생.
- 해결 방법:
python manage.py collectstatic 명령어를 사용하여 정적 파일을 한 곳에 모은 후, Nginx가 이 정적 파일을 제공하도록 설정.
8. 다양한 기타 오류 및 해결
- 이슈: 다양한 오류 메시지 발생 (예:
IncompleteSignature, InvalidClientTokenId, SignatureDoesNotMatch 등).
- 해결 방법:
- AWS CLI를 통해 직접 테스트하고 설정을 검증.
- Django 설정에서 환경 변수를 바르게 로드하고 있는지 확인.
- Boto3 라이브러리에서 AWS 자격 증명을 바르게 전달하는지 확인.