mail_server_all.sh 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #!/bin/sh
  2. usage() {
  3. echo "Usage: $0 \"title\" \"content\" [reward] [level] [money]"
  4. exit 1
  5. }
  6. # Positional parameters only
  7. title="$1"
  8. content="$2"
  9. reward="${3:-0}"
  10. level="${4:-0}"
  11. money="${5:-0}"
  12. if [ -z "$title" ] || [ -z "$content" ]; then
  13. echo "title and content are required"
  14. usage
  15. fi
  16. echo "传入的邮件标题:$title"
  17. echo "传入的邮件内容:$content"
  18. echo "传入的邮件奖励:$reward"
  19. echo "传入的等级筛选:$level"
  20. echo "传入的充值筛选:$money"
  21. # urlencode: prefer python3, then python, fallback to simple sed
  22. urlencode() {
  23. if command -v python3 >/dev/null 2>&1; then
  24. python3 -c "import sys,urllib.parse as u; print(u.quote(sys.argv[1]))" "$1"
  25. elif command -v python >/dev/null 2>&1; then
  26. python -c "import sys,urllib; print(urllib.quote(sys.argv[1]))" "$1"
  27. else
  28. # best-effort simple replacement for common problematic chars
  29. printf '%s' "$1" | sed -e 's/ /%20/g' -e 's/&/%26/g' -e 's/?/%3F/g' -e 's/+/ %2B/g' -e 's/=/ %3D/g' | sed 's/ */ /g'
  30. fi
  31. }
  32. enc_title=$(urlencode "${title}")
  33. enc_content=$(urlencode "${content}")
  34. # Read server list line-by-line to handle spaces safely
  35. serverlist_file="/data/shell/jenkins/serverlist"
  36. if [ ! -f "$serverlist_file" ]; then
  37. echo "server list not found: $serverlist_file"
  38. exit 1
  39. fi
  40. while IFS= read -r server || [ -n "$server" ]; do
  41. # skip empty lines
  42. if [ -z "${server}" ]; then
  43. continue
  44. fi
  45. url="$(printf '%s' "$server" | cut -d',' -f2)"
  46. ro="$(printf '%s' "$server" | cut -d',' -f3)"
  47. if [ -z "$url" ] || [ -z "$ro" ]; then
  48. echo "skip invalid server line: $server"
  49. continue
  50. fi
  51. if [ "$reward" = "0" ]; then
  52. full_url="${url}/gm/mail?type=add&id=1&title=${enc_title}&content=${enc_content}"
  53. else
  54. full_url="${url}/gm/mail?type=add&id=1&title=${enc_title}&content=${enc_content}&reward=${reward}"
  55. fi
  56. # Query uids and send mails line-by-line
  57. uids=$(mysql -uroot -p123456 "$ro" -N -e "select uid from role where base_level>=${level} and total_recharge>=${money};")
  58. if [ -z "$uids" ]; then
  59. echo "no uids found for server $ro"
  60. continue
  61. fi
  62. # iterate uids safely (line-by-line)
  63. printf '%s
  64. ' "$uids" | while IFS= read -r id; do
  65. if [ -z "$id" ]; then
  66. continue
  67. fi
  68. curl "${full_url}&uid=${id}"
  69. done
  70. done < "$serverlist_file"
  71. echo "-----执行完毕-----"