Heim >Backend-Entwicklung >Python-Tutorial >Zu beachtende Punkte bei der Verwendung von smtplib in Python

Zu beachtende Punkte bei der Verwendung von smtplib in Python

高洛峰
高洛峰Original
2016-10-18 13:38:411678Durchsuche

Bei Verwendung von smtplib verwenden Sie am besten die Quit-Methode, um die Verbindung des geöffneten Servers zu schließen, anstatt sie zu schließen.

server.quit() #好
#server.close() #不好

Weil durch Beenden nicht nur die Verbindung, sondern auch die Sitzung geschlossen wird. Diese Sitzung erstreckt sich über die gesamte Verbindung, und wenn in dieser Sitzung ein Bounce auftritt, treten in den nachfolgenden Nachrichten seltsame SMTP-Protokollfehler auf.

Bei Verwendung von smtplib wird der DNS nur einmal aufgelöst, selbst wenn der Server jedes Mal erneut geöffnet wird. Auf diese Weise kann er in einer Lastausgleichsumgebung verwendet werden, wenn mehrere SMTP-Server unter einem Domänennamen vorhanden sind . Mit Python von smtplib Das Programm verwendet immer eine Maschine und es gibt keine Möglichkeit zum Lastenausgleich, was sich auf die Skalierbarkeit auswirkt. Zu diesem Zweck besteht die Idee darin, den Domänennamen des Mailservers separat zu analysieren, um alle Maschinennamen zu erhalten, und dann zufällig einen SMTP-Server auszuwählen, mit dem eine Verbindung hergestellt werden soll, um einen Lastausgleich auf Anwendungsebene durchzuführen. Sie können die Verwendung des folgenden Codes in Betracht ziehen, danke an Maoxing für die Bereitstellung:

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')


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn