📜  使用 python 推送通知(1)

📅  最后修改于: 2023-12-03 15:22:15.894000             🧑  作者: Mango

使用 Python 推送通知

在编写程序时,我们经常需要通过推送通知来通知用户程序的运行状态或结果。Python语言已经提供了许多第三方库可以方便地使用推送通知功能。本文介绍了三种常用的推送通知方式:邮件、短信和微信。

邮件通知

Python中可以通过SMTP协议发送邮件。SMTP是邮件传输的标准协议,这里我们可以使用Python内置的smtplib模块来发送邮件。通过SMTP发送邮件的过程可以分为以下几个步骤:

  1. 连接SMTP服务器
  2. 登录SMTP服务器
  3. 发送邮件
  4. 关闭SMTP连接
import smtplib
from email.mime.text import MIMEText

# 邮件服务器的地址和端口号
smtp_server = 'smtp.qq.com'
smtp_port = 465

# 发件人和收件人的邮箱地址
from_addr = 'your_email@qq.com'
to_addr = 'recipient_email@qq.com'

# 发件人邮箱的用户名和密码
username = 'your_email@qq.com'
password = 'email_password'

# 构造邮件内容
subject = '邮件主题'
content = '邮件内容'
msg = MIMEText(content, 'plain', 'utf-8')
msg['From'] = from_addr
msg['To'] = to_addr
msg['Subject'] = subject

try:
    # 连接SMTP服务器
    server = smtplib.SMTP_SSL(smtp_server, smtp_port)
    # 登录SMTP服务器
    server.login(username, password)
    # 发送邮件
    server.sendmail(from_addr, to_addr, msg.as_string())
    print('邮件发送成功')
except Exception as e:
    print('邮件发送失败', e)
finally:
    # 关闭SMTP连接
    server.quit()
短信通知

Python中可以通过阿里云短信API发送短信。下面是使用阿里云短信API发送短信的Python代码。其中需要替换一些参数:

  • AccessKeyId和AccessSecret:阿里云账户的AccessKeyId和AccessSecret
  • SignName:短信签名
  • TemplateCode:短信模板ID
  • PhoneNumbers:接收短信的手机号码
  • TemplateParam:短信模板参数,替换成实际短信内容
import hmac
import hashlib
import base64
import requests
import json
import datetime

# 请求的API地址
url = 'https://dysmsapi.aliyuncs.com/'

# 阿里云账户的AccessKey
access_key_id = 'your_access_key_id'
access_secret = 'your_access_secret'

# 请求参数
params = {
    "AccessKeyId": access_key_id,
    "Timestamp": datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ'),
    "Action": "SendSms",
    "SignName": "your_sign_name",
    "TemplateCode": "your_template_code",
    "PhoneNumbers": "your_phone_number",
    "TemplateParam": json.dumps(
        {"code": "your_verification_code"}
    )
}

# 签名算法
def sign(secret, params):
    string_to_sign = "&".join(["{}={}".format(k, v) for k, v in sorted(params.items())])
    sign = hmac.new((secret + '&').encode('utf-8'), string_to_sign.encode('utf-8'), hashlib.sha1).digest()
    sign = base64.b64encode(sign).decode('utf-8')
    return sign

# 发送请求
params['Signature'] = sign(access_secret, params)
response = requests.get(url, params=params)
print(response.json())
微信通知

Python中可以使用Server酱来发送微信通知。Server酱提供了一个简单的API,只需要将通知内容通过HTTP POST请求发送到API即可。下面是使用Server酱发送微信通知的Python代码。其中需要替换以下参数:

  • SCKEY:Server酱提供的Key
  • title:通知标题
  • content:通知内容
import requests

# Server酱提供的API地址和Key
url = 'https://sctapi.ftqq.com/SCKEY.send'
sckey = 'your_sckey'

# 构造请求参数
title = '通知标题'
content = '通知内容'
params = {'title': title, 'desp': content, 'text': "Python微信推送"}

# 发送请求
response = requests.post(url, data=params)
print(response.json())

以上就是使用Python实现邮件、短信和微信三种推送通知的方法。我们可以根据自己的需求选择适合的方式进行推送。