Sendgrid API 예제
import sendgrid
from sendgrid.helpers.mail import *
@application.route('/ko/guide/qna_write', methods = ['POST'])
def qna_write():
form = request.form # 파일이 아닌 일반 데이터를 받아오기 위한 객체
files = request.files # 파일을 받아오기 위한 객체
id = form['id'] # 입력받은 id값 ex) mail주소
title = form['title'] # 제목
text = form['text'] # 내용
upload = form['upload'] # 파일이름
sg = sendgrid.SendGridAPIClient(apikey='부여받은 API키')
# 메일 설정 ( Email() : 이메일형식임을 알림, Content() : 컨텐츠내용지정 )
#############################################################
from_email = Email("~@gmail.com") # 보낼 주소
to_email = Email("~@gmail.com") # 보내는 사람 주소
subject = title # 메일 제목
content = Content("text/plain", text) # 메일 내용
# Mail() 함수로 메일 컨텐츠 설정
##############################################################
mail = Mail(from_email, subject, to_email, content)
if 'up_file' not in request.files:
pass
else:
# 이메일 첨부파일설정
################################################################
data = request.files['up_file'].read() # 파일을 읽어들임
encoded = base64.b64encode(data).decode() # 첨부할 수 있는 형태로 디코드
# 첨부파일설정을 위한 Attachment객체 생성 및 설정
attachment = Attachment()
attachment.content = encoded # 첨부파일 디코드형태
attachment.type = type # 첨부파일 타입지정
attachment.filename = upload # 파일이름지정
attachment.disposition = "attachment" # ?
attachment.content_id = "addFile" # ?
mail.add_attachment(attachment) # 위 첨부할 이메일에 첨부파일을 더함(add_attachment(attachment))
try:
# 메일 전송
#############################################################################
response = sg.client.mail.send.post(request_body=mail.get())
except urllib.HTTPError as e:
print(e.read())
exit()
return "Mail Send Complete"
import
sendgrid API를 통해 메일을 발송하기 위해서는 sendgrid.helpers.mail모듈과 sendgrid모듈이 필요하다.
메일컨텐츠 설정
-
- 이메일 형식(받는사람/보내는사람)
- sendgrid에서 사용될 이메일을 지정하기 위해서는 Email()함수를 사용해 지정해 주어야 한다.
ex) Email(“test@gamil.com”)
-
- 제목
- 제목은 str형태로 쓰도록 한다.
-
- 내용
- sendgrid에서 사용할 내용은 Content()함수를 이용하여 설정하고, 첫번째 인자로는 해당 메일의 내용이 어떤 형태인지 지정해 주어야 한다. 일반적으로는 “text/plain”을 가장 많이 사용한다. 그리고 두번째 인자로 해당 메일의 내용을 입력한다.
ex ) Content(“text/plain”,”내용”)
- 마지막으로 이를 묶어서 보낼 객체로 만드는 Mail(보내는사람, 제목, 받는사람, 내용) 함수가 필요하다.
첨부파일 추가
enctype설정
첨부파일을 받기 위해서는 당연히 html form태그의 enctype을 multipart/form-data"로 설정해 주어야 파일을 백단으로 옮겨받을 수 있다.
첨부할 형태로 파일 디코드
첨부할 파일객체.read()를 통해 읽어온 데이터 data라는 변수에 저장했을 때,
base64.b64encode(data).decode()를 이용하여 파일을 디코드 시킨다.
메일객체로 첨부파일 붙이기
메일객체에 첨부파일을 더하기 위해서 Attachment()를 이용한 객체생성이 필요하다.
위 예제와 같이 설정해 준 후에 Mail()을 통해 생성된 객체의 메서드인 .add_attachment(attachment객체)를 통해 해당 메일에 첨부파일을 붙여준다.
메일발송
설정이 모두 끝난 후 실질적으로 메일을 발송하기 위해 sendgrid client객체가 필요한데, 이를 생성하기 위해서는 sendgrid에서 부여받은 api key가 필요하다.
객체의 생성은 sendgride.SendGridAPIClient(apikey='부여받은 API키')를 이용하여 생성하고,
메일을 발송하기 위해 sendgridclient객체.client.mail.send.post(request_body=메일객체.get())을 호출하면 메일이 발송된다.