찾다
백엔드 개발파이썬 튜토리얼Python3이 SMTP 프로토콜을 사용하여 이메일 이메일을 보내는 방법의 예

SMTP(Simple Mail Transfer Protocol)는 편지의 전송 방법을 제어하는 ​​간단한 메일 전송 프로토콜입니다. 다음 기사에서는 Python3가 SMTP 프로토콜을 사용하여 도움이 필요한 친구가 이를 참조할 수 있도록 하는 방법을 주로 소개합니다.

머리말

이 기사에서는 주로 SMTP 프로토콜을 사용하여 이메일을 보내는 Python3에 대한 관련 내용을 소개합니다. Python 프로그램을 사용하여 지정된 사서함으로 이메일을 보내는 방법을 소개해야 합니다. 이메일 관련 정보.

이메일은 웹보다 오랜 역사를 가지고 있습니다. 지금까지 이메일은 인터넷에서도 매우 널리 사용되는 서비스입니다.

거의 모든 프로그래밍 언어는 이메일 보내기 및 받기를 지원하지만, 코드 작성을 시작하기 전에 이메일이 인터넷에서 어떻게 작동하는지 이해해야 합니다.

우리의 이메일 주소가 me@163.com이고 상대방의 이메일 주소가 friend@sina.com이라고 가정해 보겠습니다. 이제 Outlook이나 Foxmail과 같은 소프트웨어를 사용하여 이메일을 작성하고 상대방의 이메일 주소를 입력한 후 클릭합니다. "보내기"를 누르면 이메일이 전송됩니다. 이러한 이메일 소프트웨어를 MUA(Mail User Agent - 메일 사용자 에이전트)라고 합니다.

MUA에서 보낸 이메일은 상대방의 컴퓨터에 직접 도달하지 않고 MTA: 메일 전송 에이전트 - NetEase, Sina 등과 같은 이메일 서비스 제공업체인 메일 전송 에이전트로 전송됩니다. 우리의 이메일은 163.com이므로 이메일은 먼저 NetEase가 제공하는 MTA로 전달된 다음 NetEase의 MTA를 통해 다른 서비스 제공업체인 Sina의 MTA로 전송됩니다. 이 프로세스는 다른 MTA를 통과할 수도 있지만 우리는 특정 경로에 관심이 없고 속도에만 관심이 있습니다.

이메일이 Sina의 MTA에 도달한 후 상대방이 @sina.com이라는 이메일 주소를 사용하기 때문에 Sina의 MTA는 이메일의 최종 목적지인 MDA: Mail Delivery Agent로 이메일을 전달하게 됩니다. 이메일이 MDA에 도달한 후 Sina의 서버에 조용히 보관되어 파일이나 특수 데이터베이스에 저장됩니다. 우리는 이메일이 오랫동안 보관되는 곳을 이메일 상자라고 부릅니다. 메일을 받으려면 상대방이 MUA를 사용하여 MDA에서 자신의 컴퓨터로 메일을 가져와야 합니다.

이메일의 여정은 다음과 같습니다.

발신자-> MTA -> MTA -> MDA

1. MTA에 이메일을 보내려면 MUA를 작성하세요.

2. MDA로부터 이메일을 받으려면 MUA를 작성하세요.

이메일을 보낼 때 MUA와 MTA에서 사용하는 프로토콜은 SMTP: Simple Mail Transfer Protocol입니다. 후속 MTA도 다른 MTA에 SMTP 프로토콜을 사용합니다.

이메일을 받을 때 MUA와 MDA는 두 가지 프로토콜을 사용합니다. POP: Post Office Protocol, 현재 버전은 3이며 일반적으로 POP3로 알려져 있습니다: Internet Message Access Protocol, 현재 버전은 4입니다. 이메일을 검색할 뿐 아니라 받은 편지함에서 휴지통으로 이동하는 등 MDA에 저장된 이메일을 직접 조작할 수도 있습니다.

이메일을 보낼 때 이메일 클라이언트 소프트웨어는 먼저 SMTP 서버, 즉 어떤 MTA로 보내려는지 구성하라는 메시지를 표시합니다. 163의 이메일 주소를 사용한다고 가정하면 Sina의 MTA는 Sina 사용자에게만 제공되므로 직접 보낼 수 없습니다. 따라서 163에서 제공하는 SMTP 서버 주소(smtp.163.com)를 입력해야 합니다. 163 사용자의 경우 SMTP 서버에서는 MUA가 일반적으로 SMTP 프로토콜을 통해 MTA에 이메일을 보낼 수 있도록 이메일 주소와 이메일 비밀번호를 입력해야 합니다.

