산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> python

파이썬으로 이메일 보내기: SMTP 활용 퀵 가이드

SMTP(Simple Mail Transfer Protocol)는 이메일 발송과 메일 서버 간의 이메일 라우팅을 처리하는 프로토콜입니다.

파이썬은 smtplib 모듈을 제공하며, 이는 SMTP 또는 ESMTP 리스너 데몬이 있는 모든 인터넷 머신에 메일을 보낼 수 있는 SMTP 클라이언트 세션 객체를 정의합니다.

나중에 이메일을 보내는 데 사용할 수 있는 SMTP 객체를 생성하는 간단한 구문은 다음과 같습니다.

import smtplib
smtpObj = smtplib.SMTP([host [, port [, local_hostname]]])

매개변수 세부 정보는 다음과 같습니다.

SMTP 객체에는 메일 발송 작업을 수행하는 인스턴스 메서드 sendmail이 있습니다. 이 메서드는 세 가지 매개변수를 받습니다.

예제

파이썬 스크립트를 사용하여 이메일 하나를 보내는 간단한 방법입니다. 한 번 시도해 보세요.

#!/usr/bin/python
import smtplib
sender = 'from@fromdomain.com'
receivers = ['to@todomain.com']
message = """From: From Person 
To: To Person 
Subject: SMTP e-mail test

This is a test e-mail message.
"""
try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message)
    print("Successfully sent email")
except SMTPException:
    print("Error: unable to send email")

여기서 트리플 따옴표를 사용하여 message에 기본 이메일을 배치했으며, 헤더를 올바르게 포맷하도록 주의했습니다. 이메일은 From, To, Subject 헤더가 필요하며, 빈 줄로 이메일 본문과 분리됩니다.

메일을 보내려면 smtpObj를 사용하여 로컬 머신의 SMTP 서버에 연결한 다음, 메시지, 발신자 주소, 대상 주소를 매개변수로 sendmail 메서드를 사용합니다(발신자와 수신자 주소가 이메일 내에 있지만, 이것들이 항상 메일 라우팅에 사용되는 것은 아닙니다).

로컬 머신에서 SMTP 서버를 실행하지 않는 경우, smtplib 클라이언트를 사용하여 원격 SMTP 서버와 통신할 수 있습니다. 웹메일 서비스(핫메일, 야후 메일 등)를 사용하지 않는 한, 이메일 제공업체에서 발신 메일 서버 세부 정보를 제공받았을 것입니다. 이를 다음과 같이 제공할 수 있습니다.

smtplib.SMTP('mail.your-domain.com', 25)

파이썬으로 HTML 이메일 보내기

파이썬으로 텍스트 메시지를 보내면 모든 콘텐츠가 단순 텍스트로 처리됩니다. 텍스트 메시지에 HTML 태그를 포함해도 단순 텍스트로 표시되며 HTML 태그는 HTML 구문에 따라 포맷되지 않습니다. 하지만 파이썬은 HTML 메시지를 실제 HTML 메시지로 보낼 수 있는 옵션을 제공합니다.

이메일 메시지를 보낼 때 MIME 버전, 콘텐츠 유형, 문자셋을 지정하여 HTML 이메일을 보낼 수 있습니다.

예제

다음은 HTML 콘텐츠를 이메일로 보내는 예제입니다. 한 번 시도해 보세요.

#!/usr/bin/python
import smtplib
message = """From: From Person 
To: To Person 
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test

This is an e-mail message to be sent in HTML format
This is HTML message.

This is headline.

""" try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message) print("Successfully sent email") except SMTPException: print("Error: unable to send email")

첨부 파일 이메일로 보내기

혼합 콘텐츠가 있는 이메일을 보내려면 Content-type 헤더를 multipart/mixed로 설정해야 합니다. 그런 다음 텍스트와 첨부 파일 섹션을 경계(boundaries) 내에서 지정할 수 있습니다.

경계는 이메일의 메시지 부분에 나타날 수 없는 고유 번호가 뒤따르는 두 개의 하이픈으로 시작합니다. 이메일의 마지막 섹션을 나타내는 최종 경계도 두 개의 하이픈으로 끝나야 합니다.

첨부 파일은 전송 전에 pack("m") 함수로 인코딩하여 base64 인코딩을 해야 합니다.

예제

다음 예제는 파일 /tmp/test.txt를 첨부 파일로 보냅니다. 한 번 시도해 보세요.

#!/usr/bin/python
import smtplib
import base64
filename = "/tmp/test.txt"
# 파일 읽고 base64 형식으로 인코딩
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent)  # base64
sender = 'webmaster@tutorialpoint.com'
receiver = 'amrood.admin@gmail.com'
marker = "AUNIQUEMARKER"
body = """This is a test email to send an attachment."""
# 메인 헤더 정의
part1 = """From: From Person 
To: To Person 
Subject: Sending Attachment
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)
# 메시지 액션 부분 정의
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit
%s
--%s
""" % (body, marker)
# 첨부 파일 섹션 정의
part3 = """Content-Type: multipart/mixed; name="%s"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename=%s
%s
--%s--
""" % (filename, filename, encodedcontent, marker)
message = part1 + part2 + part3
try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receiver, message)
    print("Successfully sent email")
except Exception:
    print("Error: unable to send email")

python

  1. 파이썬 데이터 타입 마스터하기: 실전 가이드
  2. 파이썬 연산자 마스터하기: 종합 가이드
  3. 파이썬 pass 문 마스터하기: 실전 가이드
  4. 파이썬 함수 인자 마스터하기: 위치, 키워드, 기본 매개변수
  5. Python 딕셔너리 마스터하기: 생성, 조작, 고급 기법
  6. Python 예외 처리 마스터하기: try, except, else, finally 완전 정복
  7. 라즈베리 파이와 TMP006 적외선 온도 센서: 파이썬 라이브러리 및 설정 가이드
  8. 라즈베리 파이와 파이썬으로 원격 온도 센서 만들기 – 단계별 가이드
  9. 파이썬으로 평균 계산하기: 실전 가이드
  10. 임시 변수 없이 파이썬 두 변수 값 교환하기