2017-05-06 17 views
-1

私は電子メールあたり約30kbの添付ファイルで約250の電子メールを送信することになっています。各添付ファイルは受信者に固有です。私の下のコードはうまくいきますが、遅すぎると感じていますが、7秒おきにメールを送信し、250のメールに29分かかります。明らかにそれを平行にすることは事を一緒に動かすのに役立つでしょう、私は自分のコードを改善できるかどうかについて興味があります。このような大きな成果をもたらしてはならないので、私は目標とする添付ファイルと電子メールをまだ実装していません。Python - バルク電子メールを送信

import os,datetime 
def send_mail(recipient, subject, message, files=None): 

    import smtplib,email,os 
    from email.mime.multipart import MIMEMultipart 
    from email.mime.text import MIMEText 
    from email.mime.application import MIMEApplication 
    from os.path import basename 

    username = "myemail" 
    password ="mypass" 

    mailServer = smtplib.SMTP('smtp-mail.outlook.com', 587) 
    mailServer.ehlo() 
    mailServer.starttls() 
    mailServer.ehlo() 
    mailServer.login(username, password) 

    for i in range(1,15): 
     try: 
      msg = MIMEMultipart() 
      msg['From'] = username 
      msg['To'] = recipient 
      msg['Subject'] = subject 
      msg.attach(MIMEText(message)) 
      for f in files or []: 
       with open(f, "rb") as fil: 
        part = MIMEApplication(
         fil.read(), 
         Name=basename(f) 
        ) 
        part['Content-Disposition'] = 'attachment; filename="%s"' % basename(f) 
        msg.attach(part) 


      print('sending mail to ' + recipient + ' on ' + subject) 


      mailServer.sendmail(username, recipient, msg.as_string()) 


     except error as e: 
      print(str(e)) 

    mailServer.close() 

print(datetime.datetime.now()) 
send_mail('recipent, 'Sent using Python', 'May the force be with you.',["colours.xls"]) 
print(datetime.datetime.now()) 
+1

なぜ14回ループするのですか?各ループごとに異なるものは得られないようです。 –

+0

こんにちは@PeterWood、上記のように、私はパフォーマンスの差をあまりにも大きくするべきではないので、添付ファイルと電子メールをまだターゲットにしていません。私は後でそれらを差し込むことができます。最初は、電子メールを送信するときにうまくいくものを欲しいですし、スクリプトをパラメータ化します – Krishn

答えて

-1

大部分の時間を消費するコードをプロファイルする必要があります。 cProfile + snakevizを使用することをおすすめします。

python -m cProfile -o program.prof my_program.py 
snakeviz program.prof 
関連する問題