마찬가지로 MDA에서 이메일을 받을 때 MDA 서버에서는 누구도 귀하인 것처럼 위장하여 이메일을 받지 못하도록 이메일 비밀번호 확인을 요구합니다. 따라서 Outlook과 같은 이메일 클라이언트에서는 POP3를 입력하도록 요청합니다. 또는 IMAP 서버 주소, 이메일 주소 및 비밀번호. MUA가 POP 또는 IMAP 프로토콜을 통해 MDA에서 이메일을 성공적으로 검색할 수 있도록 합니다.

마지막 특별 참고 사항:

현재 대부분의 이메일 서비스 제공업체는 SMTP 전송 및 POP 수신 기능을 수동으로 켜야 합니다. 그렇지 않으면 웹에서만 로그인할 수 있습니다. 예: QQ 메일함

다음으로 주요 주제인 Python을 통해 이메일을 보내는 방법을 시작합니다.

-------------------------------------- --------------------------------

간단한 문자 이메일 보내기

SMTP는 전송을 위한 프로토콜입니다. emails , Python에는 SMTP에 대한 지원이 내장되어 있으며 일반 텍스트 이메일, HTML 이메일 및 첨부 파일이 있는 이메일을 보낼 수 있습니다.

Python은 smtplib과 email의 두 가지 모듈로 SMTP를 지원합니다. 이메일은 이메일 구성을 담당하고 smtplib는 이메일 전송을 담당합니다.

먼저 가장 간단한 일반 텍스트 이메일을 만들어 보겠습니다.

from email.mime.text import MIMEText
msg = MIMEText('hello, this is axin...', 'plain', 'utf-8')

참고:MIMEText 객체를 생성할 때 첫 번째 매개변수는 이메일 본문이고 두 번째 매개변수는 MIME의 하위 유형입니다. 'plain'을 전달하면 일반 텍스트를 의미하고 최종 MIME은 'text/plain'입니다. '. 마지막으로 다중 언어 호환성을 보장하려면 UTF-8 인코딩을 사용해야 합니다.

본문 내용뿐만 아니라 보내려는 이메일에 헤더 정보도 추가해야 합니다. 헤더 정보에는 보낸 사람, 받는 사람, 이메일 제목 등의 정보가 포함됩니다.


