Python - SMTP

  • 简述

    简单邮件传输协议 (SMTP) 是一种协议,用于处理在邮件服务器之间发送电子邮件和路由电子邮件。
    Python 提供smtplib模块,它定义了一个 SMTP 客户端会话对象,该对象可用于将邮件发送到具有 SMTP 或 ESMTP 侦听器守护程序的任何 Internet 机器。
    SMTP 对象有一个名为的实例方法sendmail,这通常用于完成邮寄消息的工作。它需要三个参数 -
    • 发件人- 带有发件人地址的字符串。
    • 接收者- 字符串列表,每个接收者一个。
    • 消息- 作为字符串的消息,格式为各种 RFC 中指定的格式。
  • 例子

    这是使用 Python 脚本发送一封电子邮件的简单方法。尝试一次 -
    
    #!/usr/bin/python3
    import smtplib
    sender = 'from@fromdomain.com'
    receivers = ['to@todomain.com']
    message = """From: From Person <from@fromdomain.com>
    To: To Person <to@todomain.com>
    Subject: SMTP e-mail test
    This is a test e-mail message.
    """
    try:
       smtpObj = smtplib.SMTP('localhost')
       smtpObj.sendmail(sender, receivers, message)         
       print "Successfully sent email"
    except SMTPException:
       print "Error: unable to send email"
    
    在这里,您在消息中放置了一个基本的电子邮件,使用三引号,注意正确格式化标题。一封电子邮件需要一个From,To, 和一个Subject标题,用空行与电子邮件正文分开。
    要发送邮件,请使用smtpObj连接到本地计算机上的 SMTP 服务器。然后使用sendmail方法以及消息、发件人地址和目标地址作为参数(即使发件人和收件人地址在电子邮件本身内,但这些并不总是用于路由邮件)。
    如果您没有在本地计算机上运行 SMTP 服务器,则可以使用smtplib客户端与远程 SMTP 服务器进行通信。除非您使用网络邮件服务(例如 gmail 或 Yahoo! Mail),否则您的电子邮件提供商必须向您提供您可以提供的外发邮件服务器详细信息,如下所示 -
    
    mail = smtplib.SMTP('smtp.gmail.com', 587)
    
  • 使用 Python 发送 HTML 电子邮件

    当您使用 Python 发送文本消息时,所有内容都被视为简单文本。即使您在文本消息中包含 HTML 标记,它也会显示为简单文本,并且 HTML 标记不会根据 HTML 语法进行格式化。但是,Python 提供了将 HTML 消息作为实际 HTML 消息发送的选项。
    发送电子邮件时,您可以指定 Mime 版本、内容类型和字符集以发送 HTML 电子邮件。

    例子

    以下是将 HTML 内容作为电子邮件发送的示例。尝试一次 -
    
    #!/usr/bin/python3
    import smtplib
    message = """From: From Person <from@fromdomain.com>
    To: To Person <to@todomain.com>
    MIME-Version: 1.0
    Content-type: text/html
    Subject: SMTP HTML e-mail test
    This is an e-mail message to be sent in HTML format
    <b>This is HTML message.</b>
    <h1>This is headline.</h1>
    """
    try:
       smtpObj = smtplib.SMTP('localhost')
       smtpObj.sendmail(sender, receivers, message)         
       print "Successfully sent email"
    except SMTPException:
       print "Error: unable to send email"