From dbf77669d0c4126af1e20c0eb117a3747e1674d2 Mon Sep 17 00:00:00 2001 From: ihmily <961532186@qq.com> Date: Wed, 18 Sep 2024 12:52:45 +0800 Subject: [PATCH] fix: update email message push --- config/config.ini | 15 +++++++------- main.py | 10 ++++----- msg_push.py | 52 +++++++++++++++++++++++------------------------ 3 files changed, 38 insertions(+), 39 deletions(-) diff --git a/config/config.ini b/config/config.ini index c5d8d62..1f89cc1 100644 --- a/config/config.ini +++ b/config/config.ini @@ -1,5 +1,5 @@ [录制设置] -是否跳过代理检测(是/否) = 是 +是否跳过代理检测(是/否) = 否 直播保存路径(不填则默认) = 保存文件夹是否以作者区分 = 是 保存文件夹是否以时间区分 = 否 @@ -23,16 +23,16 @@ ts录制完成后自动增加生成m4a格式 = 否 额外使用代理录制的平台(逗号分隔) = [推送配置] -直播状态通知(可选微信|钉钉|tg|邮箱或者都填) = +直播状态通知(可选微信|钉钉|tg|邮箱或者都填) = 钉钉推送接口链接 = 微信推送接口链接 = 钉钉通知@对象(填手机号) = tgapi令牌 = tg聊天id(个人或者群组id) = -smtp邮件服务器 = -发件人 = -发件人密码 = -收件人 = +smtp邮件服务器 = +发件人邮箱 = +发件人密码(授权码) = +收件人邮箱 = 自定义开播推送内容 = 自定义关播推送内容 = 只推送通知不录制(是/否) = 否 @@ -70,7 +70,7 @@ liuxing_cookie = showroom_cookie = acfun_cookie = shiguang_cookie = -yinbo_cookie = +yinbo_cookie = yingke_cookie = zhihu_cookie = @@ -88,4 +88,3 @@ popkontv密码 = twitcasting账号类型 = normal twitcasting账号 = twitcasting密码 = - diff --git a/main.py b/main.py index d5c4835..babb19e 100644 --- a/main.py +++ b/main.py @@ -4,7 +4,7 @@ Author: Hmily GitHub: https://github.com/ihmily Date: 2023-07-17 23:52:05 -Update: 2024-09-14 12:18:00 +Update: 2024-09-18 12:30:12 Copyright (c) 2023-2024 by Hmily, All Rights Reserved. Function: Record live stream video. """ @@ -636,7 +636,7 @@ def push_message(content: str) -> Union[str, list]: dingtalk(dingtalk_api_url, content, dingtalk_phone_num) if '邮箱' in live_status_push: push_pts.append('邮箱') - email_message(mail_host, mail_pass, from_email, to_email, "直播间状态更新", content) + email_message(mail_host, mail_password, from_email, to_email, "直播间状态更新通知", content) if 'TG' in live_status_push or 'tg' in live_status_push: push_pts.append('TG') tg_bot(tg_chat_id, tg_token, content) @@ -1677,9 +1677,9 @@ while True: tg_token = read_config_value(config, '推送配置', 'tgapi令牌', "") tg_chat_id = read_config_value(config, '推送配置', 'tg聊天id(个人或者群组id)', "") mail_host = read_config_value(config, '推送配置', 'SMTP邮件服务器', "") - from_email = read_config_value(config, '推送配置', '发件人', "") - mail_pass = read_config_value(config, '推送配置', '发件人密码', "") - to_email = read_config_value(config, '推送配置', '收件人', "") + from_email = read_config_value(config, '推送配置', '发件人邮箱', "") + mail_password = read_config_value(config, '推送配置', '发件人密码(授权码)', "") + to_email = read_config_value(config, '推送配置', '收件人邮箱', "") begin_push_message_text = read_config_value(config, '推送配置', '自定义开播推送内容', "") over_push_message_text = read_config_value(config, '推送配置', '自定义关播推送内容', "") disable_record = options.get(read_config_value(config, '推送配置', '只推送通知不录制(是/否)', "否"), False) diff --git a/msg_push.py b/msg_push.py index 2bbbe82..8a60bb6 100644 --- a/msg_push.py +++ b/msg_push.py @@ -4,17 +4,16 @@ Author: Hmily GitHub: https://github.com/ihmily Date: 2023-09-03 19:18:36 -Update: 2024-07-01 22:16:36 +Update: 2024-09-18 12:30:12 Copyright (c) 2023 by Hmily, All Rights Reserved. """ - from typing import Dict, Any, Optional import json import urllib.request from utils import trace_error_decorator - -# 发送邮件相关库 import smtplib +from email.header import Header +from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText no_proxy_handler = urllib.request.ProxyHandler({}) @@ -23,7 +22,7 @@ headers: Dict[str, str] = {'Content-Type': 'application/json'} @trace_error_decorator -def dingtalk(url: str, content: str, phone_number: Optional[str] = '') -> Dict[str, Any]: +def dingtalk(url: str, content: str, number: Optional[str] = '') -> Dict[str, Any]: json_data = { 'msgtype': 'text', 'text': { @@ -31,7 +30,7 @@ def dingtalk(url: str, content: str, phone_number: Optional[str] = '') -> Dict[s }, "at": { "atMobiles": [ - phone_number # 添加这个手机号,可以被@通知(必须要在群里) + number # 添加这个手机号,可以被@通知(必须要在群里) ], }, } @@ -56,28 +55,30 @@ def xizhi(url: str, content: str) -> Dict[str, Any]: json_data = json.loads(json_str) return json_data + @trace_error_decorator -def email_message(mail_host: str, mail_pass: str, from_email: str, to_email:str, title: str , content: str) -> Dict[str, Any]: +def email_message(mail_host: str, mail_pass: str, from_email: str, to_email: str, title: str, content: str) -> Dict[ + str, Any]: - receivers = [to_email] # 接收邮件地址 - - # 创建一个带附件的实例 - message = MIMEText(content, 'plain', 'utf-8') + message = MIMEMultipart() message['From'] = "{}".format(from_email) - message['To'] = to_email - message['Subject'] = title + message['Subject'] = Header(title, 'utf-8') + receivers = to_email.replace(',', ',').split(',') + if len(receivers) == 1: + message['To'] = receivers[0] + + tApart = MIMEText(content, 'plain', 'utf-8') + message.attach(tApart) try: smtpObj = smtplib.SMTP_SSL(mail_host, 465) smtpObj.login(from_email, mail_pass) smtpObj.sendmail(from_email, receivers, message.as_string()) - print("邮件发送成功") + data = {'code': 200, 'msg': '邮件发送成功'} + return data except smtplib.SMTPException as e: - print("Error: 无法发送邮件", e) + raise smtplib.SMTPException(f'邮件发送失败 {e}') - data = {'code': '200'} - json_data = json.dumps(data).encode('utf-8') - return json_data @trace_error_decorator def tg_bot(chat_id: int, token: str, content: str) -> Dict[str, Any]: @@ -95,23 +96,22 @@ def tg_bot(chat_id: int, token: str, content: str) -> Dict[str, Any]: if __name__ == '__main__': - content = '张三 开播了!' # 推送内容 + send_content = '张三 开播了!' # 推送内容 # 钉钉推送通知 webhook_api = '' # 替换成自己Webhook链接,参考文档:https://open.dingtalk.com/document/robots/custom-robot-access phone_number = '' # 被@用户的手机号码 - # dingtalk(webhook_api, content, phone_number) + # dingtalk(webhook_api, send_content, phone_number) # 微信推送通知 # 替换成自己的单点推送接口,获取地址:https://xz.qqoq.net/#/admin/one # 当然也可以使用其他平台API 如server酱 使用方法一样 xizhi_api = 'https://xizhi.qqoq.net/XZa5a4a224987c88ab828acbcc0aa4c853.send' - # xizhi(xizhi_api, content) + # xizhi(xizhi_api, send_content) # telegram推送通知 - token = '' # tg搜索"BotFather"获取的token值 - chat_id = 000000 # tg搜索"userinfobot"获取的chat_id值,即可发送推送消息给你自己,如果下面的是群组id则发送到群 - # tg_bot(chat_id, token, content) + tg_token = '' # tg搜索"BotFather"获取的token值 + tg_chat_id = 000000 # tg搜索"userinfobot"获取的chat_id值,即可发送推送消息给你自己,如果下面的是群组id则发送到群 + # tg_bot(tg_chat_id, tg_token, send_content) - # 邮件推送通知 - # email_message("", "","", "", "测试python发送邮件", "测试python发送邮件") \ No newline at end of file + # email_message("", "", "", "", "", "")