msg = MIMEText('hello, this is axin...', 'plain', 'utf-8') #邮件正文
msg[&#39;From&#39;] = _format_addr(&#39;阿鑫 <%s>&#39; % from_addr) #邮件头部,发送者信息
msg[&#39;To&#39;] = _format_addr(&#39;aa <%s>&#39; % to_addr) #接收者信息
msg[&#39;Subject&#39;] = Header(&#39;test&#39;, &#39;utf-8&#39;).encode() #邮件主题

보내고 싶은 정보를 구성한 후 Python에서 해당 함수를 호출하고 SMTP를 통해 보내기만 하면 됩니다.


server = smtplib.SMTP(smtp_server, 25) #SMTP协议默认端口是25
server.set_debuglevel(1) #打印出和SMTP服务器交互的所有信息
server.login(from_addr, password) #登录SMTP服务器
server.sendmail(from_addr, [to_addr], msg.as_string()) #发送邮件
server.quit()

set_debuglevel(1)就可以打印出和SMTP服务器交互的所有信息。SMTP协议就是简单的文本命令和响应。login()方法用来登录SMTP服务器,sendmail()方法就是发邮件,由于可以一次发给多个人,所以传入一个list,邮件正文是一个str,as_string()를 사용하여 MIMEText 개체를 str로 변환합니다.

전체 코드 예제는 다음과 같습니다.


from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr

import smtplib

def _format_addr(s): #格式化一个邮件地址
name, addr = parseaddr(s)
return formataddr((Header(name, &#39;utf-8&#39;).encode(), addr))

from_addr = &#39;fengxinlinux@sina.com&#39; #发送者邮箱地址
password = &#39;******&#39; #发送者邮箱密码,不告诉你密码=。=
to_addr = &#39;903087053@qq.com&#39; #接收者邮箱地址
smtp_server = &#39;smtp.sina.com&#39; #发送者所在的邮箱供应商的MTA地址
#from_addr = input(&#39;From: &#39;)
#password = input(&#39;Password: &#39;)
#to_addr = input(&#39;To: &#39;)
#smtp_server = input(&#39;SMTP server: &#39;)

msg = MIMEText(&#39;hello, this is axin...&#39;, &#39;plain&#39;, &#39;utf-8&#39;) #邮件正文
msg[&#39;From&#39;] = _format_addr(&#39;阿鑫 <%s>&#39; % from_addr) #邮件头部,发送者信息
msg[&#39;To&#39;] = _format_addr(&#39;axin <%s>&#39; % to_addr) #接收者信息
msg[&#39;Subject&#39;] = Header(&#39;test&#39;, &#39;utf-8&#39;).encode() #邮件主题


server = smtplib.SMTP(smtp_server, 25) # SMTP协议默认端口是25
server.set_debuglevel(1) #打印出和SMTP服务器交互的所有信息
server.login(from_addr, password) #登录SMTP服务器
server.sendmail(from_addr, [to_addr], msg.as_string()) #发送邮件
server.quit()
1

프로그램을 실행하면 테스트한 사서함에 새 이메일이 수신된 것을 확인할 수 있습니다.

다른 정보는 동일하지만 수신자의 정보는 우리 프로그램에 입력된 액신이 아니라는 것을 알게 됩니다.

많은 이메일 서비스 제공업체에서는 이메일을 표시할 때 자동으로 수신자의 이름을 사용자의 등록된 이름으로 대체하지만 다른 수신자의 이름 표시에는 영향을 미치지 않습니다.

테스트를 하다가 가끔 제가 보낸 이메일이 이메일 서비스 제공업체에서 스팸으로 판단되어 바로 휴지통으로 들어가는 경우가 있었습니다. . . 무엇이 스팸으로 간주될지는 모르겠습니다. .

첨부 파일이 포함된 이메일 보내기

위에서 문자 이메일을 보내는 방법을 소개했습니다. 위의 지식을 바탕으로 첨부 파일이 포함된 이메일을 보내는 것은 실제로 매우 간단합니다.

첨부 파일이 있는 이메일은 여러 부분(텍스트와 각 첨부 파일 자체)을 포함하는 이메일로 간주할 수 있습니다. 따라서 MIMEMultipart 개체를 구성하여 이메일 자체를 표시한 다음 이메일 본문으로 MIMEText를 추가할 수 있습니다. 계속해서 첨부 파일의 MIMEBase 개체로 충분합니다.


# 邮件对象:
msg= MIMEMultipart()
msg[&#39;From&#39;] = _format_addr(&#39;阿鑫 <%s>&#39; % from_addr) #邮件头部,发送者信息
msg[&#39;To&#39;] = _format_addr(&#39;axin <%s>&#39; % to_addr) #接收者信息
msg[&#39;Subject&#39;] = Header(&#39;test&#39;, &#39;utf-8&#39;).encode() #邮件主题

# 邮件正文是MIMEText:
msg.attach(MIMEText(&#39;hello, this is axin...&#39;, &#39;plain&#39;, &#39;utf-8&#39;))

# 添加附件就是加上一个MIMEBase,从本地读取一个图片:
with open(&#39;/home/fengxin/图片/11.jpg&#39;,&#39;rb&#39;) as fhandle:
mime = MIMEBase(&#39;image&#39;,&#39;jpeg&#39;,filename=&#39;11.jpg&#39;)
mime.add_header(&#39;Content-Disposition&#39;, &#39;attachment&#39;, filename=&#39;11.jpg&#39;)
mime.add_header(&#39;Content-ID&#39;, &#39;<0>&#39;)
mime.add_header(&#39;X-Attachment-Id&#39;, &#39;0&#39;)
# 把附件的内容读进来:
mime.set_payload(fhandle.read())
# 用Base64编码:
encoders.encode_base64(mime)
# 添加到MIMEMultipart:
msg.attach(mime)

그런 다음 일반적인 전송 프로세스에 따라 msg를 보내면(유형이 MIMEMultipart로 변경됨에 유의) 이메일을 받을 수 있습니다. 첨부 파일과 함께.

전체 코드 예시는 다음과 같습니다.


from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase


import smtplib

def _format_addr(s): #格式化一个邮件地址
name, addr = parseaddr(s)
return formataddr((Header(name, &#39;utf-8&#39;).encode(), addr))

from_addr = &#39;你的邮箱地址&#39; #发送者邮箱地址
password = &#39;你的邮箱密码&#39; #发送者邮箱密码
to_addr = &#39;903087053@qq.com&#39; #接收者邮箱地址
smtp_server = &#39;smtp.sina.com&#39; #发送者所在的邮箱供应商的MTA地址
#from_addr = input(&#39;From: &#39;)
#password = input(&#39;Password: &#39;)
#to_addr = input(&#39;To: &#39;)
#smtp_server = input(&#39;SMTP server: &#39;)


msg= MIMEMultipart()
msg[&#39;From&#39;] = _format_addr(&#39;阿鑫 <%s>&#39; % from_addr) #邮件头部,发送者信息
msg[&#39;To&#39;] = _format_addr(&#39;axin <%s>&#39; % to_addr) #接收者信息
msg[&#39;Subject&#39;] = Header(&#39;test&#39;, &#39;utf-8&#39;).encode() #邮件主题

msg.attach(MIMEText(&#39;hello, this is axin...&#39;, &#39;plain&#39;, &#39;utf-8&#39;))

with open(&#39;/home/fengxin/图片/11.jpg&#39;,&#39;rb&#39;) as fhandle:
mime = MIMEBase(&#39;image&#39;,&#39;jpeg&#39;,filename=&#39;11.jpg&#39;)
mime.add_header(&#39;Content-Disposition&#39;, &#39;attachment&#39;, filename=&#39;11.jpg&#39;)
mime.add_header(&#39;Content-ID&#39;, &#39;<0>&#39;)
mime.add_header(&#39;X-Attachment-Id&#39;, &#39;0&#39;)
# 把附件的内容读进来:
mime.set_payload(fhandle.read())
# 用Base64编码:
encoders.encode_base64(mime)
# 添加到MIMEMultipart:
msg.attach(mime)

server = smtplib.SMTP(smtp_server, 25) # SMTP协议默认端口是25
server.set_debuglevel(1) #打印出和SMTP服务器交互的所有信息
server.login(from_addr, password) #登录SMTP服务器
server.sendmail(from_addr, [to_addr], msg.as_string()) #发送邮件
server.quit()
1

실행 후. 테스트 사서함은 그림과 같이 이메일을 올바르게 받았습니다.

Summary

위 내용은 Python3이 SMTP 프로토콜을 사용하여 이메일 이메일을 보내는 방법의 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
파이썬과 시간 : 공부 시간을 최대한 활용파이썬과 시간 : 공부 시간을 최대한 활용Apr 14, 2025 am 12:02 AM

제한된 시간에 Python 학습 효율을 극대화하려면 Python의 DateTime, Time 및 Schedule 모듈을 사용할 수 있습니다. 1. DateTime 모듈은 학습 시간을 기록하고 계획하는 데 사용됩니다. 2. 시간 모듈은 학습과 휴식 시간을 설정하는 데 도움이됩니다. 3. 일정 모듈은 주간 학습 작업을 자동으로 배열합니다.

파이썬 : 게임, Guis 등파이썬 : 게임, Guis 등Apr 13, 2025 am 12:14 AM

Python은 게임 및 GUI 개발에서 탁월합니다. 1) 게임 개발은 Pygame을 사용하여 드로잉, 오디오 및 기타 기능을 제공하며 2D 게임을 만드는 데 적합합니다. 2) GUI 개발은 Tkinter 또는 PYQT를 선택할 수 있습니다. Tkinter는 간단하고 사용하기 쉽고 PYQT는 풍부한 기능을 가지고 있으며 전문 개발에 적합합니다.

Python vs. C : 응용 및 사용 사례가 비교되었습니다Python vs. C : 응용 및 사용 사례가 비교되었습니다Apr 12, 2025 am 12:01 AM

Python은 데이터 과학, 웹 개발 및 자동화 작업에 적합한 반면 C는 시스템 프로그래밍, 게임 개발 및 임베디드 시스템에 적합합니다. Python은 단순성과 강력한 생태계로 유명하며 C는 고성능 및 기본 제어 기능으로 유명합니다.

2 시간의 파이썬 계획 : 현실적인 접근2 시간의 파이썬 계획 : 현실적인 접근Apr 11, 2025 am 12:04 AM

2 시간 이내에 Python의 기본 프로그래밍 개념과 기술을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우기, 2. 마스터 제어 흐름 (조건부 명세서 및 루프), 3. 기능의 정의 및 사용을 이해하십시오. 4. 간단한 예제 및 코드 스 니펫을 통해 Python 프로그래밍을 신속하게 시작하십시오.

파이썬 : 기본 응용 프로그램 탐색파이썬 : 기본 응용 프로그램 탐색Apr 10, 2025 am 09:41 AM

Python은 웹 개발, 데이터 과학, 기계 학습, 자동화 및 스크립팅 분야에서 널리 사용됩니다. 1) 웹 개발에서 Django 및 Flask 프레임 워크는 개발 프로세스를 단순화합니다. 2) 데이터 과학 및 기계 학습 분야에서 Numpy, Pandas, Scikit-Learn 및 Tensorflow 라이브러리는 강력한 지원을 제공합니다. 3) 자동화 및 스크립팅 측면에서 Python은 자동화 된 테스트 및 시스템 관리와 ​​같은 작업에 적합합니다.

2 시간 안에 얼마나 많은 파이썬을 배울 수 있습니까?2 시간 안에 얼마나 많은 파이썬을 배울 수 있습니까?Apr 09, 2025 pm 04:33 PM

2 시간 이내에 파이썬의 기본 사항을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우십시오. 이를 통해 간단한 파이썬 프로그램 작성을 시작하는 데 도움이됩니다.

10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법?10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법?Apr 02, 2025 am 07:18 AM

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까?중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까?Apr 02, 2025 am 07:15 AM

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.