Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- ####################################################################
- # /TR 2014-01-05 GPLv2
- ####################################################################
- db_name="database_name"
- db_user="db_user"
- db_pass="db_password"
- db_table="newsletter_table"
- # alle mails aus der datenbank raus holen...
- function getmails() {
- echo "use $db_name; select email from $db_table;" \
- | mysql --skip-column-names -u$db_user -p$db_pass
- }
- # alle mx server für eine bestimmte domain abfragen...
- function dnsmx() {
- domain="$1"
- # via dig von bind
- dig mx $domain|grep "^$domain."|tr -s '\t' ' ' \
- | cut -d' ' -f6|sed -e 's/.$//g'
- # via dnsmx von djb, oder dig von bind
- # dnsmx $domain
- }
- # eine bestimmte mail aus der tabelle entfernen
- function delete_email() {
- email="$1"
- echo $email >> deleted.txt
- # dieses return auskommentieren, wenn die emails wirklich aus
- # der datenbank entfernt werden sollen
- return
- # achtung, hier wird nun wirklich gelöscht!
- echo "use $db_name;
- delete from $db_table where email='$email';" \
- | mysql -u$db_user -p$db_pass
- }
- # versuche den mx zu connecten
- # -> wenn das nicht klappt:
- # -> lösche die email aus der datenbank
- # -> setze den mx auf eine blacklist
- # -> wenn connect in ordnung war, ab auf die whitelist
- function checkmail() {
- mx=$1
- email=$2
- echo -e "\ncheckmail mx=$mx mail=$email"
- # prüfe, ob mx der email in whitelist steht
- while read wl; do
- if [ "$mx" = "$wl" ]; then
- echo "mail $email (mx $mx) is on white list, skipping..."
- echo $email >> goodmail.txt
- return
- fi
- done < white.txt
- # prüfe, ob mx der email in blacklist steht
- while read bl; do
- if [ "$mx" = "$bl" ]; then
- echo "mail $email (mx $mx) is on black list, deleting..."
- delete_email "$email"
- return
- fi
- done < black.txt
- # wenn ein connect zum mx in 6 sekunden erfolgreich ist,
- # nehmen wir an, das der server in ordnung ist
- timeout 6 bash -c "cat < /dev/null > /dev/tcp/$mx/25"
- if [ $? != 0 ]; then
- # can not connect, so the email seems wrong!!
- echo "can not connect to mx $mx of email $email, deleting..."
- echo $mx >> black.txt
- delete_email "$email"
- return
- fi
- echo $email >> goodmail.txt
- echo $mx >> white.txt
- }
- # 1) alle zu prüfenden mails aus der datenbank exportieren...
- getmails > mails.txt
- # resette black und white list
- echo -n > white.txt
- echo -n > black.txt
- # 2) checke für alle mails den mx
- while read email; do
- domain=`echo $email|cut -d'@' -f2`
- mx=`dnsmx $domain|head -n 1`
- if [ -z "$mx" ]; then
- # lösche mails mit invalid mx
- echo "no mx for email $email, deleting..."
- delete_email "$email"
- continue
- fi
- # connect prüfen...
- checkmail "$mx" "$email"
- done < mails.txt
- # 3) delete temp files
- # rm mails.txt black.txt white.txt
- # 4) delete debug files
- # rm godmail.txt deleted.txt
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement