파이썬의 MIME 멀티파트

Abid Ullah 2023년6월21일
  1. Python의 MIMEMultipart, MIMETextMIMEBase 모듈
  2. Python에서 첨부 파일이 있는 이메일을 보내는 예제 스크립트
파이썬의 MIME 멀티파트

프롬프트 또는 알림 또는 기타 목적으로 이메일을 보내는 것은 우리 삶의 중요하고 규칙적인 부분이 되었습니다. 소프트웨어 개발자는 종종 개발 단계에서 최종 사용자가 애플리케이션을 통해 이메일을 받기를 원하는 상황에 직면합니다.

이 기사에서는 Python과 Python의 MIME(Multipurpose Internet Mail Extensions) 모듈을 사용하여 첨부 파일이 있는 이메일을 보내는 효율적인 방법에 대해 알아봅니다.

Python의 MIMEMultipart, MIMETextMIMEBase 모듈

Python의 smtplib와 매우 유사하게 MIME 모듈은 이메일의 송수신 프로세스를 보다 쉽고 향상시키는 데 도움이 되는 고급 도구를 제공합니다.

smtplib 모듈을 사용하면 첨부 파일 없이 이메일을 보낼 수 있지만 MIME 모듈은 첨부 파일이 있는 이메일을 보내야 할 때 사용됩니다.

MIME의 세 가지 모듈은 다양하고 고유한 목적을 가지고 있으며 각각 Python 스크립트를 통해 이메일을 보내는 경험을 향상시킬 수 있습니다.

  1. MIME 멀티파트

    이 모듈은 다양한 콘텐츠 유형으로 메시지를 구성하려는 경우에 사용됩니다. 이는 MIMEMultipart가 많은 콘텐츠 유형의 사용을 지원함을 의미합니다.

    예를 들어 text/HTML 및 application/octet-stream입니다. 우리는 또한 multipart의 도움으로 HTML과 HTML 내에 이미지를 둘 다 가질 수 있습니다.

  2. MIME텍스트

    이것은 텍스트 기반 이메일을 보내는 데 사용됩니다. 이 모듈을 사용하면 완전한 텍스트 기반 이메일을 쉽게 작성하고 보낼 수 있습니다.

  3. MIME베이스

    MIMEBase 모듈은 기본 클래스로만 사용되므로 보다 구체적인 하위 클래스와 ‘MIME 인식’을 가질 수 있습니다.

Python에서 첨부 파일이 있는 이메일을 보내는 예제 스크립트

첨부 파일이 있는 이메일을 보내는 Python 스크립트를 작성하는 것이 첨부 파일이 없는 이메일에 비해 상당히 복잡하다고 생각할 수 있지만 MIME 모듈은 전체 프로세스를 다소 간단하게 만듭니다.

첨부 파일이 있는 이메일을 보내려면 다음 단계를 따라야 합니다.

첨부 파일을 추가하려면 다음 Python 라이브러리를 가져와야 합니다.

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders

이러한 라이브러리는 당면한 작업을 매우 간단하게 만듭니다. 운 좋게도 이들은 기본 라이브러리이고 작업을 잘 수행하므로 첨부 파일을 추가하기 위해 가져온 외부 라이브러리가 필요하지 않습니다.

  1. 먼저 MIMEMultipart에 대한 인스턴스를 생성하여 스크립트를 시작하고 이를 msg라고 합니다.

  2. 그런 다음 발신자와 수신자의 이메일 주소를 기술합니다. 또한 생성한 인스턴스의 From, ToSubject 키에서 주제를 설명합니다.

  3. 이제 body라는 변수에 보내려는 메시지의 본문을 구성하고 이전에 attach() 메서드를 사용하여 생성한 msg 인스턴스에 이 변수를 연결해야 합니다.

  4. 이제 첨부할 파일을 여는 재미있는 부분이 있습니다. rb 모드에서 이 파일을 엽니다.

    그런 다음 maintypesubtype의 두 매개 변수를 사용하여 MIMEBase 인스턴스를 생성합니다. 이들은 메시지의 모든 MIME 인식 하위 클래스에 대한 기본 클래스를 정의합니다.

    여기에서 maintype은 주로 텍스트 또는 이미지로 구성된 콘텐츠 유형 major이고 subtype은 일반적으로 일반, gif, 오디오 및/또는 기타 미디어로 구성된 콘텐츠 유형 minor입니다.

  5. 이제 set_payload를 사용하여 페이로드를 인코딩된 형식으로 변경합니다. 이를 base 64로 인코딩하고 이 파일을 이전에 생성한 멀티파트 인스턴스 msg에 첨부합니다.

다음은 MIME 모듈의 사용을 시각화하고 이해하는 데 도움이 되는 Python 스크립트입니다.

예제 코드:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders

fromaddr = "EMAIL address of the sender"
toaddr = "EMAIL address of the receiver"
# instance of MIMEMultipart
msg = MIMEMultipart()
# storing the sender's email address
msg["From"] = fromaddr
# storing the receiver's email address
msg["To"] = toaddr
# storing the subject
msg["Subject"] = "Subject of the Mail"
# The string to store the body of the mail
body = "Body_of_the_mail"
# attach the body with the msg instance
msg.attach(MIMEText(body, "plain"))
# open the file to be sent
filename = "File_name_with_extension"
attachment = open("Path of the file", "rb")
# The instance of MIMEBase and named as p
p = MIMEBase("application", "octet-stream")
# To change the payload into encoded form
p.set_payload((attachment).read())
# encode into base64
encoders.encode_base64(p)
p.add_header("Content-Disposition", "attachment; filename= %s" % filename)
# attach the instance 'p' to instance 'msg'
msg.attach(p)
# creates SMTP session
s = smtplib.SMTP("smtp.gmail.com", 587)
# start TLS for security
s.starttls()
# Authentication
s.login(fromaddr, "Password_of_the_sender")
# Converts the Multipart msg into a string
text = msg.as_string()
# sending the mail
s.sendmail(fromaddr, toaddr, text)
# terminating the session
s.quit()

이것은 한 사람에게 이메일을 보내는 상당히 간단한 스크립트입니다. 이 이메일을 여러 사람에게 보내려면 루프를 사용하여 이를 달성할 수 있습니다.

여기서 주목해야 할 또 다른 중요한 점은 이메일 계정에서 2단계 인증을 활성화한 경우 이 스크립트가 작동하지 않는다는 것입니다. 이것이 작동하려면 2단계 인증을 비활성화해야 합니다.

이 방법으로 이메일을 보내면 이메일이 스팸 폴더가 아닌 사용자의 받은 편지함에 바로 도착합니다.

이 기능은 오용될 수 있지만 이메일 누락으로 인해 긴급하고 지체할 여유가 없는 비즈니스에 도움이 될 수 있음을 알고 있습니다.

Python 및 기본 MIME 라이브러리를 사용하여 첨부 파일이 있는 간단한 이메일을 보내는 방법에 대해 알아야 할 모든 것을 배웠습니다.

작가: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn