import requests
import mysql.connector
import time
import logging
import json
# Настройка логирования
logging.basicConfig(filename='email_validation.log', level=logging.INFO,
format='%(asctime)s: %(message)s')
# Подключение к базе данных XenForo
db = mysql.connector.connect(
host="localhost",
user="user",
password="password",
database="database"
)
cursor = db.cursor()
# Получение списка адресов электронной почты с их статусами
cursor.execute("SELECT user_id, email, user_state FROM xf_user")
emails = cursor.fetchall()
# Загрузка уже обработанных ID
with open("processed_ids.txt", "a+") as f:
f.seek(0)
processed_ids = set(f.read().splitlines())
# Функция для проверки валидности email через API SMTP.BZ
def check_email(email, api_key):
url = f"https://api.smtp.bz/v1/check/email/{email}"
headers = {'Authorization': api_key}
response = requests.get(url, headers=headers)
if response.status_code == 200:
try:
response_data = response.json()
return response_data.get('result')
except json.decoder.JSONDecodeError:
logging.error(f"Ошибка декодирования JSON для {email}: {response.text}")
return False
else:
# Логирование всех ошибок с подробной информацией
logging.error(f"Ошибка {response.status_code} для {email}. URL: {url}, Заголовки: {headers}, Тело ответа: {response.text}")
return False
# Ваш ключ API SMTP.BZ
api_key = "API"
# Интервал проверки в секундах
check_interval = 3
# Проверка и обновление статусов в базе данных
for user_id, email, user_state in emails:
if str(user_id) in processed_ids:
logging.info(f"Пользователь с ID {user_id} уже обработан")
continue
is_valid = check_email(email, api_key)
if is_valid and user_state == 'email_bounce':
# Если пользователь валиден и имеет статус email_bounce, изменить статус на 'активный'
update_query = "UPDATE xf_user SET user_state = 'valid' WHERE user_id = %s"
cursor.execute(update_query, (user_id,))
logging.info(f"Статус пользователя с ID {user_id} и почтой {email} изменен на 'активный'")
print(f"Статус пользователя с ID {user_id} и почтой {email} изменен на 'активный'")
elif not is_valid:
# Если пользователь не валиден, обновить статус на email_bounce
update_query = "UPDATE xf_user SET user_state = 'email_bounce' WHERE user_id = %s"
cursor.execute(update_query, (user_id,))
logging.info(f"Статус пользователя с ID {user_id} и почтой {email} обновлен на 'email_bounce'")
print(f"Статус пользователя с ID {user_id} и почтой {email} обновлен на 'email_bounce'")
# Запись ID в файл обработанных
with open("processed_ids.txt", "a") as f:
f.write(f"{user_id}\n")
# Сохранение изменений после каждой обработки
db.commit()
time.sleep(check_interval)
# Закрытие подключения
cursor.close()
db.close()