python中smtplib利用留意点
当前位置:以往代写 > Python教程 >python中smtplib利用留意点
2019-06-14

python中smtplib利用留意点

python中smtplib利用留意点

利用smtplib时,打开的server,最好利用quit要领来封锁毗连,而不是close。

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

因为quit不只仅会封锁毗连,还会封锁session。这个session会超过毗连,并且当这个session中有退信产生时,后续发出的信件会爆出奇怪的SMTP协议错误。

利用smtplib时,即便每次都从头open server,对dns的理会也只有一次,这样当一个域名下有多个smtp server原来可以用于负载平衡的情况下,利用smtplib的python措施就老是利用一台呆板,没法负载平衡,影响了伸缩性。为此,想到的步伐是 单独对邮件处事器域名举办理会,获得所有的呆板名,然后随机选一台smtp server来毗连,做一个应用层的负载平衡。可以思量利用下面这段代码,感激茂兴的提供:

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

#利用

server=smtp_server_factory().get_server('xxx-mail.qq.com')

    关键字:

在线提交作业