- Совместимость с XenForo
- 2.0
- 2.1
- 2.2
Скрипт на Python, для запуска внутри VPS/VDS
Заполняем данные от своей базы данных, а также пишем ключ от api сервиса smtp.bz
Запускаем, и ждем.
Не валидным адресам ставится статус email_bounce
Целью была, проверка всех аккаунтов, перед массовой рассылкой почт.
Настройки тут:
и тут:
Возможно потребуется дополнительно установить
pip install requests mysql-connector-python
Заполняем данные от своей базы данных, а также пишем ключ от api сервиса smtp.bz
Запускаем, и ждем.
Не валидным адресам ставится статус email_bounce
Целью была, проверка всех аккаунтов, перед массовой рассылкой почт.
Настройки тут:
Python:
# Подключение к базе данных XenForo
db = mysql.connector.connect(
host="localhost",
user="rootx",
password="password",
database="database"
)
и тут:
Python:
# Ваш ключ API SMTP.BZ
api_key = "key"
Python:
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()
# Используем ключ 'result' для определения валидности
return response_data.get('result')
except json.decoder.JSONDecodeError:
logging.error(f"Ошибка декодирования JSON для {email}: {response.text}")
return False
else:
logging.error(f"Ошибка запроса для {email}: Код состояния {response.status_code}")
return False
# Ваш ключ API SMTP.BZ
api_key = "key"
# Интервал проверки в секундах
check_interval = 2
# Проверка и обновление статусов в базе данных
for user_id, email, user_state in emails:
if str(user_id) in processed_ids or user_state == 'email_bounce':
logging.info(f"Пользователь с ID {user_id} и статусом {user_state} пропущен")
continue
is_valid = check_email(email, api_key)
logging.info(f"Проверка {email}: {'валиден' if is_valid else 'не валиден'}")
print(f"Проверка {email}: {'валиден' if is_valid else 'не валиден'}")
if not is_valid:
# Обновление статуса пользователя в базе данных
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_bounce'")
print(f"Статус пользователя с ID {user_id} обновлен на '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()
Возможно потребуется дополнительно установить
pip install requests mysql-connector-python