본문 바로가기
PYTHON(파이썬)/파이썬 활용

첨부파일을 포함한 e-mail 보내기

by eplus 2024. 11. 14.

어제에 이어 파이썬으로 e-mail 보내는 소스입니다.

오늘은 첨부파일을 포함하셔 보냅니다. 아래 소스 참조하여 작성 가능합니다.

import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart

def sendMail(me, you):
    smtp = smtplib.SMTP_SSL('smtp.gmail.com', 465)
    smtp.login(me, '포스틱코드')
    msg = MIMEMultipart()
    msg["Subject"] = f"eGood file"
    msg["From"] = "eplus<g@gmail.com>"
    msg["To"] = you

    content =  "안녕하세요. \n 데이터 전달드립니다.\n\n"
    content_part = MIMEText(content, "plain")
    msg.attach(content_part)
       
    image_name = "egood.jpg"
    with open(image_name, 'rb') as file:
        img = MIMEImage(file.read())
        img.add_header('Content-Disposition', 'attachment', filename=image_name)
        msg.attach(img)    
       
    smtp.sendmail(me, you, msg.as_string())
    smtp.quit()

if __name__ == "__main__":
    sendMail('g@gmail.com', 'g@erpplus.co.kr')
이 코드는 `smtplib` 라이브러리를 사용하여 Gmail을 통해 이메일을 전송하는 Python 스크립트입니다. 함수 `sendMail(me, you)`는 발신자와 수신자 정보를 받아 이메일을 생성하고, 이미지 파일을 첨부하여 전송합니다. 주요 부분을 분석해보겠습니다.

1. **SMTP 설정 및 로그인**:
   ```python
   smtp = smtplib.SMTP_SSL('smtp.gmail.com', 465)
   smtp.login(me, '포스틱코드')
   ```
   `SMTP_SSL`를 사용하여 Gmail의 SMTP 서버(`smtp.gmail.com`)에 SSL 연결(포트 465)을 설정하고, 제공된 이메일과 비밀번호로 로그인합니다. 비밀번호는 가려져 있지만, 실제 코드에서 비밀번호를 코드 내에 저장하는 것은 보안상 위험하므로 환경 변수로 설정하는 것이 안전합니다.

2. **이메일 생성 및 구성**:
   ```python
   msg = MIMEMultipart()
   msg["Subject"] = f"eGood file"
   msg["From"] = "eplus<g@gmail.com>"
   msg["To"] = you
   ```
   `MIMEMultipart` 객체를 사용하여 이메일 본문과 첨부파일을 포함할 수 있습니다. 제목(`Subject`), 발신자(`From`), 수신자(`To`)의 메타데이터를 설정합니다.

3. **본문 텍스트 추가**:
   ```python
   content = "안녕하세요. \n 데이터 전달드립니다.\n\n"
   content_part = MIMEText(content, "plain")
   msg.attach(content_part)
   ```
   간단한 텍스트 메시지를 본문으로 추가합니다. `MIMEText` 객체를 사용하여 텍스트 형식을 지정한 후 `msg`에 본문을 첨부합니다.

4. **이미지 첨부**:
   ```python
   image_name = "egood.jpg"
   with open(image_name, 'rb') as file:
       img = MIMEImage(file.read())
       img.add_header('Content-Disposition', 'attachment', filename=image_name)
       msg.attach(img)
   ```
   이미지 파일(`egood.jpg`)을 읽어 `MIMEImage` 객체로 변환한 뒤 이메일에 첨부합니다. `Content-Disposition` 헤더에 첨부 파일 이름을 설정하여 수신자가 파일을 다운로드할 때 이름을 확인할 수 있습니다.

5. **이메일 전송 및 연결 종료**:
   ```python
   smtp.sendmail(me, you, msg.as_string())
   smtp.quit()
   ```
   `smtp.sendmail()` 메서드를 사용하여 발신자(`me`)에서 수신자(`you`)로 이메일을 전송하고 SMTP 연결을 종료합니다.
728x90
반응형