import urllib.parse
import subprocess
#import threading
import requests
#import asyncio
import json
import time
#from concurrent.futures import ThreadPoolExecutor

with open(".txt") as f:
    mails = f.read().splitlines()

subprocess.Popen("tor")
time.sleep(5)

 = []
 = []
 = []

proxies = {"http": "socks5://127.0.0.1:9050", "https": "socks5://127.0.0.1:9050"}

res = requests.get("http://inet-ip.info/ip", proxies=proxies)
print(res.text)
print()

def main(mails, retry=5):

    for mail in mails:

        for i in range(retry):

            try:

                mail = mail.strip("\n")
                r = requests.get(
                    ""
                    + str(urllib.parse.quote(mail)),
                    proxies=proxies,
                )
                jsondata = json.loads(r.text)
                result = jsondata["valid"]

                if result == False:
                    print(f"使用済み : " + str(mail))
                    使用済み.append("使用済み : " + str(mail) + "\n")

                    import re
                    import dns.resolver
                    import socket
                    import smtplib

                    mail_address = mail

                    match = re.match(
                        "[A-Za-z0-9._+-]+@[A-Za-z]+.[A-Za-z]", mail_address
                    )
                    if match == None:
                        print("形式エラー")

                    mail_domain = re.search("(.*)(@)(.*)", mail_address).group(3)
                    try:
                        records = dns.resolver.query(mail_domain, "MX")
                        mxRecord = records[0].exchange
                        mxRecord = str(mxRecord)
                        print(mxRecord)
                    except Exception as e:
                        print("DNSが存在しない\n")

                    local_host = socket.gethostname()

                    server = smtplib.SMTP(timeout=0.5)
                    server.set_debuglevel(0)

                    try:
                        server.connect(mxRecord)
                        server.helo(local_host)
                        server.mail("test@example.com")
                        code, message = server.rcpt(str(mail_address))
                        server.quit()

                        if code == 250:
                            print("\n")
                        else:
                            print("\n")
                            取得可能.append(f" : " + str(mail_address) + "\n")
                    except Exception as e:
                        print(e)
                        print()

                elif result == True:
                    print(f" : " + str(mail) + "\n")
                    使用可能.append(" : " + str(mail) + "\n")

            except Exception as e:
                print(e)
                print("Tor再起動")
                subprocess.run("taskkill /IM tor.exe /F")
                subprocess.Popen("tor")
                time.sleep(5)
                res = requests.get("http://inet-ip.info/ip", proxies=proxies)
                print(res.text)
                pass

            else:
                break
        else:
            print("5回試行しましたが実行できませんでした。")
            subprocess.run("taskkill /IM tor.exe /F")
            exit()

main(mails, retry=5)

#threads = []

#thread = threading.Thread(target=main, args=(mails))
#thread.start()

#with ThreadPoolExecutor(max_workers=16) as pool:
#    threads = [res for res in pool.map(main, mails)]

#async def asynchronous_process(mails):
#    loop = asyncio.get_event_loop()
#    futures = [loop.run_in_executor(None, main, mail) for mail in mails]
#    await asyncio.gather(*futures)
#asyncio.run(asynchronous_process(mails))

with open(".txt", "w") as f:
    f.write("\n".join())

with open(".txt", "w") as f:
    f.write("\n".join())

with open(".txt", "w") as f:
    f.write("\n".join())

subprocess.run("taskkill /IM tor.exe /F")

input("Enterを入力するとウィンドウを閉じます。")
