Pythonでsmtplibを使う時の注意点

高洛峰
リリース: 2016-10-18 13:38:41
オリジナル
1618 人が閲覧しました

smtplib を使用する場合、開いたサーバーの接続を閉じるのではなく、quit メソッドを使用して閉じることをお勧めします。

server.quit() #好
#server.close() #不好
ログイン後にコピー

なぜなら、quit は接続を閉じるだけでなく、セッションも閉じるからです。このセッションは接続全体に及ぶため、このセッションでバウンスが発生すると、後続のレターで奇妙な SMTP プロトコル エラーが発生します。

smtplib を使用する場合、サーバーが毎回再オープンされても、DNS は 1 回だけ解決されます。このように、負荷分散に使用できるドメイン名の下に複数の smtp サーバーがある場合、smtplib を使用する Python プログラムは、常に 1 台のマシンを使用すると負荷分散ができず、スケーラビリティに影響します。この目的を達成するために、メール サーバーのドメイン名を個別に分析してすべてのマシン名を取得し、アプリケーション層の負荷分散を行うために接続する SMTP サーバーをランダムに選択するという考えがあります。 Maoxing の提供に感謝して、次のコードの使用を検討できます:

class smtp_server_factory(object):
    def _get_addr_from_name(self, hostname):
        addrs = socket.getaddrinfo(hostname, smtplib.SMTP_PORT, 0, socket.SOCK_STREAM)
        return [addr[4][0] for addr in addrs]
  
    def get_server(self, hostname):
        addrs = self._get_addr_from_name(hostname)
        random.shuffle(addrs)
        for addr in addrs:
            try:
                smtp_server = smtplib.SMTP(addr)
            except Exception, e:
                pass
            else:
                print addr
                return smtp_server
        return None
ログイン後にコピー

# Use

server=smtp_server_factory().get_server('xxx-mail.qq.com')
ログイン後にコピー


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!