#!/bin/bash
# 检查是否提供了CSV文件名
if [ $# -ne 1 ]; then
echo "用法: $0 <csv文件>"
exit 1
fi
csv_file="$1"
# 暂存用户和mid
output_csv="user_mid.csv"
# 抄送人优化
extract_value() {
[[ "$1" = *,* ]] || return # 无逗号直接返回空
local temp="${1%,*}" # 移除最后一个逗号及之后的内容
echo "${temp##*:}" # 提取最后一个冒号后面的内容
}
# 优化文件内部标题
mail_out="mail_out.txt"
echo "发信人;邮件主题;收信人;抄送人;邮件时间" > $mail_out
# 邮箱域名,根据实际去修改。不要把@符号去除
domain="@a.cn"
# 检查文件是否存在
if [ ! -f "$csv_file" ]; then
echo "错误: 文件 $csv_file 不存在"
exit 1
fi
# 读取CSV文件并输出第一列,获取邮件的mid值
while IFS= read -r line || [ -n "$line" ]; do
# 提取第一列(逗号分隔)
col=$(echo "$line" | awk -F, '{print $1}')
mail=($(/home/coremail/bin/userutil --list-msg $col$domain fid=3 | grep -v total | awk '{print $2}'))
#/home/coremail/bin/userutil --list-msg $col$domain fid=3
#fid=1 表示收件箱文件夹
#fid=2 表示草稿箱文件夹
#fid=3 表示已发送文件夹
#fid=5 表示垃圾邮件文件夹
#fid=6 表示病毒文件夹
for value in "${mail[@]}"; do
echo "$col,$value" >> "$output_csv"
done
done < "$csv_file"
# 导出发信人,主题,收信人和抄送人
while IFS= read -r line || [ -n "$line" ]; do
user=$(echo "$line" | awk -F, '{print $1}')
mid=$(echo "$line" | awk -F, '{print $2}')
/home/coremail/bin/userutil --display-msginfo $user$domain $mid > mail_msg.txt
mail_subject=$(grep "Subject:" mail_msg.txt | awk -F'Subject: ' '{print $2}')
mail_to=$(grep "To:" mail_msg.txt | awk -F'To: ' '{print $2}')
mail_cc1=$(grep "retolist=" mail_msg.txt | awk -F'STR]:' '{print $2}')
mail_cc=$(extract_value "$mail_cc1")
mail_time=$(grep "RecTime" mail_msg.txt | awk -F'Time: ' '{print $2}')
echo "$user$domain;$mail_subject;$mail_to;$mail_cc;$mail_time" >> $mail_out
done < "$output_csv"
# 优化生成文件
sed -i "s/,/;/g" $mail_out
sed -i "s/;/,/g" $mail_out
mv $mail_out mail_out.csv
echo "生成的发信清单文件在脚本所在目录的mail_out.csv,请查收!!"
# 删除暂存用户和mid
rm -f $output_csv
rm -f mail_msg.txt
rm -f $mail_out