本文将从多个方面详细介绍Python邮件入门知识。
一、邮件发送
1、使用SMTP协议发送邮件
import smtplib
from email.mime.text import MIMEText
# 邮件信息
smtp_server = 'smtp.example.com'
smtp_port = 587
sender = 'sender@example.com'
receiver = 'receiver@example.com'
subject = '邮件主题'
content = '邮件内容'
# 构造邮件对象
msg = MIMEText(content, 'plain', 'utf-8')
msg['From'] = sender
msg['To'] = receiver
msg['Subject'] = subject
# 发送邮件
try:
with smtplib.SMTP(smtp_server, smtp_port) as server:
server.starttls()
server.login(sender, 'password')
server.sendmail(sender, receiver, msg.as_string())
print('邮件发送成功')
except Exception as e:
print('邮件发送失败:', str(e))
2、使用SMTP_SSL协议发送邮件
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 邮件信息
smtp_server = 'smtp.example.com'
smtp_port = 465
sender = 'sender@example.com'
receiver = 'receiver@example.com'
subject = '邮件主题'
content = '邮件内容'
# 构造邮件对象
msg = MIMEText(content, 'plain', 'utf-8')
msg['From'] = sender
msg['To'] = receiver
msg['Subject'] = Header(subject, 'utf-8')
# 发送邮件
try:
with smtplib.SMTP_SSL(smtp_server, smtp_port) as server:
server.login(sender, 'password')
server.sendmail(sender, receiver, msg.as_string())
print('邮件发送成功')
except Exception as e:
print('邮件发送失败:', str(e))
二、邮件接收
1、使用POP3协议接收邮件
import poplib
from email.parser import Parser
# 邮件信息
pop3_server = 'pop.example.com'
username = 'user@example.com'
password = 'password'
# 连接到POP3服务器
with poplib.POP3(pop3_server) as server:
server.user(username)
server.pass_(password)
# 获取邮件数量和占用空间大小
email_count, email_size = server.stat()
print('邮件数量:', email_count)
print('占用空间大小:', email_size)
# 获取最新一封邮件
resp, lines, octets = server.retr(email_count)
msg_content = b'rn'.join(lines).decode('utf-8')
msg = Parser().parsestr(msg_content)
# 解析邮件内容
print('发件人:', msg['From'])
print('收件人:', msg['To'])
print('主题:', msg['Subject'])
# 获取邮件正文
for part in msg.walk():
if part.get_content_type() == 'text/plain':
print('正文:', part.get_payload(decode=True).decode('utf-8'))
2、使用IMAP协议接收邮件
import imaplib
import email
# 邮件信息
imap_server = 'imap.example.com'
username = 'user@example.com'
password = 'password'
# 连接到IMAP服务器
with imaplib.IMAP4_SSL(imap_server) as server:
server.login(username, password)
# 列出所有文件夹
resp, mailboxes = server.list()
print('文件夹列表:')
for mailbox in mailboxes:
print(mailbox.decode())
# 选择文件夹
server.select('INBOX')
# 搜索邮件
resp, data = server.uid('search', None, 'ALL')
email_ids = data[0].split()
print('邮件数量:', len(email_ids))
# 获取最新一封邮件
latest_email_id = email_ids[-1]
resp, data = server.uid('fetch', latest_email_id, '(RFC822)')
raw_email = data[0][1]
email_message = email.message_from_bytes(raw_email)
# 解析邮件内容
print('发件人:', email_message['From'])
print('收件人:', email_message['To'])
print('主题:', email_message['Subject'])
# 获取邮件正文
for part in email_message.walk():
if part.get_content_type() == 'text/plain':
print('正文:', part.get_payload(decode=True).decode('utf-8'))
三、附件处理
1、发送带附件的邮件
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
# 邮件信息
smtp_server = 'smtp.example.com'
smtp_port = 587
sender = 'sender@example.com'
receiver = 'receiver@example.com'
subject = '邮件主题'
content = '邮件正文'
attachment_path = 'path/to/attachment'
# 构造邮件对象
msg = MIMEMultipart()
msg['From'] = sender
msg['To'] = receiver
msg['Subject'] = subject
# 添加正文
msg.attach(MIMEText(content, 'plain', 'utf-8'))
# 添加附件
with open(attachment_path, 'rb') as file:
attachment = MIMEBase('application', 'octet-stream')
attachment.set_payload(file.read())
encoders.encode_base64(attachment)
attachment.add_header('Content-Disposition', 'attachment', filename='attachment.txt')
msg.attach(attachment)
# 发送邮件
try:
with smtplib.SMTP(smtp_server, smtp_port) as server:
server.starttls()
server.login(sender, 'password')
server.sendmail(sender, receiver, msg.as_string())
print('邮件发送成功')
except Exception as e:
print('邮件发送失败:', str(e))
2、接收带附件的邮件
import poplib
from email.parser import Parser
# 邮件信息
pop3_server = 'pop.example.com'
username = 'user@example.com'
password = 'password'
# 连接到POP3服务器
with poplib.POP3(pop3_server) as server:
server.user(username)
server.pass_(password)
# 获取邮件数量和占用空间大小
email_count, email_size = server.stat()
print('邮件数量:', email_count)
print('占用空间大小:', email_size)
# 获取最新一封邮件
resp, lines, octets = server.retr(email_count)
msg_content = b'rn'.join(lines).decode('utf-8')
msg = Parser().parsestr(msg_content)
# 解析邮件内容
print('发件人:', msg['From'])
print('收件人:', msg['To'])
print('主题:', msg['Subject'])
# 获取附件
for part in msg.walk():
if part.get_content_type() == 'application/octet-stream':
attachment_data = part.get_payload(decode=True)
with open('attachment.txt', 'wb') as file:
file.write(attachment_data)
print('附件保存成功')