PyMail
可以方便使用imap接收邮件并解析中文邮件,提取附件,并且发送邮件;It is convenient to use IMAP to receive emails, parse Chinese emails, extract attachments, and send emails.
Install / Use
/learn @paramiao/PyMailREADME
pyMail
This is a mail helper, which helps you send and receive emails with Python more easily, especially for users who need Unicode support (e.g., Chinese, Japanese, Korean).
这是一个可以帮助你更好的使用 Python 收发邮件的项目,尤其是对 Unicode 的处理,可以完美支持中文。只需几行代码就可以去除繁琐的邮件解析、中文解析的操作。
⚠️ Version Notice | 版本说明
- v2.0+: Python 3.6+ (Recommended | 推荐)
- v1.x: Python 2.7 (No longer maintained | 不再维护,请使用
python2分支)
Description | 项目说明
ReceiveMailDealer is a class that helps you receive emails via IMAP and parse them automatically, with excellent Unicode/Chinese support:
ReceiveMailDealer 通过 IMAP 方式收取邮件,自动解析邮件内容,完美支持中文等 Unicode 字符:
# 初始化接收邮件类
import pyMail
rml = pyMail.ReceiveMailDealer('mail_address', 'mail_pwd', 'imap.gmail.com')
rml.select('INBOX')
# 获取未读邮件列表
print(rml.getUnread()) # ('OK', ['1 2 3 4'])
# 遍历未读邮件
for num in rml.getUnread()[1][0].split(' '):
if num != '':
mailInfo = rml.getMailInfo(num)
print(mailInfo['subject'])
print(mailInfo['body'])
print(mailInfo['html'])
print(mailInfo['from'])
print(mailInfo['to'])
# 遍历附件列表
for attachment in mailInfo['attachments']:
with open(attachment['name'], 'wb') as fileob:
fileob.write(attachment['data'])
# v2.0 新增功能
# 获取所有邮件(不限于未读)
all_mails = rml.getAll()
# 按主题搜索
invoice_mails = rml.searchBySubject('发票')
# 按发件人搜索
boss_mails = rml.searchBySender('boss@company.com')
# 按日期范围搜索
recent_mails = rml.searchByDateRange('01-Jan-2025')
SendMailDealer is a class help you to send the mails, you can set the mail body very convenient, no matter text, html or attachments, just like below: SendMailDealer 可以帮助你通过SMTP发送邮件,可以随意定制邮件的内容,包括纯文本,html或者附件,以下是示例代码:
# 初始化发送邮件类
import pyMail
# Gmail with STARTTLS (port 587) - 推荐
sml = pyMail.SendMailDealer('mail_address', 'app_password', 'smtp.gmail.com', 587, usettls=True)
# 或使用 SSL (port 465)
# sml = pyMail.SendMailDealer('mail_address', 'app_password', 'smtp.gmail.com', 465, usettls=False)
# 设置邮件信息
sml.setMailInfo('recipient@example.com', '测试', '正文', 'plain', '/path/to/attachment.pdf')
# 发送邮件
sml.sendMail()
# 显式关闭连接(推荐)
sml.close()
Installation | 安装
Install pyMail is very easy. Just download pyMail.py and import it:
安装 pyMail 非常简单,下载 pyMail.py 文件并导入即可:
import pyMail
Or clone from GitHub | 或者从 GitHub 克隆:
git clone https://github.com/paramiao/pyMail.git
cd pyMail
# Copy pyMail.py to your project | 将 pyMail.py 复制到你的项目
What's New in v2.0 | v2.0 新特性
🎉 New Features | 新功能
- Python 3.6+ support - Full migration to Python 3 | 完整迁移到 Python 3
- Search functions (Issue #4, #10) | 搜索功能:
getAll()- Get all emails, not just unread | 获取所有邮件,不限于未读searchBySubject(keyword)- Search by subject | 按主题搜索searchBySender(email)- Search by sender | 按发件人搜索searchByDateRange(since, before)- Search by date range | 按日期范围搜索
- Custom exceptions - Better error handling | 自定义异常,更好的错误处理
- Logging support - Optional logging for debugging | 日志支持,便于调试
🐛 Bug Fixes | 问题修复
- Fixed attachment filename handling (Issue #7) - Properly sanitize filenames | 修复附件文件名处理,正确清洗路径和非法字符
- Fixed
reinitMailInfo()(Issue #9) - Added missingselfparameter | 添加缺失的self参数 - Fixed example.py (Issue #8) - Corrected
mailUtilstopyMail| 修正模块名错误 - Improved encoding handling - Better support for various character encodings | 改进编码处理,更好地支持各种字符集
⚠️ Breaking Changes | 不兼容变更
- Requires Python 3.6+ | 需要 Python 3.6+
SendMailDealer.__init__()now requiresportparameter | 现在需要port参数
See MIGRATION_GUIDE.md for detailed migration instructions | 详细迁移说明请查看迁移指南。
Common Issues | 常见问题
Gmail Login Failed | Gmail 登录失败
Gmail no longer supports "less secure apps". You need to:
- Enable 2-Step Verification
- Generate an "App Password"
- Use the app password instead of your real password
Gmail 不再支持"不够安全的应用",需要:
- 启用两步验证
- 生成"应用专用密码"
- 使用应用密码代替真实密码
Reference: https://support.google.com/accounts/answer/185833
Connection Issues | 连接问题
Common SMTP/IMAP ports:
- Gmail IMAP:
imap.gmail.com:993 - Gmail SMTP (STARTTLS):
smtp.gmail.com:587 - Gmail SMTP (SSL):
smtp.gmail.com:465 - 163:
imap.163.com:993,smtp.163.com:465 - QQ:
imap.qq.com:993,smtp.qq.com:587
If using VPN, ensure SMTP/IMAP ports (587, 993, 465) are not blocked.
如果使用 VPN,确保 SMTP/IMAP 端口未被拦截。
License
MIT License
Bugs and Feedback
- GitHub Issues: https://github.com/paramiao/pyMail/issues
- Email: paramiao#gmail.com
Related Skills
node-connect
339.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
339.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.8kCommit, push, and open a PR
