python中smtplib使用注意點

來源:互聯網
上載者:User
使用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')
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.