Skip to content

Instantly share code, notes, and snippets.

@marcelloinfoweb
Last active December 28, 2023 17:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marcelloinfoweb/533da1490c13069d79bbbb73a62547de to your computer and use it in GitHub Desktop.
Save marcelloinfoweb/533da1490c13069d79bbbb73a62547de to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
def verificar_argumentos():
"""
Verifica se todos os argumentos necessários foram fornecidos.
"""
if len(sys.argv) != 4:
print("Uso: script.py servidor_origem servidor_destino arquivo")
sys.exit(1)
def ler_arquivo(arquivo):
"""
Tenta abrir o arquivo e ler as linhas.
Args:
arquivo (str): O caminho do arquivo a ser lido.
Returns:
list: Uma lista de linhas do arquivo.
"""
try:
with open(arquivo, 'r') as f:
return f.readlines()
except IOError:
print(f"Não foi possível abrir o arquivo: {arquivo}")
sys.exit(1)
def migrar_emails(linhas, servidor_origem, servidor_destino):
"""
Percorre cada linha do arquivo e tenta migrar os emails.
Args:
linhas (list): Uma lista de linhas do arquivo.
servidor_origem (str): O servidor de origem.
servidor_destino (str): O servidor de destino.
Returns:
tuple: Um tuple contendo o número de emails migrados com sucesso, o número de falhas e uma lista de emails que falharam na migração.
"""
sucesso = 0
falha = 0
falhas_emails = []
for linha in linhas:
try:
email, senha, email2, senha2 = linha.strip().split()
except ValueError:
print(f"Linha mal formatada: {linha.strip()}")
continue
comando = f"imapsync --host1 {servidor_origem} --user1 {email} --password1 \"{senha}\" --host2 {servidor_destino} --user2 {email2} --password2 \"{senha2}\" --ssl1 --ssl2 --idatefromheader"
resultado = os.system(comando)
if resultado == 0:
print(f"Email {email} migrado com sucesso!")
sucesso += 1
else:
print(f"Erro ao migrar o email: {email}. Código de erro: {resultado}")
falha += 1
falhas_emails.append(email)
return sucesso, falha, falhas_emails
def imprimir_resultados(sucesso, falha, falhas_emails):
"""
Imprime o resumo dos resultados e os emails que falharam na migração.
Args:
sucesso (int): O número de emails migrados com sucesso.
falha (int): O número de falhas na migração.
falhas_emails (list): Uma lista de emails que falharam na migração.
"""
print(f"\nResumo da migração:\nEmails migrados com sucesso: {sucesso}\nFalhas na migração: {falha}")
if falhas_emails:
print("\nEmails que falharam na migração:")
for email in falhas_emails:
print(email)
def main():
"""
A função principal que executa todas as outras funções.
"""
verificar_argumentos()
servidor_origem = sys.argv[1]
servidor_destino = sys.argv[2]
arquivo = sys.argv[3]
linhas = ler_arquivo(arquivo)
sucesso, falha, falhas_emails = migrar_emails(linhas, servidor_origem, servidor_destino)
imprimir_resultados(sucesso, falha, falhas_emails)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment