【shell脚本实现带附件邮件】

环境CentOS

使用mail命令发送邮件需要先配置发送邮件的邮箱,以QQ邮箱为例获取授权码

第一步安装依赖

[root@hecs-38553 ~]# yum -y install sendmail
Last metadata expiration check: 1:08:19 ago on Tue 13 Dec 2022 03:11:00 PM CST.
Dependencies resolved.
============================================================================================================================================================================================
 Package                                      Architecture                             Version                                            Repository                                   Size
============================================================================================================================================================================================
Installing:
 sendmail                                     x86_64                                   8.15.2-34.el8                                      AppStream                                   768 k
Installing dependencies:
 cyrus-sasl                                   x86_64                                   2.1.27-5.el8                                       base                                         96 k

Transaction Summary
============================================================================================================================================================================================
Install  2 Packages

Total download size: 864 k
Installed size: 1.8 M
Downloading Packages:
(1/2): cyrus-sasl-2.1.27-5.el8.x86_64.rpm                                                                                                                   205 kB/s |  96 kB     00:00    
(2/2): sendmail-8.15.2-34.el8.x86_64.rpm                                                                                                                    201 kB/s | 768 kB     00:03    
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                       226 kB/s | 864 kB     00:03     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                                    1/1 
  Running scriptlet: cyrus-sasl-2.1.27-5.el8.x86_64                                                                                                                                     1/2 
  Installing       : cyrus-sasl-2.1.27-5.el8.x86_64                                                                                                                                     1/2 
  Running scriptlet: cyrus-sasl-2.1.27-5.el8.x86_64                                                                                                                                     1/2 
  Running scriptlet: sendmail-8.15.2-34.el8.x86_64                                                                                                                                      2/2 
  Installing       : sendmail-8.15.2-34.el8.x86_64                                                                                                                                      2/2 
  Running scriptlet: sendmail-8.15.2-34.el8.x86_64                                                                                                                                      2/2 
  Verifying        : cyrus-sasl-2.1.27-5.el8.x86_64                                                                                                                                     1/2 
  Verifying        : sendmail-8.15.2-34.el8.x86_64                                                                                                                                      2/2 

Installed:
  cyrus-sasl-2.1.27-5.el8.x86_64                                                                sendmail-8.15.2-34.el8.x86_64                                                               

Complete!
[root@hecs-38553 ~]# yum install -y mailx
Last metadata expiration check: 1:11:32 ago on Tue 13 Dec 2022 03:11:00 PM CST.
Package mailx-12.5-29.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!

安装完后启动sendmail命令查询运行状态

[root@hecs-38553 ~]# service sendmail start
Redirecting to /bin/systemctl start sendmail.service
[root@hecs-38553 ~]# service sendmail status
Redirecting to /bin/systemctl status sendmail.service
● sendmail.service - Sendmail Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/sendmail.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2022-12-13 16:21:55 CST; 42min ago
  Process: 620594 ExecStart=/usr/sbin/sendmail -bd $SENDMAIL_OPTS $SENDMAIL_OPTARG (code=exited, status=0/SUCCESS)
  Process: 620586 ExecStartPre=/etc/mail/make aliases (code=exited, status=0/SUCCESS)
  Process: 620585 ExecStartPre=/etc/mail/make (code=exited, status=0/SUCCESS)

设置发件人信息

[root@hecs-38553 ~]# vim /etc/mail.rc

#mail
set from=xxxxxx@qq.com   #显示的发件人邮箱
set smtp=smtps://smtp.qq.com:465  #邮件服务器
set smtp-auth-user=xxxxx@qq.com    #发件人邮箱账号
set smtp-auth-password=lnayvxtpzrmwbebg  #发件人邮箱授权码
set smtp-auth=login         #登录

发送邮件

  1. 通过文件内容发送
    mail -s ‘mail test’ xxx@yyy.com < con.txt
  2. 通过管道符直接发送
    echo “this is my test mail” | mail -s ‘mail test’ xxx@yyy.com
  3. 带附件发送
    echo “this is my test mail” | mail -a /root/client.c -s ‘mail test’ xxx@qq.com

从QQ邮箱获取SSL证书,并在CentOS中设置

#存放证书的位置
$ ~ mkdir -p /root/.certs
#获取QQ 邮箱的 SSL 证书
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt

#添加第一个证书到证书数据库中
certutil -A -n "GeoTrust SSL CA" -t "C,,"  -d  ~/.certs  -i  ~/.certs/qq.crt
#添加第二个证书到证书数据库中
certutil -A -n "GeoTrust Global CA" -t "C,,"  -d  ~/.certs  -i  ~/.certs/qq.crt

#列出指定的目录下的所有证书
certutil -L -d /root/.certs
#如果出现Error in certificate: Peer's certificate issuer is not recognized.执行下面命令
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ~/.certs -i ~/.certs/qq.crt
我遇到的错误提示Error in certificate: Peer's certificate issuer has been marked as not trusted by the.解决办法
$  certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ~/.certs -i ~/.certs/qq.crt
Notice: Trust flag u is set automatically if the private key is present.

邮箱查看

在这里插入图片描述

后续可以用shell脚本文件的形式一键发送定时发送

