hongyonghan / Docker_Microsoft365_E5_Renew_X

Docker版本的E5调用API续订服务:Microsoft 365 E5 Renew X
Apache License 2.0
1.24k stars 319 forks source link

关于邮箱通知的建议 #44

Open OwnerCM opened 1 year ago

OwnerCM commented 1 year ago

感谢大佬提供这么好用的工具并一直保持更新,对于新的邮箱功能提供2个建议: 1、发送和接收邮件的配置能否改为在Config.xml里进行配置。 2、每日18点的定时邮件能否改为有错误被暂停的账号才发送。

hongyonghan commented 1 year ago

关于以上两点建议会在近期进行改进。请持续关注。

hongyonghan commented 1 year ago

说的两点建议选择性改进了一下。一是可以使用环境变量的形式进行修改发送邮箱和接收邮箱,而是不考虑暂停的时候才发送。这个可以自己进代码里面修改,很简单。不考虑的原因是有可能因为机器关机等原因无法收到邮件,会被默认是正常运行。每天发送可能会有点打扰,但是放心。

Hopeless commented 1 year ago

感谢老哥提供了这么好的工具,看到这个issue,也想搭车提个建议😀: 大佬可否考虑接入Server酱(https://sct.ftqq.com/)通过App(微信、PushDeer、Bark等)推送,这样比邮箱更方便直接~

hongyonghan commented 1 year ago

@Hopeless 下个版本会考虑,由于个人时间精力有限,不定时更新。大家有啥需求可以发在这个issue下面。这个issue我会一直开着。

hongyonghan commented 1 year ago

可以考虑加进去 @mmkakac

xiaoweiXX commented 1 year ago

说的两点建议选择性改进了一下。一是可以使用环境变量的形式进行修改发送邮箱和接收邮箱,而是不考虑暂停的时候才发送。这个可以自己进代码里面修改,很简单。不考虑的原因是有可能因为机器关机等原因无法收到邮件,会被默认是正常运行。每天发送可能会有点打扰,但是放心。

这样邮箱里就会充满垃圾邮件啊(虽然本来也不少了)。要不然大佬加个开关,让用户自己选择邮件通知的形式,免得邮箱全是这种邮件。

Nebulosa-Cat commented 9 months ago

通知的話...可能Discord Webhook或Tg Bot吧?這兩個實現應該是比較簡單的

hw7622 commented 3 months ago

研究了一下大佬的代码,做了一下修改 将容器里面的csv文件挂载出来之后 定时任务执行这个脚本就可以钉钉或者微信PushPlus推送了 进入容器里面停止大佬的邮箱发送定时任务 就不再用邮箱了


import csv
import os
import json
import requests
import time
import hmac
import hashlib
import base64
import urllib.parse

# 定义令牌和密钥
DD_TOKEN = 'your-dingtalk-token'  # 替换为实际的钉钉Token
DD_SECRET = 'your-dingtalk-secret'  # 替换为实际的钉钉Secret
PUSHPLUS_TOKEN = 'your-pushplus-token'  # 替换为实际的PushPlus Token

# 定义一个函数检查是否账户处于暂停状态
def isPaused():
    is_paused = False
    with open('/opt/renewx/appdata/DataBase/EXAccountRun.csv', 'rt') as csvfile:  # 更改为宿主机上的实际路径
        reader = csv.reader(csvfile)
        column = [row[7] for row in reader]
        for i in range(1, len(column)):
            if column[i] == 'True':
                is_paused = True
                break
    return is_paused

# 定义一个函数发送钉钉机器人通知
def sendDingTalkNotification(content):
    if DD_TOKEN.strip() and DD_SECRET.strip():
        timestamp = str(round(time.time() * 1000))
        string_to_sign = '{}\n{}'.format(timestamp, DD_SECRET)
        hmac_code = hmac.new(DD_SECRET.encode(), string_to_sign.encode(), digestmod=hashlib.sha256).digest()
        sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
        url = f'https://oapi.dingtalk.com/robot/send?access_token={DD_TOKEN}&timestamp={timestamp}&sign={sign}'
        headers = {"Content-Type": "application/json;charset=utf-8"}
        data = {
            "msgtype": "markdown",
            "markdown": {
                "title": "ms365 检查结果",
                "text": f"ms365 checkout\n> {content}"
            }
        }
        response = requests.post(url=url, data=json.dumps(data), headers=headers, timeout=15)
        if response.json().get("errcode") == 0:
            print("钉钉机器人通知发送成功!")
        else:
            print("钉钉机器人通知发送失败!")

# 定义一个函数发送PushPlus通知
def sendPushPlusNotification(content):
    if PUSHPLUS_TOKEN:
        url = 'http://www.pushplus.plus/send'
        data = {
            "token": PUSHPLUS_TOKEN,
            "title": "ms365 检查结果",
            "content": content,
        }
        headers = {'Content-Type': 'application/json'}
        response = requests.post(url, data=json.dumps(data), headers=headers)
        if response.status_code == 200:
            print("PushPlus通知发送成功!")
        else:
            print("PushPlus通知发送失败!")

# 主程序入口
if __name__ == '__main__':
    is_paused = isPaused()
    if is_paused:
        content = "结果:有ms账号已经暂停,请前往查看。"
    else:
        content = "结果:账号运行正常。"

    # 检查钉钉的令牌和密钥是否已填写,若填写则发送钉钉通知
    if DD_TOKEN and DD_SECRET:
        sendDingTalkNotification(content)

    # 检查PushPlus的令牌是否已填写,若填写则发送PushPlus通知
    if PUSHPLUS_TOKEN:
        sendPushPlusNotification(content)```
OwnerCM commented 3 months ago

研究了一下大佬的代码,做了一下修改 将容器里面的csv文件挂载出来之后 定时任务执行这个脚本就可以钉钉或者微信PushPlus推送了 进入容器里面停止大佬的邮箱发送定时任务 就不再用邮箱了

import csv
import os
import json
import requests
import time
import hmac
import hashlib
import base64
import urllib.parse

# 定义令牌和密钥
DD_TOKEN = 'your-dingtalk-token'  # 替换为实际的钉钉Token
DD_SECRET = 'your-dingtalk-secret'  # 替换为实际的钉钉Secret
PUSHPLUS_TOKEN = 'your-pushplus-token'  # 替换为实际的PushPlus Token

# 定义一个函数检查是否账户处于暂停状态
def isPaused():
    is_paused = False
    with open('/opt/renewx/appdata/DataBase/EXAccountRun.csv', 'rt') as csvfile:  # 更改为宿主机上的实际路径
        reader = csv.reader(csvfile)
        column = [row[7] for row in reader]
        for i in range(1, len(column)):
            if column[i] == 'True':
                is_paused = True
                break
    return is_paused

# 定义一个函数发送钉钉机器人通知
def sendDingTalkNotification(content):
    if DD_TOKEN.strip() and DD_SECRET.strip():
        timestamp = str(round(time.time() * 1000))
        string_to_sign = '{}\n{}'.format(timestamp, DD_SECRET)
        hmac_code = hmac.new(DD_SECRET.encode(), string_to_sign.encode(), digestmod=hashlib.sha256).digest()
        sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
        url = f'https://oapi.dingtalk.com/robot/send?access_token={DD_TOKEN}&timestamp={timestamp}&sign={sign}'
        headers = {"Content-Type": "application/json;charset=utf-8"}
        data = {
            "msgtype": "markdown",
            "markdown": {
                "title": "ms365 检查结果",
                "text": f"ms365 checkout\n> {content}"
            }
        }
        response = requests.post(url=url, data=json.dumps(data), headers=headers, timeout=15)
        if response.json().get("errcode") == 0:
            print("钉钉机器人通知发送成功!")
        else:
            print("钉钉机器人通知发送失败!")

# 定义一个函数发送PushPlus通知
def sendPushPlusNotification(content):
    if PUSHPLUS_TOKEN:
        url = 'http://www.pushplus.plus/send'
        data = {
            "token": PUSHPLUS_TOKEN,
            "title": "ms365 检查结果",
            "content": content,
        }
        headers = {'Content-Type': 'application/json'}
        response = requests.post(url, data=json.dumps(data), headers=headers)
        if response.status_code == 200:
            print("PushPlus通知发送成功!")
        else:
            print("PushPlus通知发送失败!")

# 主程序入口
if __name__ == '__main__':
    is_paused = isPaused()
    if is_paused:
        content = "结果:有ms账号已经暂停,请前往查看。"
    else:
        content = "结果:账号运行正常。"

    # 检查钉钉的令牌和密钥是否已填写,若填写则发送钉钉通知
    if DD_TOKEN and DD_SECRET:
        sendDingTalkNotification(content)

    # 检查PushPlus的令牌是否已填写,若填写则发送PushPlus通知
    if PUSHPLUS_TOKEN:
        sendPushPlusNotification(content)```

最好的解决方式还是有自动特赦类功能