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