首页 > 编程知识 正文

Python邮件入门

时间:2023-11-20 06:27:36 阅读:301154 作者:PXON

本文将从多个方面详细介绍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('附件保存成功')

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。