如何为用户生成随机密码并通过邮件精准发送?
解决用户名与对应密码匹配发送邮件的问题
你当前的问题出在发送邮件的脚本使用了两层嵌套循环:外层遍历所有用户名,内层遍历所有密码,导致每个用户名会和所有密码组合发送邮件,最终每个用户收到多封包含不同密码的邮件。下面是修正后的完整方案:
修正后的密码生成脚本
#!/bin/bash # 清空目标文件(避免重复内容) > /tmp/u_p.txt # 逐行读取用户列表文件 while IFS= read -r line do # 生成随机密码 passrand=$(openssl rand -base64 12) # 将用户名和密码对应写入文件,用空格分隔 echo -e "$line $passrand" >> /tmp/u_p.txt done < /tmp/user_names.txt
说明:用while read逐行读取用户文件比for line in $file更可靠(避免用户名含空格时出错),同时直接将对应关系写入/tmp/u_p.txt。
修正后的邮件发送脚本
#!/bin/bash # 逐行读取用户名和密码对应关系 while IFS=' ' read -r maillogin pass do # 发送仅包含当前用户对应密码的邮件 echo "Hello, your login is $maillogin and password is $pass" | mail -s "Your Account Credentials" "${maillogin}@example.com" done < /tmp/u_p.txt
说明:用while IFS=' ' read -r maillogin pass逐行读取文件,每行拆分出用户名和密码,一次循环处理一个用户的邮件发送,确保每个用户只收到一封包含自己对应密码的邮件。
关键改进点
- 密码生成阶段:确保用户名和密码一一对应写入文件,而非仅打印输出
- 邮件发送阶段:去掉嵌套循环,改为逐行读取对应关系,一次处理一个用户的凭证发送
内容的提问来源于stack exchange,提问作者TerySpace
相关产品推荐
相关产品推荐

