ユースケースが一度に1つのメッセージを送信する場合、私にとって最も正しいと思われる解決策は、メッセージごとに新しいSMTPセッションを作成することです。
from smtplib import SMTP
smtp = SMTP('smtp.server.com')
def notifyUser(smtp, smtp_user, smtp_password, from_email, to_email, msg):
smtp.login(smtp_user, smtp_password)
smtp.sendmail(from_email, to_email, msg.as_string())
smtp.quit()
SMTPサーバーで自分自身を認証する必要がない場合(一般的なケース)、これはさらに単純化して次のようになります。
from smtplib import SMTP
smtp = SMTP('smtp.server.com')
def notifyUser(smtp, from_email, to_email, msg):
smtp.sendmail(from_email, to_email, msg.as_string())
smtp.quit()
一度に複数のメッセージを送信することが一般的であり、メッセージのグループに同じSMTPセッションを再利用することでこのケースを最適化する場合(SMTPにログインする必要がない場合は、上記のように簡略化できます)サーバ):
from smtplib import SMTP
smtp = SMTP('smtp.server.com')
def notifyUsers(smtp, smtp_user, smtp_password, from_to_msgs):
"""
:param from_to_msgs: iterable of tuples with `(from_email, to_email, msg)`
"""
smtp.login(smtp_user, smtp_password)
for from_email, to_email, msg in from_to_msgs:
smtp.sendmail(from_email, to_email, msg.as_string())
smtp.quit()