如何用python发送接收邮件

电子说

1.3w人已加入

描述

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

Python发送邮件比较简单,掌握两个自带库 smtplib、email 即可,smtplib 负责发送邮件,email 负责构造邮件(邮件内容,主题,收件人,抄送人等)。

python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

MIMEText用于电子邮件正文

MIMEMultipart用于电子邮件结构

MIMEApplication用于在电子邮件中添加二进制数据(如文件附件)

MIMEImage用于图片

 

import smtplib
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

 

1.发送邮件(可带附件)

下面是一个使用Python中的smtplib库发送电子邮件的示例代码。

 

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

# 设置发送邮件的信息
sender_email = 'xxx@qq.com'    # 发件人邮箱账号
sender_password = 'xxx'        # 发件人邮箱授权码
receiver_email = 'xxx@qq.com'  # 收件人邮箱账号
subject = 'This is a test email by 数字ICer'      # 邮件的主题

smtp_server = 'smtp.qq.com'  #qq邮箱的SMTP服务器
smtp_port = 465              #qq邮箱的SMTP服务器端口465

def send_email():
    ret=True
    try:
           #创建一个multipart的邮件对象
           msg = MIMEMultipart()
           msg['From'] = sender_email
           msg['To'] = receiver_email
           msg['Subject'] = subject

           #添加邮件正文
           body = 'Hello, this is a test email.'
           msg.attach(MIMEText(body, 'plain'))

           # 添加附件
#           filename = 'attachment.pdf'
#           with open(filename, 'rb') as f:
#               attachment = MIMEApplication(f.read(), _subtype='pdf')
#               attachment.add_header('Content-Disposition', 'attachment', filename=filename)
#               msg.attach(attachment)
#
           # 发送邮件
           with smtplib.SMTP_SSL(smtp_server, smtp_port) as smtp:
               smtp.login(sender_email, sender_password)
               smtp.sendmail(sender_email, receiver_email, msg.as_string())
           print("邮件发送成功")
    except Exception as e:
           print("邮件发送失败:", e) 
send_email()

 

上面使用QQ邮箱帐户发送邮件,也可以使用其他邮箱,需要定义邮箱的SMTP服务器和端口。

对于QQ邮箱,SMTP服务器是smtp.qq.com,SMTP端口是465。

生成授权码

在 邮箱设置-->账户

设置POP3/IMAP/SMTP服务中

点击生成授权码,sender_password = 'xxx' 即为授权码,并不是你的qq邮箱密码;

HTML授权码

定义发件人电子邮件地址、授权码和收件人电子邮件地址。

使用MIMEMultipart()创建一个多部分消息。使用msg['From']、msg['To']和msg['Subject']向消息添加发件人、收件人和主题。

使用MIMEText(body, 'plain')向消息添加邮件正文。

使用MIMEApplication()向消息添加附件。

其中 MIMEText 构造对象时,第一个参数是邮件正文;第二个参数是subType,可以设置两种格式 'plain' 和 'html';‘plain’ 表示发送纯文本消息。

HTML发送邮件(可带附件)

2.发送HTML格式的邮件

下面是发送HTML格式电子邮件的示例代码。

 

import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

 
sender_email = 'xxx@qq.com'    # 发件人邮箱账号
sender_password = 'xxx'        # 发件人邮箱授权码
receiver_email = 'xxx@qq.com'  # 收件人邮箱账号
subject = 'This is a test email by 数字ICer'      # 邮件的主题
smtp_server = 'smtp.qq.com'  #qq邮箱的SMTP服务器
smtp_port = 465              #qq邮箱的SMTP服务器端口465

mail_msg = """

Python 邮件发送测试...

这是一个链接

""" msg = MIMEText(mail_msg, 'html', 'utf-8') msg['From'] = Header("sender_email", 'utf-8') msg['To']   = Header("receiver_email", 'utf-8') msg['Subject'] = Header(subject, 'utf-8')   try:     with smtplib.SMTP_SSL(smtp_server, smtp_port) as smtp:         smtp.login(sender_email, sender_password)         smtp.sendmail(sender_email, receiver_email, msg.as_string())     print ("邮件发送成功") except smtplib.SMTPException:     print ("Error: 无法发送邮件")

 

email.header是Python标准库中的一个模块,Header类是一个用于处理电子邮件头部的工具,它可以处理中文等非ASCII字符集,确保电子邮件头部可以正确显示和解析。

当在电子邮件头部中使用中文或其他非ASCII字符时,需要对这些字符进行编码,以确保电子邮件头部可以被正确地显示和解析。Header类可以将这些非ASCII字符编码为合适的格式。

HTML

发送HTML格式的邮件






审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分