daily pastebin goal
43%
SHARE
TWEET

Untitled

a guest Dec 29th, 2016 81 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top