Python教程-使用SMTP发送Python邮件
Simple Mail Transfer Protocol (SMTP) 用作处理使用Python进行电子邮件传输的协议。它用于在电子邮件服务器之间路由电子邮件。它是一个应用层协议,允许用户向另一个用户发送邮件。收件人使用 POP(邮局协议) 和 IMAP(Internet消息访问协议) 协议检索电子邮件。
当服务器侦听来自客户端的TCP连接时,它会在端口587上初始化连接。
Python提供了一个 smtplib 模块,该模块定义了一个用于向互联网主机发送电子邮件的SMTP客户端会话对象。为此,我们需要使用导入语句导入 smtplib 模块。
$ import smtplib
SMTP对象用于电子邮件传输。以下语法用于创建smtplib对象。
import smtplib
smtpObj = smtplib.SMTP(host, port, local_hostname)
它接受以下参数。
- host: 运行SMTP服务器的计算机的主机名。在这里,我们可以指定服务器的IP地址,比如localhost。这是一个可选参数。
- port: 主机机器监听SMTP连接的端口号。默认情况下为25。
- local_hostname: 如果SMTP服务器在本地计算机上运行,我们可以提到本地计算机的主机名。
SMTP对象的sendmail() 方法用于将邮件发送到所需的机器。语法如下。
smtpObj.sendmail(sender, receiver, message)
示例
#!/usr/bin/python3
import smtplib
sender_mail = 'sender@fromdomain.com'
receivers_mail = ['reciever@todomain.com']
message = """From: From Person %s
To: To Person %s
Subject: Sending SMTP e-mail
This is a test e-mail message.
"""%(sender_mail,receivers_mail)
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender_mail, receivers_mail, message)
print("Successfully sent email")
except Exception:
print("Error: unable to send email")
从Gmail发送电子邮件
有些情况下,电子邮件是使用Gmail的SMTP服务器发送的。在这种情况下,我们可以将Gmail作为SMTP服务器传递,而不是使用本地主机和端口587。
使用以下语法。
$ smtpObj = smtplib.SMTP("gmail.com", 587)
在这里,我们需要使用Gmail用户名和密码登录Gmail帐户。为此,smtplib提供了login()方法,该方法接受发件人的用户名和密码。
如果您使用Gmail,这可能会导致Gmail要求您允许不太安全的应用程序访问。为使其正常工作,您需要临时启用此选项。
考虑以下示例。
示例
#!/usr/bin/python3
import smtplib
sender_mail = 'sender@gmail.com'
receivers_mail = ['reciever@gmail.com']
message = """From: From Person %s
To: To Person %s
Subject: Sending SMTP e-mail
This is a test e-mail message.
"""%(sender_mail,receivers_mail)
try:
password = input('Enter the password');
smtpObj = smtplib.SMTP('gmail.com',587)
smtpobj.login(sender_mail,password)
smtpObj.sendmail(sender_mail, receivers_mail, message)
print("Successfully sent email")
except Exception:
print("Error: unable to send email")
在电子邮件中发送HTML
我们可以通过指定MIME版本、内容类型和字符集来格式化消息中的HTML,以便发送HTML内容。
考虑以下示例。
示例
#!/usr/bin/python3
import smtplib
sender_mail = 'sender@fromdomain.com'
receivers_mail = ['reciever@todomain.com']
message = """From: From Person %s
To: To Person %s
MIME-Version:1.0
Content-type:text/html
Subject: Sending SMTP e-mail
<h3>Python SMTP</h3>
<strong>This is a test e-mail message.</strong>
"""%(sender_mail,receivers_mail)
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender_mail, receivers_mail, message)
print("Successfully sent email")
except Exception:
print("Error: unable to send email")