linux下发邮件报警提醒的两个方法

在搭建Zabbix监控时,通过163邮箱设置SMTP进行邮件报警。本文介绍了两种方法:一是利用mailx,需安装并配置mail.rc;二是使用Python编写send_mail.py脚本发送邮件。建议使用Python方法,更便于操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在搭建zabbix监控时,要使用邮件报警提醒,最好是使用163邮箱,比较容易设置smtp。

1、首先要设置邮箱启用smtp,参考https://blog.youkuaiyun.com/suxiaohanqi/article/details/56844087

    给你的邮箱设置一个客户端授权密码

    注意,此密码不能与邮箱的登陆密码相同。

    接下来的脚本中,都使用的是这个客户端授权密码

2、查阅资料后发现2个比较方便的发邮件方式,更推荐使用第二种使用python

    (1) 一个是使用mailx,详细参考https://blog.youkuaiyun.com/outman1023/article/details/79199947

         yum -y install mailx后,

           vim /etc/mail.rc     (如果mail.rc文件没有,就手动创建,添加如下内容)

set sendcharsets=iso-8859-1,utf-8
set from=xxx@163.com
set smtp=smtp.163.com:25
set smtp-auth-user=xxx@163.com
set smtp-auth-password=****
  •        注意,密码是163邮箱的客户端授权密码,不是邮箱登陆密码
以下命令自己给自己发个邮件试试,成功

      echo "zabbix test mail" |mail -s "zabbix" xxx@163.com 

    (2)另外一个方式就是python程序了。参考https://blog.youkuaiyun.com/wszll_alex/article/details/77247696

             本人比较倾向于使用新的软件,于是从官网下载安装Python-3.6.4.tgz

             tar xvf Python-3.6.4.tgz -C /usr/src
             cd /usr/src/Python-3.6.4
             ./configure --prefix=/usr/local/python364
             make
             make install

               创建一个send_mail.py发邮件脚本文件,内容如下:         

注意,口令是163邮箱的客户端授权密码,不是邮箱登陆密码
#!/usr/local/python364/bin/python3.6
#coding:utf-8
import smtplib  
from email.mime.text import MIMEText  
from sys import argv

mailto_list=[] 
mail_host="smtp.163.com:25"  #设置服务器
mail_user="xxxxx@163.com"     #发件用户名(换成自己的)
mail_pass="xxxxxxxx"   #口令(换成自己的) 
#mail_postfix="163.com"  #发件箱的后缀
debug_level=0       #是否开启debug

def send_mail(to_list,sub,content):  
    me=mail_user
    msg = MIMEText(content,_subtype='plain',_charset='utf-8')  
    msg['Subject'] = sub  
    msg['From'] = me  
    msg['To'] = ";".join(to_list)  
    try:  
        server = smtplib.SMTP()  
        server.set_debuglevel(debug_level)    
        server.connect(mail_host)  
        server.login(mail_user,mail_pass)  
        server.sendmail(me, to_list, msg.as_string())  
        server.close()  
        return True  
    except Exception as e:  
        print('except:',e)  
        return False  
if __name__ == '__main__':
    try:
        mailto_list=argv[1].split(';')
        sub=argv[2]
        content=argv[3]
    except:
        print("python send_mail.py 'user1@xx.com;user2@xx.com' sub content")
        exit()

    if send_mail(mailto_list,sub,content):  
        print("发送成功")  
    else:  
        print("发送失败")

然后添加可执行权限   chmod +x send_mail.py

发邮件给自己测试:

./sendmail.py 'xxx@163.com' sub content