<think>好的,我现在需要回答用户关于numpynp.clip函数用法和相关技术问题。首先,我应该先回忆一下np.clip的基本功能。clip函数的作用是将数组中的元素限制在指定的范围内,超出范围的元素会被截断到边界值。比如,如果设置范围是[0,1],那么小于0的元素变成0,大于1的元素变成1,中间的值保持不变。 接下来,我需要确认函数的参数。根据官方文档,np.clip的语法是numpy.clip(a, a_min, a_max, out=None, **kwargs)。其中a是输入数组,a_min和a_max分别是下限和上限。参数a_min和a_max可以是标量或者数组,如果是数组的话,形状需要和输入数组a兼容,以便进行广播。out参数用于指定输出数组,可选。 然后,我应该举几个例子来说明用法。比如,当输入是一维数组时,clip会逐个元素处理。例如,arr = np.array([1, 2, 3, 4, 5]),使用np.clip(arr, 2, 4)后得到[2,2,3,4,4]。另外,如果a_min或a_max其中一个为None,那么该方向不会进行截断。例如,np.clip(arr, None, 3)会将所有大于3的元素变为3,而不会改变小于3的部分。 用户可能还想知道如何处理多维数组的情况。这时候,可以举一个二维数组的例子,比如一个2x3的矩阵,应用clip后每个元素都会被限制。此外,使用out参数可以将结果保存到现有的数组中,节省内存。例如,先创建一个和输入数组形状相同的输出数组,然后通过out参数传递进去。 还需要注意数据类型的问题。如果输入数组是整数类型,clip后的结果也会是整数,可能丢失精度。例如,将3.7截断到整数会变成3。如果用户需要保留小数,应该确保输入数组是浮点类型。 另外,用户可能会问到clip函数和其他类似函数的区别,比如np.minimum和np.maximum的组合使用。这时可以说明,clip实际上等价于np.maximum(a_min, np.minimum(a, a_max)),但clip函数更为简洁高效。 在应用场景方面,clip常用于数据预处理,比如图像处理中将像素值限制在0-255之间,或者在机器学习中归一化数据时防止数值溢出。例如,在引用[^3]提到的图像处理管线中,可能需要对图像数据进行归一化,这时候clip函数可以确保数据在有效范围内。 还需要检查是否有相关的技术问题,比如如何处理NaN值。在numpy中,clip函数不会处理NaN,它们会保留在结果中。如果用户需要处理NaN,可能需要在调用clip之前先使用np.nan_to_num或其他方法处理。 最后,要确保回答结构清晰,分点说明用法、参数、示例和应用场景,并生成相关问题。同时,注意使用中文回答,数学表达式用$...$格式,独立公式用$$...$$。如果有引用相关内容,比如用户提供的引用[^1]中的numpy示例,可以适当提及,但这里用户的问题主要集中在clip函数,可能引用中的例子并不直接相关,但如果有合适的部分可以引用的话需要加入。</think>### numpy.clip函数详解 #### 1. 函数定义 `np.clip(a, a_min, a_max, out=None)` 将数组 `a` 的元素限制在 `[a_min, a_max]` 范围内。超出范围的元素会被截断为边界值,数学表达式为: $$y_i = \begin{cases} a_{\text{min}} & \text{if } x_i < a_{\text{min}} \\ x_i & \text{if } a_{\text{min}} \leq x_i \leq a_{\text{max}} \\ a_{\text{max}} & \text{if } x_i > a_{\text{max}} \end{cases}$$ #### 2. 参数说明 - **a**: 输入数组(支持多维) - **a_min/a_max**: 下限/上限(标量或数组,可设为`None`表示不限制该方向) - **out**: 输出数组(可选) #### 3. 基础用法示例 ```python import numpy as np # 示例1:一维数组裁剪 arr = np.array([-1, 2, 5, 10]) clipped = np.clip(arr, 0, 5) # 输出:[0, 2, 5, 5] # 示例2:仅限制上限 arr = np.array([[3, 7], [9, 2]]) clipped = np.clip(arr, None, 5) # 输出:[[3,5], [5,2]] ``` #### 4. 高级用法 - **广播机制**:当`a_min`或`a_max`为数组时,需与输入数组形状兼容 ```python # 不同维度裁剪 arr = np.arange(12).reshape(3,4) min_vals = np.array([1, 2, 3, 4]) max_vals = np.array([8, 7, 6, 5]) clipped = np.clip(arr, min_vals, max_vals) ``` - **内存优化**:使用`out`参数复用内存 ```python output = np.empty_like(arr) np.clip(arr, 2, 7, out=output) ``` #### 5. 应用场景 1. **图像处理**:限制像素值范围(如RGB值0-255) 2. **数据清洗**:处理异常值 3. **激活函数**:模拟ReLU函数(`np.clip(x, 0, None)`) 4. **物理模拟**:约束参数取值范围(如温度不能低于绝对零度) #### 6. 注意事项 - **数据类型**:整数类型裁剪可能丢失精度,建议使用浮点类型 - **NaN处理**:`np.clip`不会处理NaN值,需提前处理 - **性能优化**:对大规模数组操作时,建议预分配输出内存 : 在Numpy数组操作中,类似`np.multiply`和`np.dot`的函数需要特别注意数据类型对结果的影响,这与`np.clip`的数据处理逻辑有相似之处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Quieeeet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值