Python-SMTP를 사용하여 이메일 보내기
SMTP (Simple Mail Transfer Protocol)는 전자 메일 보내기 및 메일 서버 간 전자 메일 라우팅을 처리하는 프로토콜입니다.
Python은 smtplib 모듈은 SMTP 또는 ESMTP 리스너 데몬을 사용하여 인터넷 시스템에 메일을 보내는 데 사용할 수있는 SMTP 클라이언트 세션 개체를 정의합니다.
다음은 나중에 이메일을 보내는 데 사용할 수있는 SMTP 개체를 만드는 간단한 구문입니다.
import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
다음은 매개 변수의 세부 사항입니다.
host− SMTP 서버를 실행하는 호스트입니다. 호스트의 IP 주소 또는 tutorialspoint.com과 같은 도메인 이름을 지정할 수 있습니다. 이것은 선택적 인수입니다.
port− 호스트 인수를 제공하는 경우 SMTP 서버가 수신하는 포트를 지정해야합니다. 일반적으로이 포트는 25입니다.
local_hostname− SMTP 서버가 로컬 컴퓨터에서 실행중인 경우이 옵션에서 localhost 만 지정할 수 있습니다 .
SMTP 개체에는 다음과 같은 인스턴스 메서드가 있습니다. sendmail, 일반적으로 메시지를 우편으로 보내는 작업을 수행하는 데 사용됩니다. 세 가지 매개 변수가 필요합니다.
보낸 사람 - 보낸 사람의 주소를 가진 문자열입니다.
수신기 - 문자열의 목록, 각 수신자에 대한 하나.
메시지 - 다양한 RFC에 지정된 형식의 문자열로 메시지입니다.
예
다음은 Python 스크립트를 사용하여 하나의 이메일을 보내는 간단한 방법입니다. 한 번 시도해보세요-
#!/usr/bin/python
import smtplib
sender = '[email protected]'
receivers = ['[email protected]']
message = """From: From Person <[email protected]>
To: To Person <[email protected]>
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"
여기에서는 헤더를 올바르게 형식화하도록주의하면서 세 개의 따옴표를 사용하여 메시지에 기본 전자 메일을 넣었습니다. 이메일에는From, To, 및 Subject 헤더, 빈 줄로 전자 메일 본문과 구분됩니다.
메일을 보내려면 smtpObj 를 사용하여 로컬 컴퓨터의 SMTP 서버에 연결 한 다음 메시지, 보낸 사람 주소 및 대상 주소와 함께 sendmail 방법을 매개 변수로 사용합니다 (보낸 사람 및받는 사람 주소가 전자 메일 내에 있더라도 -메일 자체, 메일 라우팅에 항상 사용되는 것은 아닙니다.)
로컬 시스템에서 SMTP 서버를 실행하지 않는 경우 smtplib 클라이언트를 사용하여 원격 SMTP 서버와 통신 할 수 있습니다 . 웹 메일 서비스 (예 : Hotmail 또는 Yahoo! Mail)를 사용하지 않는 한, 이메일 제공 업체는 다음과 같이 제공 할 수있는 발신 메일 서버 세부 정보를 제공해야합니다.
smtplib.SMTP('mail.your-domain.com', 25)
Python을 사용하여 HTML 이메일 보내기
Python을 사용하여 문자 메시지를 보내면 모든 콘텐츠가 단순 텍스트로 처리됩니다. 텍스트 메시지에 HTML 태그를 포함 시켜도 단순 텍스트로 표시되며 HTML 구문에 따라 HTML 태그 형식이 지정되지 않습니다. 그러나 Python은 HTML 메시지를 실제 HTML 메시지로 보내는 옵션을 제공합니다.
전자 메일 메시지를 보내는 동안 HTML 전자 메일을 보내기 위해 Mime 버전, 콘텐츠 유형 및 문자 집합을 지정할 수 있습니다.
예
다음은 HTML 컨텐츠를 이메일로 보내는 예입니다. 한 번 시도해보세요-
#!/usr/bin/python
import smtplib
message = """From: From Person <[email protected]>
To: To Person <[email protected]>
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
<b>This is HTML message.</b>
<h1>This is headline.</h1>
"""
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"
# Read a file and encode it into base64 format
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent) # base64
sender = '[email protected]'
reciever = '[email protected]'
marker = "AUNIQUEMARKER"
body ="""
This is a test email to send an attachement.
"""
# Define the main headers.
part1 = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)
# Define the message action
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit
%s
--%s
""" % (body,marker)
# Define the attachment section
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, reciever, message)
print "Successfully sent email"
except Exception:
print "Error: unable to send email"