Python操作邮箱发送邮件(网易邮箱)

以网易邮箱为例:

准备工作:

1)首先进入网页版网易邮箱,点击设置

2)点击,POP3/SMTP/IMAP

3)开启  IMAP/SMTP服务 和 POP3/SMTP服务  并且记住授权码(一定要记住只会出现一次)

1.发送纯文本邮件

# 使用 smtplib 模块发送纯文本邮件
import smtplib
import ssl
from email.message import EmailMessage

EMAIL_ADDRESS = "自己的邮箱账号"     # 邮箱的地址
EMAIL_PASSWORD = "自己的授权码"     # 授权码

# 连接到smtp服务器
# smtp = smtplib.SMTP('smtp.163.com', 25)     # 未加密

# 也可以使用ssl模块的context加载系统允许的证书,在登录时进行验证
context = ssl.create_default_context()


'''
# 为了防止信息在网络传输中泄漏,最好对信息进行加密
smtp = smtplib.SMTP_SSL("smtp.163.com", 465, context=context)       # 完成加密通讯

# 连接成功后使用login方法登录自己的邮箱
smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD)

# 一、使用 sendmail 方法实现发送邮件信息
sender = EMAIL_ADDRESS      # 用来发送的邮箱地址
receive = ""        # 目标邮箱地址
subject = "邮件标题内容"
body = "邮件主体内容"
msg = f"Subject: {subject}\n\n{body}"
smtp.sendmail(sender, receive, msg)


# 发送完毕后使用 quit 方法关闭连接
smtp.quit()
'''

subject = "邮件标题内容"
body = "邮件主体内容"

msg = EmailMessage()
msg['subject'] = subject        # 邮件标题
msg['From'] = EMAIL_ADDRESS     # 邮件发件人
msg['To'] = "目标邮箱账号"                  # 邮件的收件人
msg.set_content(body)           # 使用set_content()方法设置邮件的主体内容

# 为了防止忘记关闭连接也可以使用with语句
with smtplib.SMTP_SSL("smtp.163.com", 465, context=context) as smtp:      # 完成加密通讯

    # 连接成功后使用login方法登录自己的邮箱
    smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD)

    '''
    # 方式一:
    # 使用 sendmail 方法实现发送邮件信息
    sender = EMAIL_ADDRESS      # 邮件发件人
    receive = EMAIL_ADDRESS       # 邮件收件人
    subject = "subject"
    body = "body"
    msg = f"Subject: {subject}\n\n{body}"
    print("正在发送。。。。。。。。。。。。。。。。。。")
    smtp.sendmail(sender, receive, msg)
    print("发送成功。。。。。。。。。。。。。。。。。。")
    '''

    # 方式二:使用send_message方法发送邮件信息
    smtp.send_message(msg)



2.发送带有HTML的邮件

# 使用 smtplib 模块发送纯文本邮件
import smtplib
import ssl
from email.message import EmailMessage

EMAIL_ADDRESS = "自己的邮箱账号"     # 邮箱的地址
EMAIL_PASSWORD = "自己的授权吗"     # 授权码

# 使用ssl模块的context加载系统允许的证书,在登录时进行验证
context = ssl.create_default_context()


subject = "邮件标题内容"
body = "邮件主体内容"
msg = EmailMessage()
msg['subject'] = subject        # 邮件标题
msg['From'] = EMAIL_ADDRESS     # 邮件发件人
msg['To'] = "目标邮箱账号"                  # 邮件的收件人
msg.set_content(body)           # 使用set_content()方法设置邮件的主体内容

# 要想为邮件添加HTML内容,使用add_alternative()方法实现,注意要放在set_context之后
HTML = """\



    
    消失在宇宙星空中的404页面
    


HTML

""" msg.add_alternative(HTML, subtype='html') # 为了防止忘记关闭连接也可以使用with语句 with smtplib.SMTP_SSL("smtp.163.com", 465, context=context) as smtp: # 完成加密通讯 # 连接成功后使用login方法登录自己的邮箱 smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD) # 使用send_message方法发送邮件信息 smtp.send_message(msg)

3.发送带有附件的邮件

# 使用 smtplib 模块发送纯文本邮件
import smtplib
import ssl
from email.message import EmailMessage

EMAIL_ADDRESS = "自己的邮箱账号"     # 邮箱的地址
EMAIL_PASSWORD = "自己的授权码"     # 授权码

# 使用ssl模块的context加载系统允许的证书,在登录时进行验证
context = ssl.create_default_context()


subject = "邮件标题内容"
body = "邮件主体内容"
msg = EmailMessage()
msg['subject'] = subject        # 邮件标题
msg['From'] = EMAIL_ADDRESS     # 邮件发件人
msg['To'] = "目标邮箱账号"                  # 邮件的收件人
msg.set_content(body)           # 使用set_content()方法设置邮件的主体内容

# 要想为邮件添加附件内容首先要读入文件的二进制内容
filename = '要附带的文件地址'
with open(filename,'rb') as f:
    filedata = f.read()

# 使用add_attachment方法添加附件的数据
msg.add_attachment(filedata, maintype='', subtype='', filename=filename)    # filedata:文件数据;maintype文件类型;subtype文件后缀名;filename:文件名

# 为了防止忘记关闭连接也可以使用with语句
with smtplib.SMTP_SSL("smtp.163.com", 465, context=context) as smtp:      # 完成加密通讯

    # 连接成功后使用login方法登录自己的邮箱
    smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
    # 使用send_message方法发送邮件信息
    smtp.send_message(msg)

4.向多人发送邮件

# 使用 smtplib 模块发送纯文本邮件
import smtplib
import ssl
from email.message import EmailMessage

EMAIL_ADDRESS = "自己的邮箱地址"     # 邮箱的地址
EMAIL_PASSWORD = "自己的授权码"     # 授权码

# 使用ssl模块的context加载系统允许的证书,在登录时进行验证
context = ssl.create_default_context()

'''
# 方法一:在msg的To部分设置多个email目标地址,使用列表存储这多个email地址,这会向多个用户发送相同的内容
subject = "邮件标题内容"
body = "邮件主体内容"
msg = EmailMessage()
msg['subject'] = subject        # 邮件标题
msg['From'] = EMAIL_ADDRESS     # 邮件发件人
msg['To'] = ['[email protected]', '[email protected]', '[email protected]']                  # 邮件的收件人
msg.set_content(body)           # 使用set_content()方法设置邮件的主体内容

# 为了防止忘记关闭连接也可以使用with语句
with smtplib.SMTP_SSL("smtp.163.com", 465, context=context) as smtp:      # 完成加密通讯

    # 连接成功后使用login方法登录自己的邮箱
    smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
    # 使用send_message方法发送邮件信息
    smtp.send_message(msg)
'''

# 方法二:向不同的用户发送不同的内容
# 建立一个列表来存储目标邮箱地址
contacts = ['[email protected]', '[email protected]', '[email protected]']
# 为了防止忘记关闭连接也可以使用with语句
with smtplib.SMTP_SSL("smtp.163.com", 465, context=context) as smtp:      # 完成加密通讯
    # 连接成功后使用login方法登录自己的邮箱
    smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
    for contact in contacts:
        subject = "邮件标题内容"
        body = f"{contact}邮件主体内容"
        msg = EmailMessage()
        msg['subject'] = subject  # 邮件标题
        msg['From'] = EMAIL_ADDRESS  # 邮件发件人
        msg['To'] = contact  # 邮件的收件人
        msg.set_content(body)  # 使用set_content()方法设置邮件的主体内容
        # 使用send_message方法发送邮件信息
        smtp.send_message(msg)

你可能感兴趣的:(python)