当前位置: 首页 > article >正文

使用msmtp和mutt在CentOS上发送指定目录下的所有文件作为邮件附件

1.安装 msmtp:
如果尚未安装,请先通过以下命令安装msmtp。

sudo yum install msmtp

2.配置 msmtp 使用新浪邮箱:
创建或编辑配置文件~/.msmtprc,输入以下内容(记得替换授权码)。

defaults
tls on
tls_starttls off
tls_trust_file /etc/pki/tls/certs/ca-bundle.crt

account sina
host smtp.sina.com
port 465
auth on
user 你的邮件名称@sina.com
password 你的授权码-开启POP3页面里面找
from 你的邮件名称@sina.com

account default : sina

请确保将“你的邮件名称@sina.com”替换为你的实际新浪邮箱地址。

修改权限:

chmod 600 ~/.msmtprc


3.测试配置:
可以发送一封测试邮件来验证配置是否正确。

echo -e "Subject: Test Mail\r\n\r\nThis is a test email." | msmtp --debug recipient@example.com

recipient@example.com要修改为你的收件邮箱地址

-----------------------

安装和配置 mutt 是处理邮件发送(包括附件)的一个更简便的选择。下面是在 CentOS 系统上安装 mutt 并使用它来发送带有附件的邮件的步骤。

安装 mutt
首先,你需要在 CentOS 上安装 mutt。可以通过以下命令进行安装:

sudo yum install mutt

配置 mutt
创建或编辑 .muttrc 文件:
你需要为 mutt 创建一个配置文件。这个文件通常位于你的主目录下,名为 .muttrc。你可以使用你喜欢的文本编辑器打开并编辑这个文件,例如:

vi ~/.muttrc

添加配置信息:根据你使用的新浪邮箱服务,在.muttrc中添加如下内容(记得替换为你自己的邮箱地址和授权码):

cat > ~/.muttrc <<'EOF'
# 基本设置
set from = "your_email@sina.com"
set realname = "WJF-Email"

# 使用 msmtp 作为发信代理(关键!)
set sendmail = "/usr/bin/msmtp"

# 禁用内置SMTP(避免冲突)
unset smtp_url
unset smtp_pass
EOF

请将 your_email@sina.com 替换为你的实际新浪邮箱地址,并将 授权码 替换为你从新浪邮箱获取的授权码。
-----------------------

编写脚本发送邮件


接下来,我们将编写一个Bash脚本来发送指定目录下的所有文件作为附件。

1.创建脚本文件:
在你喜欢的目录下创建一个新的脚本文件,例如send_attachments.sh。

vi send_attachments.sh

2.编写脚本内容:
在脚本文件中添加如下内容,记得根据实际情况修改路径和邮箱地址。

#!/bin/bash

# 配置
TO="receive-email@qq.com"
FROM="your-email@sina.com"
CURRENT_TIME=$(date +'%Y-%m-%d %H:%M')  # 先获取时间
SUBJECT="数据附件 ${CURRENT_TIME}"
ATTACH_DIR="/你的centos下的目录"

# 检查目录
if [ ! -d "$ATTACH_DIR" ]; then
  echo "错误:目录 $ATTACH_DIR 不存在" >&2
  exit 1
fi

# 收集附件
attachments=()
while IFS= read -r -d '' file; do
  attachments+=("-a" "$file")
done < <(find "$ATTACH_DIR" -maxdepth 1 -type f -print0)

# 无附件时退出
if [ ${#attachments[@]} -eq 0 ]; then
  echo "警告:未找到可发送的文件" >&2
  exit 0
fi

# 发送邮件(静默模式,错误输出到日志)
if ! echo " ${CURRENT_TIME}发送的附件" | \
     mutt -e "set from=$FROM" -s "$SUBJECT" "${attachments[@]}" -- "$TO" 2>> ~/.msmtp.log; then
  echo "邮件发送失败!请检查日志:~/.msmtp.log" >&2
  exit 1
else
  echo "邮件已成功发送至 $TO"
fi

3.赋予执行权限:
给脚本赋予可执行权限。

chmod +x send_attachments.sh

4.运行脚本:
执行脚本来发送邮件。

./send_attachments.sh

这样,你就可以在CentOS系统中使用msmtp和新浪邮箱发送指定目录下的所有文件作为附件了。确保你的服务器能够访问外部SMTP服务,并且防火墙规则允许相应的连接。

如果上面运行有问题,问豆包等AI工具。

要在Shell脚本中实现同时发送邮件到多个邮箱地址,有几种实现方式。以下是完整的解决方案: 方法1:使用空格分隔的多个收件人(最简单)

TO="receive1@qq.com receive2@qq.com receive3@qq.com"

然后在mutt命令中直接使用:

mutt -e "set from=$FROM" -s "$SUBJECT" "${attachments[@]}" -- $TO

注意:多个邮件,上面的命令"$TO"要修改为$TO

单个邮件,也可以直接使用  $TO  

不用加双引号。


http://www.kler.cn/a/614752.html

相关文章:

  • Go 语言规范学习(4)
  • IvorySQL:兼容Oracle数据库的开源PostgreSQL
  • Java设计模式--单例模式
  • 从零开始搭建Anaconda环境
  • 霸王茶姬小程序(2025年1月版)任务脚本
  • HTML5 Web SQL 数据库学习笔记
  • HTML DOM 基础:用「家族树」理解网页操控术
  • 排序--归并排序--非递归
  • Ludic:用Python构建HTML,告别JavaScript的繁琐开发
  • 关于拉普拉斯变换小记
  • vue 脚手架解决跨域问题
  • 网络基本概念认识(2)
  • Unity Standard Shader 解析(一)之ForwardBase(标准版)
  • pycharm终端操作远程服务器
  • 七、学习资源与社区
  • Java开发者指南:深入解析PBFT拜占庭容错算法
  • 数据结构(并查集,图)
  • Gerbv 与 Python 协同:实现 Gerber 文件智能分析与制造数据自动化
  • 【从零实现Json-Rpc框架】- 项目实现 - Dispatcher模块实现篇
  • AI+Xmind自动生成测试用例(思维导图格式)