<think>好的,我现在需要帮助用户找到STM32F103ZET6通过串口发送两个数据的示例代码。首先,用户的需求是使用这个特定的微控制器发送两个数据,可能需要基本的串口配置和发送功能。用户可能对STM32的串口通信不太熟悉,所以我应该先考虑如何初始化串口。STM32F103ZET6有多个串口,常用的有USART1和USART2。USART1通常连接到APB2总线,时钟频率较高,适合高速通信。所以示例代码可能会使用USART1。 接下来是配置GPIO引脚。USART1的TX引脚是PA9,RX是PA10。需要设置GPIO为复用推挽输出模式,并配置相应的时钟。用户可能不清楚如何启用GPIO和USART的时钟,所以代码中需要包含RCC_APB2PeriphClockCmd函数来开启时钟。然后是USART的初始化结构体配置。波特率常用的有9600、115200等,用户可能希望使用115200。数据位8位,停止位1位,无校验,这些是常见配置。需要设置USART_Mode为发送模式,可能只需要发送,所以只启用TX模式?接下来是发送数据的函数。使用USART_SendData函数发送单个字节,然后通过USART_GetFlagStatus检查发送是否完成。用户可能需要发送两个不同的数据,比如0x55和0xAA,所以代码中应该演示如何发送这两个数据,并可能有循环发送的示例。 另外,用户可能需要了解如何启用USART,通过USART_Cmd函数。此外,系统时钟的配置可能影响波特率,但示例代码可能默认使用默认时钟,比如72MHz。如果用户遇到波特率不准确的问题,可能需要检查时钟配置,但示例中可能不涉及复杂的时钟设置,以保持简单。 用户可能还需要知道如何测试代码,比如通过串口调试助手查看接收的数据。代码中可能需要加入延时,以便观察发送结果,比如使用简单的for循环作为延时。需要考虑代码的完整性和正确性。比如,初始化顺序是否正确,是否先配置GPIO再配置USART,是否在发送前确保USART已经启用。此外,发送函数可能需要等待上一个数据发送完成再发送下一个,以避免数据覆盖。 可能还需要提示用户根据自己的硬件连接调整引脚和串口,比如如果使用USART2,则需要修改对应的GPIO和时钟配置。此外,代码可能基于标准外设库,用户需要确保正确包含头文件,并正确配置工程设置。 用户的问题可能涉及到如何发送多个数据,所以示例代码应该展示如何发送两个不同的字节,并可能循环发送。同时,可能需要提醒用户关于缓冲区、中断或DMA等更高效的方法,但用户当前可能只需要基础的轮询方式。最后,生成相关问题需要考虑用户可能的后续问题,比如如何接收数据、如何提高发送效率、如何处理错误等。还可能涉及不同波特率的影响、使用其他串口、或者与其他外设的配合使用。</think>### STM32F103ZET6 串口发送两个数据示例代码 以下是基于标准外设库实现的串口发送示例代码,使用USART1发送两个字节数据$0x55$和$0xAA$,采用轮询方式发送: ```c #include "stm32f10x.h" void USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; // 1. 开启时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); // 2. 配置GPIO // TX:PA9 RX:PA10 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // 3. 配置USART参数 USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_Mode = USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); // 4. 使能USART USART_Cmd(USART1, ENABLE); } void Send_Data(uint8_t data) { USART_SendData(USART1, data); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // 等待发送完成 } int main(void) { USART1_Init(); while(1) { Send_Data(0x55); // 发送第一个数据 Send_Data(0xAA); // 发送第二个数据 for(int i=0; i<0xFFFFF; i++); // 简单延时 } } ``` ### 关键实现步骤说明: 1. **时钟配置**:使能USART1和GPIOA的时钟[^1] 2. **GPIO模式**:PA9配置为复用推挽输出模式 3. **波特率设置**:采用115200bps,匹配常用串口调试工具参数 4. **发送函数**:使用`USART_SendData()`发送数据,通过`USART_FLAG_TXE`标志位检测发送完成状态 ### 硬件连接建议: | MCU引脚 | 功能 | 连接目标 | |---------|--------|----------| | PA9 | USART1_TX | 串口模块TX | | PA10 | USART1_RX | 串口模块RX | | GND | 地线 | 串口模块GND | ### 测试验证建议: 1. 使用USB-TTL模块连接电脑 2. 使用串口调试工具设置相同波特率 3. 应周期接收到十六进制数据`55 AA`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值