Python 은 SMTP 프로 토 콜 을 바탕 으로 메 일 발송 기능 에 대한 상세 한 설명 을 실현 합 니 다.
11807 단어 PythonSMTP우편물 을 발송 하 다
SMTP(Simple Mail Transfer Protocol),즉 간단 한 메 일 전송 프로 토 콜 입 니 다.원본 주소 에서 목적 주소 로 메 일 을 전송 하 는 규칙 입 니 다.메 일의 중간 방식 을 제어 합 니 다.Python 은 SMTP 에 대한 지원 을 내장 하여 일반 텍스트 메 일,HTML 메 일,첨부 파일 이 있 는 메 일 을 보 낼 수 있 습 니 다.
파 이 썬 의 SMTP 지원 은
smtplib
과email
두 모듈 로email
메 일 을 구성 하고smtplib
메 일 을 보 내 는 것 을 책임 진다.Python 에서 SMTP 를 만 드 는 문법 은 다음 과 같 습 니 다.
import smtplib
smtpObj = mstplib.SMTP(host,port)
SSL 프로 토 콜 이 있 는 SMTP 만 들 기:
import smtplib
smtpObj = mstplib.SMTP_SSL(host,port)
SMTP 대상 으로 메 일 보 내기:
# from_addr:
# to_addrs: ,list
# msg:
smtpObj.sendmail(from_addr, to_addrs, msg, mail_options=[],
rcpt_options=[])
다음 예 는 모두 왕 이 메 일 을 메 일 서버 로 쓴 것 입 니 다.왕 이 163 무료 메 일 관련 서버 정 보 는 다음 과 같 습 니 다.왕 이 메 일 을 발송 자 메 일 로 사용 할 때 메 일 비밀 번 호 는 메 일의 로그 인 비밀번호 가 아니 라 클 라 이언 트 가 비밀 번 호 를 권한 을 부여 하 는 것 임 을 주의해 야 한다.
일반 텍스트 메 일 보 내기
우선,우 리 는 메시지 체 를 구성 해 야 한다.
from email.header import Header
from email.mime.text import MIMEText
# , MINE subtype, ‘plain', MINE ‘text/plain',
msg = MIMEText('hello email','palin','utf-8')
def _format_addr(s):
name,addr = parseaddr(s)
return formataddr((Header(name,'utf-8').encode(),addr.encode('utf-8') if isinstance(addr,unicode) else addr))
#
msg['From'] = _format_addr(' <%s>'%from_addr)
#
msg['To'] = _format_addr(' <%s>'%to_addr)
#
msg['Subject'] = Header(' ','utf-8').encode()
이때 간단 한 소식 체 를 만 들 었 다.제목 과 닉네임 을 지정 하지 않 고 인 코딩 을 포맷 하면 매 운 닭 메 일 로 여 겨 져 발송 에 실패 할 수 있 습 니 다!!다음은 일반 텍스트 메 일 예제 를 보 내 는 전체 코드 입 니 다.
import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.utils import formataddr,parseaddr
host = 'smtp.163.com'
port = 25
from_addr = '[email protected]'
from_addr_pwd = 'xxxxxx'
to_addr = '[email protected]'
def _format_addr(s):
name,addr = parseaddr(s)
return formataddr((Header(name,'utf-8').encode(),addr.encode('utf-8') if isinstance(addr,unicode) else addr))
msg = MIMEText('hello email','palin','utf-8')
msg['From'] = _format_addr(' <%s>'%from_addr)
msg['To'] = _format_addr(' <%s>'%to_addr)
msg['Subject'] = Header(' ','utf-8').encode()
smtpObj = smtplib.SMTP(host,25)
smtpObj.set_debuglevel(1)
smtpObj.login(sender,password)
smtpObj.sendmail(sender, [receivers], message.as_string())
smtoObj.quit()
주의해 야 할 것 은sendmail
방법 을 호출 할 때 수신 자 메 일 은 list 형식 으로 단체 발송 기능 에 사용 된다 는 것 이다.HTML 메 일 보 내기
만약 에 HTML 메 일 을 보 내 는 수요 가 있다 면 우 리 는 먼저
MIMEText
대상 에 게 html 문자열 을 전달 해 야 합 니 다.다음 과 같 습 니 다.
htmlStr = '''
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Hello SMTP</h1>
<p> <a href="https://www.baidu.com" rel="external nofollow" rel="external nofollow" > </a></p>
</body>
</html>'''
msg = MIMEText(htmlStr,'html','utf-8')
전체 코드 는 다음 과 같 습 니 다:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import formataddr,parseaddr
def _format_addr(s):
name,addr = parseaddr(s)
return formataddr((Header(name,'utf-8').encode(),addr.encode('utf-8') if isinstance(addr,unicode) else addr))
server = 'smtp.163.com'
from_addr = '[email protected]'
from_addr_pwd = 'xxxxxx'
to_addr = '[email protected]'
htmlStr = '''
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Hello SMTP</h1>
<p> <a href="https://www.baidu.com" rel="external nofollow" rel="external nofollow" > </a></p>
</body>
</html>'''
msg = MIMEText(htmlStr,'html','utf-8')
msg['From'] = _format_addr(" <%s>"%from_addr)
msg['To'] = _format_addr(" <%s>"%to_addr)
msg['Subject'] = Header(' ','utf-8').encode()
smtpObj = smtplib.SMTP(server,25)
smtpObj.set_debuglevel(1)
smtpObj.login(from_addr,from_addr_pwd)
smtpObj.sendmail(from_addr,[to_addr],msg.as_string())
smtpObj.quit()
첨부 메 일 보 내기만약 우리 가 첨부 파일 을 보 낼 필요 가 있다 면,우 리 는 어떻게 메시지 체 를 개조 해 야 합 니까?우 리 는 이때
MIMEMultipart
메 일 자 체 를 구성 하여MIMEText
대상 에 게 메 일의 본문 을 전달 하고MIMEBase
대상 으로 첨부 된 정 보 를 저장 하면 됩 니 다.코드 는 다음 과 같 습 니 다.
msg = MIMEMultipart()
msg.attach(MIMEText(' ...','plain','utf-8'))
path = os.path.join(os.getcwd(),'1.png')
with open(path,'rb') as f:
# MIME
mime = MIMEBase('image','png',filename='1.png')
#
mime.add_header('Content-Disposition','attachment',filename='1.png')
mime.add_header('Content-ID','<0>')
mime.add_header('X-Attachment-Id','0')
#
mime.set_payload(f.read())
# base64
encode_base64(mime)
msg.attach(mime)
전체 코드 는 다음 과 같 습 니 다:
import smtplib,os
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart,MIMEBase
from email.header import Header
from email.encoders import encode_base64
from email.utils import formataddr,parseaddr
msg = MIMEMultipart()
msg.attach(MIMEText(' ...','plain','utf-8'))
def _format_addr(s):
name,addr = parseaddr(s)
return formataddr((Header(name,'utf-8').encode(),addr.encode('utf-8') if isinstance(addr,unicode) else addr))
server = 'smtp.163.com'
from_addr = '[email protected]'
from_addr_pwd = 'xxxxxx'
to_addr = '[email protected]'
path = os.path.join(os.getcwd(),'1.png')
with open(path,'rb') as f:
mime = MIMEBase('image','png',filename='1.png')
mime.add_header('Content-Disposition','attachment',filename='1.png')
mime.add_header('Content-ID','<0>')
mime.add_header('X-Attachment-Id','0')
mime.set_payload(f.read())
encode_base64(mime)
msg.attach(mime)
msg['From'] = _format_addr(" <%s>"%from_addr)
msg['To'] = _format_addr(" <%s>"%to_addr)
msg['Subject'] = Header(' ','utf-8').encode()
smtpObj = smtplib.SMTP(server,25)
smtpObj.set_debuglevel(1)
smtpObj.login(from_addr,from_addr_pwd)
smtpObj.sendmail(from_addr,[to_addr],msg.as_string())
smtpObj.quit()
사진 메 일 보 내기만약 우리 가 텍스트 에 그림 을 메 일 본문 으로 삽입 해 야 한다 면,우 리 는 어떻게 실현 해 야 합 니까?HTML 을 사용 하고 싶 은 사람 이 있 을 것 입 니 다.그 안에 img 라벨 을 박 으 면 됩 니 다.하지만 문제 가 있 습 니 다.img 라벨 은 그림 경 로 를 참조 하기 때문에 그림 파일 도 보 낼 수 는 없 을 것 입 니 다.그렇게 오랫동안 방법 이 없 었 습 니까?물론 있 습 니 다.우 리 는 HTML 과 첨부 메 일 발송 방식 을 결합 하여 사진 메 일 을 보 낼 수 있 습 니 다.먼저 우 리 는 사진 을 첨부 파일 로 추가 한 다음 에 HTML 에서 img 태그 참조
src='cid:0'
로 사진 을 인용 할 수 있 습 니 다.다음 과 같 습 니 다.
msg = MIMEMultipart()
path = os.path.join(os.getcwd(),'1.png')
with open(path,'rb') as f:
mime = MIMEBase('image','png',filename='1.png')
mime.add_header('Content-Disposition','attachment',filename='1.png')
mime.add_header('Content-ID','<0>')
mime.add_header('X-Attachment-Id','0')
mime.set_payload(f.read())
encode_base64(mime)
msg.attach(mime)
htmlStr = '''
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1> </h1>
<p> <img src="cid:0"/></p>
</body>
</html>'''
msg.attach(MIMEText(htmlStr,'html','utf-8'))
전체 코드 는 다음 과 같 습 니 다:
import smtplib,os
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart,MIMEBase
from email.header import Header
from email.encoders import encode_base64
from email.utils import parseaddr,formataddr
server = 'smtp.163.com'
from_addr = '[email protected]'
from_addr_pwd = 'xxxxxx'
to_addr = '[email protected]'
def _format_addr(s):
name,addr = parseaddr(s)
return formataddr((Header(name,'utf-8').encode(),addr.encode('utf-8') if isinstance(addr,unicode) else addr))
msg = MIMEMultipart()
path = os.path.join(os.getcwd(),'1.png')
with open(path,'rb') as f:
# MIME
mime = MIMEBase('image','png',filename='1.png')
#
mime.add_header('Content-Disposition','attachment',filename='1.png')
mime.add_header('Content-ID','<0>')
mime.add_header('X-Attachment-Id','0')
#
mime.set_payload(f.read())
# base64
encode_base64(mime)
msg.attach(mime)
htmlStr = '''
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1> </h1>
<p> <img src="cid:0"/></p>
</body>
</html>'''
msg.attach(MIMEText(htmlStr,'html','utf-8'))
msg['From'] = _format_addr(' <%s>'%from_addr)
msg['To'] = _format_addr(' <%s>'%to_addr)
msg['Subject'] = Header(' ','utf-8').encode()
smtpObj = smtplib.SMTP(server,25)
smtpObj.set_debuglevel(1)
smtpObj.login(from_addr,from_addr_pwd)
smtpObj.sendmail(from_addr,[to_addr],msg.as_string())
smtpObj.quit()
여러 개의 그림 이 있 으 면 순서대로 번 호 를 매 긴 다음 에 다른 것cid:x
을 인용 하면 된다.더 많은 파 이 썬 관련 내용 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.