python实现发送邮件功能

preview
需积分: 0 0 下载量 120 浏览量 更新于2020-09-21 收藏 187KB PDF 举报
在Python编程中,发送电子邮件是一项常见的任务,可以用于自动化通知、报告或数据传输。本教程将详细介绍如何使用Python的smtplib和MIMEText模块来实现这个功能。 smtplib是Python标准库中的一个模块,它提供了与简单邮件传输协议(SMTP)交互的功能,允许程序发送电子邮件。MIMEText模块则用于创建符合MIME标准的邮件消息,MIME是一种扩展的电子邮件标准,用于定义非ASCII字符集和其他类型的数据如何被编码为邮件。 确保已经安装了这两个模块,因为它们是Python的标准库,通常在安装Python时就已经包含。 发送邮件的基本步骤如下: 1. 导入所需的模块: ```python import smtplib from email.mime.text import MIMEText ``` 2. 创建邮件内容: 使用MIMEText类创建邮件主体,设置邮件的主题、发件人和收件人。 ```python msg = MIMEText(content) msg['Subject'] = title msg['From'] = username msg['To'] = recv ``` 3. 连接SMTP服务器: 根据邮件服务商的不同,需要设置不同的SMTP服务器地址和端口号。例如,对于163邮箱,SMTP服务器是'smtp.163.com',默认端口是25;对于QQ邮箱,SMTP服务器是'smtp.qq.com',默认端口是456。 4. 登录邮箱并发送邮件: 使用smtplib的SMTP或SMTP_SSL类连接SMTP服务器,然后使用login()方法登录邮箱(使用授权码而非登录密码),最后使用sendmail()方法发送邮件。 ```python smtp = smtplib.SMTP(mail_host, port) smtp.login(username, passwd) smtp.sendmail(username, recv, msg.as_string()) smtp.quit() ``` 在实际应用中,需要注意以下几点: - **授权码**:许多邮箱服务提供商(如163邮箱和QQ邮箱)要求使用授权码而不是常规的登录密码进行SMTP身份验证。授权码可以在邮箱的设置中生成,以提高安全性。 - **错误处理**:在发送邮件时,应考虑可能遇到的网络问题或认证错误,通过try-except语句捕获异常并进行适当处理。 - **多接收者**:如果邮件需要发送给多个收件人,可以在`msg['To']`字段中用逗号分隔他们的电子邮件地址。 - **SSL/TLS安全连接**:某些邮件服务可能要求使用SSL或TLS加密连接,如QQ邮箱使用的是SMTP_SSL。这可以通过在SMTP类的初始化时指定`use_ssl=True`或`SMTP_SSL`类来实现。 下面是一个使用163邮箱发送邮件的完整示例: ```python def send_mail_163(username, passwd, recv, title, content): msg = MIMEText(content) msg['Subject'] = title msg['From'] = username msg['To'] = recv smtp = smtplib.SMTP('smtp.163.com', 25) smtp.login(username, passwd) smtp.sendmail(username, recv, msg.as_string()) smtp.quit() email_user = 'your_163_email@example.com' email_pwd = 'your_163_auth_code' maillist = 'recipient_email@example.com' title = 'Test Email Title' content = 'This is the content of your email.' send_mail_163(email_user, email_pwd, maillist, title, content) ``` 同样,以下是使用QQ邮箱发送邮件的示例: ```python def send_mail_qq(username, passwd, recv, title, content): msg = MIMEText(content) msg['Subject'] = title msg['From'] = username msg['To'] = recv smtp = smtplib.SMTP_SSL('smtp.qq.com', 465) smtp.login(username, passwd) smtp.sendmail(username, recv, msg.as_string()) smtp.quit() email_user = 'your_qq_email@example.com' email_pwd = 'your_qq_auth_code' maillist = 'recipient_email@example.com' title = 'Test Email Title' content = 'This is the content of your email.' send_mail_qq(email_user, email_pwd, maillist, title, content) ``` 通过以上代码,你可以理解如何使用Python的smtplib和MIMEText模块来发送邮件。这个功能在自动化脚本、Web应用或其他需要发送通知的场景中非常实用。在实际应用中,你可能还需要考虑添加附件、设置HTML格式的邮件内容、处理回复和抄送等功能,这些都可以通过扩展上述代码来实现。