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())을 호출하면 메일이 발송된다.