Advertisement
Guest User

Untitled

a guest
Dec 29th, 2016
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.81 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. ####################################################################
  4. # /TR 2014-01-05 GPLv2
  5. ####################################################################
  6.  
  7. db_name="database_name"
  8. db_user="db_user"
  9. db_pass="db_password"
  10. db_table="newsletter_table"
  11.  
  12. # alle mails aus der datenbank raus holen...
  13. function getmails() {
  14. echo "use $db_name; select email from $db_table;" \
  15. | mysql --skip-column-names -u$db_user -p$db_pass
  16. }
  17.  
  18. # alle mx server für eine bestimmte domain abfragen...
  19. function dnsmx() {
  20. domain="$1"
  21.  
  22. # via dig von bind
  23. dig mx $domain|grep "^$domain."|tr -s '\t' ' ' \
  24. | cut -d' ' -f6|sed -e 's/.$//g'
  25.  
  26. # via dnsmx von djb, oder dig von bind
  27. # dnsmx $domain
  28. }
  29.  
  30. # eine bestimmte mail aus der tabelle entfernen
  31. function delete_email() {
  32. email="$1"
  33. echo $email >> deleted.txt
  34.  
  35. # dieses return auskommentieren, wenn die emails wirklich aus
  36. # der datenbank entfernt werden sollen
  37. return
  38.  
  39. # achtung, hier wird nun wirklich gelöscht!
  40. echo "use $db_name;
  41. delete from $db_table where email='$email';" \
  42. | mysql -u$db_user -p$db_pass
  43. }
  44.  
  45. # versuche den mx zu connecten
  46. # -> wenn das nicht klappt:
  47. # -> lösche die email aus der datenbank
  48. # -> setze den mx auf eine blacklist
  49. # -> wenn connect in ordnung war, ab auf die whitelist
  50. function checkmail() {
  51. mx=$1
  52. email=$2
  53.  
  54. echo -e "\ncheckmail mx=$mx mail=$email"
  55.  
  56. # prüfe, ob mx der email in whitelist steht
  57. while read wl; do
  58. if [ "$mx" = "$wl" ]; then
  59. echo "mail $email (mx $mx) is on white list, skipping..."
  60. echo $email >> goodmail.txt
  61. return
  62. fi
  63. done < white.txt
  64.  
  65. # prüfe, ob mx der email in blacklist steht
  66. while read bl; do
  67. if [ "$mx" = "$bl" ]; then
  68. echo "mail $email (mx $mx) is on black list, deleting..."
  69. delete_email "$email"
  70. return
  71. fi
  72. done < black.txt
  73.  
  74. # wenn ein connect zum mx in 6 sekunden erfolgreich ist,
  75. # nehmen wir an, das der server in ordnung ist
  76. timeout 6 bash -c "cat < /dev/null > /dev/tcp/$mx/25"
  77. if [ $? != 0 ]; then
  78. # can not connect, so the email seems wrong!!
  79. echo "can not connect to mx $mx of email $email, deleting..."
  80. echo $mx >> black.txt
  81. delete_email "$email"
  82. return
  83. fi
  84.  
  85. echo $email >> goodmail.txt
  86. echo $mx >> white.txt
  87. }
  88.  
  89. # 1) alle zu prüfenden mails aus der datenbank exportieren...
  90. getmails > mails.txt
  91.  
  92. # resette black und white list
  93. echo -n > white.txt
  94. echo -n > black.txt
  95.  
  96. # 2) checke für alle mails den mx
  97. while read email; do
  98. domain=`echo $email|cut -d'@' -f2`
  99. mx=`dnsmx $domain|head -n 1`
  100. if [ -z "$mx" ]; then
  101. # lösche mails mit invalid mx
  102. echo "no mx for email $email, deleting..."
  103. delete_email "$email"
  104. continue
  105. fi
  106.  
  107. # connect prüfen...
  108. checkmail "$mx" "$email"
  109. done < mails.txt
  110.  
  111. # 3) delete temp files
  112. # rm mails.txt black.txt white.txt
  113.  
  114. # 4) delete debug files
  115. # rm godmail.txt deleted.txt
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement