200 lines
6.2 KiB
Python
200 lines
6.2 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
每日全球新闻摘要邮件发送脚本
|
||
自动搜索新闻并发送到指定邮箱
|
||
"""
|
||
|
||
import smtplib
|
||
from email.mime.text import MIMEText
|
||
from email.mime.multipart import MIMEMultipart
|
||
from email.header import Header
|
||
import requests
|
||
import json
|
||
from datetime import datetime
|
||
|
||
# SMTP 配置
|
||
SMTP_SERVER = "smtp.163.com"
|
||
SMTP_PORT = 465
|
||
EMAIL = "work_fyx02@163.com"
|
||
AUTH_CODE = "QLrTpw7SDxrMuAzh"
|
||
|
||
# 收件人
|
||
TO_EMAIL = "Yaxing_feng@dgmaorui.com"
|
||
|
||
def search_news():
|
||
"""搜索全球新闻"""
|
||
print("正在搜索全球新闻...")
|
||
|
||
# 模拟新闻搜索(实际使用时需要调用真实的新闻API)
|
||
news_items = [
|
||
{
|
||
"title": "中俄战略沟通深化",
|
||
"description": "王毅同俄罗斯联邦安全会议秘书绍伊古在北京进行战略沟通,双方就当前世界局势、二战后国际秩序等深入交换意见。"
|
||
},
|
||
{
|
||
"title": "伊朗警告美国",
|
||
"description": "伊朗最高领袖哈梅内伊向美国发出严正警告,表示如果美国挑起战争,将是一场全地区性的战争。"
|
||
},
|
||
{
|
||
"title": "格陵兰岛谈判启动",
|
||
"description": "美国总统特朗普表示,围绕格陵兰岛的谈判已经启动,希望能达成对华盛顿和欧洲双方都有利的协议。"
|
||
},
|
||
{
|
||
"title": "韩国总统谴责极端团体",
|
||
"description": "韩国总统李在明强烈谴责国内极右翼团体侮辱日军'慰安妇'制度受害者的行为。"
|
||
},
|
||
{
|
||
"title": "贵金属市场剧烈波动",
|
||
"description": "现货黄金日内暴跌3.33%,跌破4700美元/盎司;现货白银暴跌9.06%,跌破77美元/盎司。"
|
||
},
|
||
{
|
||
"title": "加密货币市场下跌",
|
||
"description": "比特币价格持续下跌,跌破76000美元,日内跌幅扩大至3.58%。"
|
||
},
|
||
{
|
||
"title": "原油市场波动",
|
||
"description": "WTI原油和布伦特原油价格突破65美元/桶和69美元/桶后回落,日内分别下跌1.32%和0.73%。"
|
||
},
|
||
{
|
||
"title": "欧佩克+维持增产政策",
|
||
"description": "'欧佩克+'组织宣布维持暂停增产政策,3月原油产量保持不变,以稳定油价。"
|
||
},
|
||
{
|
||
"title": "2026年春运今日开启",
|
||
"description": "全社会跨区域人员流动量预计达95亿人次,创历史新高。2月15日0时至2月23日24时,全国高速公路对七座及以下小型客车免收通行费。"
|
||
},
|
||
{
|
||
"title": "春节档电影市场火热",
|
||
"description": "2026年电影票房已破20亿。已有6部国产影片定档春节档,涵盖武侠、动作、悬疑、奇幻、喜剧、动画等多种类型。"
|
||
}
|
||
]
|
||
|
||
print(f"找到 {len(news_items)} 条新闻")
|
||
return news_items
|
||
|
||
def format_news_email(news_items):
|
||
"""格式化新闻邮件"""
|
||
|
||
date_str = datetime.now().strftime("%Y年%m月%d日")
|
||
|
||
# 邮件正文
|
||
body = f"""📧 **每日全球新闻摘要**
|
||
|
||
**日期:** {date_str}
|
||
|
||
---
|
||
|
||
## 📅 **今日全球新闻摘要**
|
||
|
||
"""
|
||
|
||
# 添加新闻条目
|
||
for i, news in enumerate(news_items, 1):
|
||
body += f"### {i}. {news['title']}\n"
|
||
body += f"{news['description']}\n\n"
|
||
|
||
# 添加市场数据
|
||
body += """---
|
||
|
||
## 📊 **市场数据速览**
|
||
|
||
| 品种 | 价格 | 日内涨跌 |
|
||
|------|------|----------|
|
||
| 现货黄金 | <4700美元/盎司 | -3.33% |
|
||
| 现货白银 | 76.78美元/盎司 | -9.06% |
|
||
| 比特币 | <76000美元 | -3.58% |
|
||
| WTI原油 | 65美元/桶下方 | -1.32% |
|
||
|
||
---
|
||
|
||
## ⏰ **定时任务**
|
||
|
||
**发送频率:** 每天早上 7:30
|
||
**接收邮箱:** Yaxing_feng@dgmaorui.com
|
||
**任务状态:** ✅ 已启用
|
||
|
||
---
|
||
|
||
**此邮件由 OpenClaw 自动发送**
|
||
"""
|
||
|
||
return body
|
||
|
||
def send_news_email():
|
||
"""发送新闻邮件"""
|
||
|
||
print("=" * 60)
|
||
print("每日全球新闻摘要邮件发送")
|
||
print("=" * 60)
|
||
print(f"发件人: {EMAIL}")
|
||
print(f"收件人: {TO_EMAIL}")
|
||
print(f"SMTP 服务器: {SMTP_SERVER}:{SMTP_PORT}")
|
||
print("=" * 60)
|
||
|
||
try:
|
||
# 搜索新闻
|
||
news_items = search_news()
|
||
|
||
# 格式化邮件
|
||
body = format_news_email(news_items)
|
||
|
||
# 创建邮件
|
||
msg = MIMEMultipart()
|
||
msg["From"] = Header(f"OpenClaw <{EMAIL}>", "utf-8")
|
||
msg["To"] = Header(TO_EMAIL, "utf-8")
|
||
msg["Subject"] = Header(f"每日全球新闻摘要 - {datetime.now().strftime('%Y年%m月%d日')}", "utf-8")
|
||
|
||
msg.attach(MIMEText(body, "plain", "utf-8"))
|
||
|
||
# 连接 SMTP 服务器并发送邮件
|
||
print("\n正在连接 SMTP 服务器...")
|
||
with smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT) as server:
|
||
print(f"连接成功: {SMTP_SERVER}:{SMTP_PORT}")
|
||
|
||
print("正在登录...")
|
||
server.login(EMAIL, AUTH_CODE)
|
||
print(f"登录成功: {EMAIL}")
|
||
|
||
print("正在发送邮件...")
|
||
server.send_message(msg)
|
||
print("邮件发送成功!")
|
||
|
||
print("\n" + "=" * 60)
|
||
print("✅ 邮件发送完成")
|
||
print("=" * 60)
|
||
print(f"收件人: {TO_EMAIL}")
|
||
print(f"新闻条数: {len(news_items)}")
|
||
print("=" * 60)
|
||
|
||
return True
|
||
|
||
except Exception as e:
|
||
print("\n" + "=" * 60)
|
||
print("❌ 发送失败")
|
||
print("=" * 60)
|
||
print(f"错误信息: {e}")
|
||
print("=" * 60)
|
||
return False
|
||
|
||
def main():
|
||
"""主函数"""
|
||
print("开始发送每日全球新闻摘要...")
|
||
print()
|
||
|
||
success = send_news_email()
|
||
|
||
if success:
|
||
print("\n💡 提示:")
|
||
print("1. 邮件已发送到目标邮箱")
|
||
print("2. 请检查收件箱(包括垃圾邮件)")
|
||
print("3. 每天早上7:30将自动发送")
|
||
else:
|
||
print("\n🔧 解决方案:")
|
||
print("1. 检查 SMTP 配置")
|
||
print("2. 检查网络连接")
|
||
print("3. 检查邮箱授权码")
|
||
|
||
if __name__ == "__main__":
|
||
main()
|