본문 바로가기
Python

Python - smtplib 기본 라이브러리를 이용한 text/html 메일 보내기

by 올엠 2024. 3. 3.
반응형

대부분 프로그래밍에서는 메일 전달과 관련된 기본 라이브러리 및 예제 코드를 제공하고 있다.

오늘은 Python 부분에 대해서 메일 전송 방안에 대해 정리해 보고자 한다.

여기에서는 기본 라이브러리를 활용한 방안에 대해서 정리해 보도록 하겠다.

MailSender 함수 만들기

메일에 내용이나 본문이 변경될 수 있기 때문에 아래와 같이 함수를 선언하여 사용하는 것을 추천한다.

아래 코드에서 유심있게 봐야하는 부분은 보내야 하는 대상 즉 To가 여러명일 경우,

sendmail 에서의 To 데이터와 Message["To"]에 들어가는 데이터 형식이 다르다는 것이다.

smtplib 의 sendmail 에서는 []를 이용한 리스트 형태로 들어가야 한다.

하지만 message["To"] 에서는 string으로 들어가야 하기 때문에 리스트를 문자열로 변환하는 작업을 진행해준다.

import smtplib, ssl
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

server_addr = "input your smtp server address"
login_user = ""my@asecurity.dev"
login_pass = "my password"


def MailSender(in_subject, in_text, in_from, in_to):
    recipients = [in_to] # 문자열을 리스트로 변환
    message = MIMEMultipart("alternative")
    message["Subject"] = in_subject
    message["From"] = in_from
    message["To"] = in_to
    text = """\
    안녕하세요, 
    {text}
    """.format(text=in_text)

    # write the HTML part
    html = """\
    <html>
    <body>
        <p><{text}</p>
    </body>
    </html>
    """.format(text=in_text)
    part1 = MIMEText(text, "plain")
    part2 = MIMEText(html, "html")
    message.attach(part1)
    message.attach(part2)
    
    try:
        s = smtplib.SMTP(host=server_addr, port=25)
        s.connect(server_addr, 25)
        s.ehlo()
        s.starttls()
        s.ehlo()
        s.login(login_user, login_pass)
        s.sendmail(in_from, recipients, message.as_string())
        s.quit()
        print("Successfully sent the mail.")
    except Exception as mail_sender_e:
        print("Failed to send the mail..", mail_sender_e)

 

위 함수를 이용해서 메일을 보낸다면 다음과 같이 사용이 가능하다.

MailSender('test email 입니다.', '본문 입니다.', 'allmnet@asecurity.dev', 'test@gmail.com, test@naver.com')
 
반응형