<UR-Type> Django에서 gmail 전송하기

이시우·2021년 4월 5일

프로젝트 : UR-Type

목록 보기
7/11
post-thumbnail

유저들에게 웹페이지의 피드백을 메일로 받기 위해서 gmail을 보낼 수 있는 기능을 추가했다.

총 네가지 단계를 통해 메일 보내기 기능을 추가할 수 있다.

1. 구글 계정 설정하기

Google Account: https://myaccount.google.com/
구글 사이트에 접속해 내 계정 권한을 낮춰줘야한다.
사이드바의 보안 탭으로 이동해 보안 수준이 낮은 앱에 액세스부분을 활성화 시켜준다.
이 기능을 활성화하면 해외에서 접속 시도가 자주 일어난다고 하던데, 나는 구글 계정이 2개라 안쓰는 계정에 연동했다.

2. settings.py 설정하기

settings.py의 맨 아래 추가해줬다.

# send email
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.googlemail.com'
EMAIL_USE_TLS = True
EMAIL_PORT = 587
EMAIL_HOST_USER = '보내는 사람 메일'
EMAIL_HOST_PASSWORD = '메일 비밀번호'

3. html 파일 만들기

내 html 파일 전체를 가져왔다.
form 태그를 이용해 유저가 제목과 본문을 입력할 수 있게만들었다.
Send Feedback 버튼을 누르면 POST타입으로 데이터가 전송되며 다른 화면으로 변경된다.

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
	<link href="../static/css/index.css" rel="stylesheet" type="text/css" />
	<link href="../static/css/feedback.css" rel="stylesheet" type="text/css" />
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
	<div class="container">
		<h2>UR-Type을 사용해 주셔서 감사합니다.</h2>
		보내주신 피드백은 반영될 수 있도록 노력하겠습니다.
		<br/><br/>
		<form action="Send_Email" method="POST" id="Send_Email"> {% csrf_token %}
			제목 : <input type="text" name="title" id="title">
			<br/><br/>
			<textarea rows="10" cols="50" name="message" id="message"></textarea>
		</form>
		<button class="glow-on-hover" type="button"> Send Feedback </button>
	</div>
</body>

<script type="text/javascript">
	/* 유효성 검사 후 값 전송 */
	$('.glow-on-hover').click(function(){
		if( $('#title').val() == '' || $('#message').val() == '') {
			alert("제목과 내용을 입력해 주세요.");
		}
		Send_Email.submit();
	})
</script>
</html>

4. views.py 설정하기

html에서 받아온 값을 사용한다.
POST타입으로 받았는지 검사 후 title,message 변수에 받아온 값을 넣어준다.
settings.py에서 설정한 값을 가져와 email_from 변수에 넣어줬다.
나는 내가 나한테 메일을 보낼거라 to부분에 내 이메일을 한번 더 넣어줬다.
메일이 전송된 후 thanks.html 파일로 이동한다.

from django.core.mail import EmailMessage
from django.conf import settings

def Send_Email(request):
    if request.method == 'POST' :
        title = request.POST.get('title')
        message = request.POST.get('message')
        email_from = settings.EMAIL_HOST_USER
        email = EmailMessage(title, message, to=[email_from])
        email.send()
    return render(request, 'thanks.html')

0개의 댓글