#!/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()