文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python 发送邮件的三种方法

2024-11-28 14:58

关注

1. 使用smtplib模块发送邮件

smtplib 是 Python 标准库中的一个模块,用于发送邮件。它提供了 SMTP(Simple Mail Transfer Protocol)协议的实现。下面我们通过一个简单的例子来学习如何使用 smtplib 发送邮件。

示例代码:

import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 邮件发送方和接收方
sender = 'your_email@example.com'
receiver = 'recipient_email@example.com'

# 邮件内容
message = MIMEText('这是一封测试邮件', 'plain', 'utf-8')
message['From'] = Header("发件人", 'utf-8')
message['To'] = Header("收件人", 'utf-8')

# 邮件主题
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')

# 连接 SMTP 服务器并发送邮件
try:
    smtp_obj = smtplib.SMTP('smtp.example.com', 25)  # SMTP服务器地址和端口
    smtp_obj.login('your_email@example.com', 'your_password')  # 登录SMTP服务器
    smtp_obj.sendmail(sender, receiver, message.as_string())  # 发送邮件
    print("邮件发送成功")
except smtplib.SMTPException as e:
    print("Error: 无法发送邮件", e)
finally:
    smtp_obj.quit()

代码解释

2. 使用yagmail库发送邮件

yagmail 是一个简化了 smtplib 和 email 库使用的第三方库,使得发送邮件更加方便。下面我们来看一个使用 yagmail 发送邮件的例子。

安装yagmail:

pip install yagmail

示例代码:

import yagmail

# 邮件发送方和接收方
sender = 'your_email@example.com'
receiver = 'recipient_email@example.com'

# 邮件内容
subject = 'Python yagmail 邮件测试'
body = '这是一封使用 yagmail 发送的测试邮件'

# 创建 yagmail.SMTP 对象
yag = yagmail.SMTP(user=sender, password='your_password', host='smtp.example.com')

# 发送邮件
try:
    yag.send(to=receiver, subject=subject, contents=body)
    print("邮件发送成功")
except Exception as e:
    print("Error: 无法发送邮件", e)

代码解释:

3. 使用email库发送邮件

email 库是 Python 标准库中的一个模块,用于构建复杂的邮件内容。结合 smtplib,可以发送包含附件、HTML 内容等复杂邮件。下面是一个使用 email 库发送带附件的邮件的例子。

示例代码:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders

# 邮件发送方和接收方
sender = 'your_email@example.com'
receiver = 'recipient_email@example.com'

# 创建一个 MIMEMultipart 对象
msg = MIMEMultipart()

# 设置邮件头部信息
msg['From'] = sender
msg['To'] = receiver
msg['Subject'] = 'Python email 库邮件测试'

# 添加邮件正文
body = '这是一封使用 email 库发送的测试邮件,包含附件'
msg.attach(MIMEText(body, 'plain'))

# 添加附件
filename = "example.txt"
attachment = open("path/to/example.txt", "rb")

part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', f'attachment; filename={filename}')
msg.attach(part)

# 连接 SMTP 服务器并发送邮件
try:
    smtp_obj = smtplib.SMTP('smtp.example.com', 25)
    smtp_obj.login(sender, 'your_password')
    smtp_obj.sendmail(sender, receiver, msg.as_string())
    print("邮件发送成功")
except smtplib.SMTPException as e:
    print("Error: 无法发送邮件", e)
finally:
    smtp_obj.quit()

代码解释:

实战案例:自动化发送每日天气报告

假设我们需要每天自动发送一封包含当日天气报告的邮件给指定的收件人。我们可以结合 requests 库获取天气数据,并使用 smtplib 或 yagmail 发送邮件。

获取天气数据:

import requests

def get_weather(city):
    url = f"http://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q={city}"
    response = requests.get(url)
    data = response.json()
    return data['current']['temp_c'], data['current']['condition']['text']

temperature, condition = get_weather('New York')
print(f"当前温度: {temperature}°C, 天气状况: {condition}")

发送邮件:

import yagmail

def send_weather_report(email, city):
    temperature, condition = get_weather(city)
    body = f"亲爱的用户,\n\n这是您订阅的每日天气报告。\n\n城市: {city}\n当前温度: {temperature}°C\n天气状况: {condition}\n\n祝您一天愉快!"

    yag = yagmail.SMTP(user='your_email@example.com', password='your_password', host='smtp.example.com')
    try:
        yag.send(to=email, subject=f'{city} 每日天气报告', contents=body)
        print("邮件发送成功")
    except Exception as e:
        print("Error: 无法发送邮件", e)

send_weather_report('recipient_email@example.com', 'New York')

代码解释:

总结

今天我们学习了使用 Python 发送邮件的三种方法:smtplib 模块、yagmail 库和 email 库。每种方法都有其特点和适用场景:

通过实战案例,我们还学会了如何结合第三方 API 自动化发送每日天气报告。

来源:手把手PythonAI编程内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