How can I send multiple mails parallel with 1 SMTP but at same time

Viewed 30

I want to send bulk email but their are some problems:

  1. my SMTP have limit of 50 mails/hour, so to solve this I created 100 mails.
  2. but the problem now is switching mails after 50 sends and switching recipient each time and also adding time delay of 0.6 seconds in between of each send
  3. and also this is so slow, so I want to send mails parallel like sending 4 mails at a time with 1 SMTP.

How can I send mails parallel and also how to switch recipient and SMTP?

I created a program but not working good

import time
import threading
t = time.time()

file1 = open('100_leads.txt', 'r')
line1 = file1.readlines()
file2 = open('smtp.txt', 'r')
line2 = file2.readlines()

total_leads = len(line1) + 1
count = 1
receiver_number = 0
sender_number = 0

def email1(sender,receiver):
    print(f"sending mail to {receiver} by {sender}\n{count}\n")
    count += 1
    time.sleep(0.6)

def email2(sender,receiver):
    print(f"sending mail to {receiver} by {sender}\n{count}\n")
    count += 1
    time.sleep(0.6)

def email3(sender,receiver):
    print(f"sending mail to {receiver} by {sender}\n{count}\n")
    count += 1
    time.sleep(0.6)
    
def email4(sender,receiver):
    print(f"sending mail to {receiver} by {sender}\n{count}\n")
    count += 1
    time.sleep(0.6)

for i in range(1,total_leads):
    if count%50 == 0:
        sender_number += 1
        print(f"EMAIL CHANGED TO {line2[sender_number]}\n\n")
    else:
        t1 = threading.Thread(target=email1, args=(line2[sender_number],line1[receiver_number]))
        t2 = threading.Thread(target=email2, args=(line2[sender_number],line1[receiver_number+1]))
        t3 = threading.Thread(target=email3, args=(line2[sender_number],line1[receiver_number+2]))
        t4 = threading.Thread(target=email4, args=(line2[sender_number],line1[receiver_number+3]))
        t1.start()
        t2.start()
        t3.start()
        t4.start()
        receiver_number += 4

        # email(line2[sender_number],line1[receiver_number])
        # receiver_number += 1

file1.close()
file2.close()
print("time taken: ",time.time()-t)
print("SENDING OPERATION COMPLETED!!!")
0 Answers
Related