PYTHON实现自动发送邮件(QQ,163,139三种邮箱演示)

测试文件与代码结构

在这里插入图片描述

一, QQ邮箱发送邮件

大致步骤

1.登录qq邮箱,选择设置

在这里插入图片描述

2.点击账户,进入设置界面

在这里插入图片描述

3.授权,生成授权码

在这里插入图片描述
在这里插入图片描述

4.编写发送代码,密码使用的是授权生成的代码(保证发送邮箱的SMTP功能是开启的)

5.效果展示

在这里插入图片描述

发送代码

1.发送纯文本/带有html数据的邮件

print("*************qq邮箱形式*****************")
# 授权码: ***
# 接收邮件服务器:imap.qq.com,使用SSL,端口号993
# 发送邮件服务器:smtp.qq.com,使用SSL,端口号465587

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
 
my_sender='1751122189@qq.com'    # 发件人邮箱账号
my_pass = '***'              # 发件人邮箱密码
my_user='songjianguohp@163.com'      # 收件人邮箱账号,我这边发送给自己


mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.runoob.com">这是一个链接</a></p>
"""

def mail():
    ret=True
    try:
        # msg=MIMEText('填写邮件内容','plain','utf-8')      #此处为仅填写文本数据
        msg=MIMEText(mail_msg,'html','utf-8')      #需要发送html数据的时候用这种形式
        msg['From']=formataddr(["FromRunoob",my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        msg['To']=formataddr(["FK",my_user])              # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        msg['Subject']="菜鸟教程发送邮件测试"                # 邮件的主题,也可以说是标题
 
        server=smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,端口是25
        server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
        server.sendmail(my_sender,[my_user,],msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
        server.quit()  # 关闭连接
    except Exception:  # 如果 try 中的语句没有执行,则会执行下面的 ret=False
        ret=False
    return ret
 
ret=mail()
if ret:
    print("邮件发送成功")
else:
    print("邮件发送失败")

2.发送带有附件的邮件

print("*************qq邮箱带附件形式*****************")
# 授权码: ***
# 接收邮件服务器:imap.qq.com,使用SSL,端口号993
# 发送邮件服务器:smtp.qq.com,使用SSL,端口号465587

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.utils import formataddr
 
my_sender='1751122189@qq.com'    # 发件人邮箱账号
my_pass = '***'              # 发件人邮箱密码
my_user='songjianguohp@163.com'      # 收件人邮箱账号,我这边发送给自己
def mail():
    ret=True
    try:

        #创建一个带附件的实例
        msg = MIMEMultipart()
        msg['From'] = formataddr(["FromRunoob",my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        msg['To'] = formataddr(["FK",my_user])              # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        msg['Subject'] = 'Python SMTP 邮件测试'        # 邮件的主题,也可以说是标题
 
        #邮件正文内容
        msg.attach(MIMEText('这是菜鸟教程Python 邮件发送测试……', 'plain', 'utf-8'))
 
        # 构造附件1,传送当前目录下的 test.txt 文件
        att1 = MIMEText(open('./驾驶证.jpg', 'rb').read(), 'base64', 'gb2312')#
        att1["Content-Type"] = 'application/octet-stream'
        # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
        att1.add_header('Content-Disposition', 'attachment',filename=("驾驶证.jpg"))
        msg.attach(att1)
 
        # 构造附件2,传送当前目录下的 runoob.txt 文件
        att2 = MIMEText(open('./分公司建维部人员信息.xlsx', 'rb').read(), 'base64', 'gb2312')
        att2["Content-Type"] = 'application/octet-stream'
        att2.add_header('Content-Disposition', 'attachment',filename=("分公司建维部人员信息.xlsx"))
        msg.attach(att2)
 
        server=smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,端口是25
        server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
        server.sendmail(my_sender,[my_user,],msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号(如果需要多发就把上面的接受改成数组,这里不用加中括号了)、发送邮件
        server.quit()  # 关闭连接
    except Exception as e:  # 如果 try 中的语句没有执行,则会执行下面的 ret=False
        print(e)
        ret=False
    return ret
 
ret=mail()
if ret:
    print("邮件发送成功")
else:
    print("邮件发送失败")

二, 163邮箱发送邮件

大致步骤

1.登录163邮箱,选择POP3/SMTP/IMAP

在这里插入图片描述

2.进入设置页面,开启对应功能,获取到授权密码及发送邮箱服务器网址

在这里插入图片描述

  • 服务器网址如下
    在这里插入图片描述

4.编写发送代码,密码使用的是授权生成的代码(保证发送邮箱的SMTP功能是开启的)

5.效果展示

在这里插入图片描述

发送代码

1.发送纯文本/带有html数据的邮件

print("*************163邮箱形式*****************")
# 授权码: ****
# 接收邮件服务器:imap.163.com,使用SSL,端口号993
# 发送邮件服务器:smtp.163.com,使用SSL,端口号465994


#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
 
my_sender='songjianguohp@163.com'    # 发件人邮箱账号
my_pass = '****'              # 发件人邮箱密码
my_user='songjianguohp@163.com'      # 收件人邮箱账号,我这边发送给自己


mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.runoob.com">这是一个链接</a></p>
"""

def mail():
    ret=True
    try:
        # msg=MIMEText('填写邮件内容','plain','utf-8')      #此处为仅填写文本数据
        msg=MIMEText(mail_msg,'html','utf-8')      #需要发送html数据的时候用这种形式
        msg['From']=formataddr(["FromRunoob",my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        msg['To']=formataddr(["FK",my_user])              # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        msg['Subject']="菜鸟教程发送邮件测试"                # 邮件的主题,也可以说是标题
 
        server=smtplib.SMTP_SSL("smtp.163.com", 465)  # 发件人邮箱中的SMTP服务器
        server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
        server.sendmail(my_sender,[my_user,],msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
        server.quit()  # 关闭连接
    except Exception:  # 如果 try 中的语句没有执行,则会执行下面的 ret=False
        ret=False
    return ret
 
ret=mail()
if ret:
    print("邮件发送成功")
else:
    print("邮件发送失败")

2.发送带有附件的邮件

print("*************163邮箱带附件形式*****************")
# 授权码: ****
# 接收邮件服务器:imap.163.com,使用SSL,端口号993
# 发送邮件服务器:smtp.163.com,使用SSL,端口号465994

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.utils import formataddr
 
my_sender='songjianguohp@163.com'    # 发件人邮箱账号
my_pass = '***'              # 发件人邮箱密码
my_user='songjianguohp@163.com'      # 收件人邮箱账号,我这边发送给自己
def mail():
    ret=True
    try:

        #创建一个带附件的实例
        msg = MIMEMultipart()
        msg['From'] = formataddr(["FromRunoob",my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        msg['To'] = formataddr(["FK",my_user])              # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        msg['Subject'] = 'Python SMTP 邮件测试'        # 邮件的主题,也可以说是标题
 
        #邮件正文内容
        msg.attach(MIMEText('这是菜鸟教程Python 邮件发送测试……', 'plain', 'utf-8'))
 
        # 构造附件1,传送当前目录下的 test.txt 文件
        att1 = MIMEText(open('./驾驶证.jpg', 'rb').read(), 'base64', 'gb2312')#
        att1["Content-Type"] = 'application/octet-stream'
        # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
        att1.add_header('Content-Disposition', 'attachment',filename=("驾驶证.jpg"))
        msg.attach(att1)
 
        # 构造附件2,传送当前目录下的 runoob.txt 文件
        att2 = MIMEText(open('./分公司建维部人员信息.xlsx', 'rb').read(), 'base64', 'gb2312')
        att2["Content-Type"] = 'application/octet-stream'
        att2.add_header('Content-Disposition', 'attachment',filename=("分公司建维部人员信息.xlsx"))
        msg.attach(att2)
 
        server=smtplib.SMTP_SSL("smtp.163.com", 465)  # 发件人邮箱中的SMTP服务器
        server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
        server.sendmail(my_sender,[my_user,],msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号(如果需要多发就把上面的接受改成数组,这里不用加中括号了)、发送邮件
        server.quit()  # 关闭连接
    except Exception as e:  # 如果 try 中的语句没有执行,则会执行下面的 ret=False
        print(e)
        ret=False
    return ret
 
ret=mail()
if ret:
    print("邮件发送成功")
else:
    print("邮件发送失败")

三, 139邮箱发送邮件

大致步骤

1.进入139邮箱界面,点击设置,进入常规设置

在这里插入图片描述

2.进入左侧账户安全找到邮箱协议设置,开启功能,记住发送方邮箱服务器网址。授权密码为用户登录密码–此处与其他两种邮箱不同

在这里插入图片描述
在这里插入图片描述

发送代码

1.发送纯文本/带有html数据的邮件(经过测试仅能发送文本形式,当发送html给163邮箱的时候会被当成垃圾邮箱退回,请老爷们自行测试)

print("*************139邮箱形式*****************")
# 授权码: ***
# 接收邮件服务器:imap.139.com,使用SSL,端口号993
# 发送邮件服务器:smtp.139.com,使用SSL,端口号465


#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
 
my_sender='18306462619@139.com'    # 发件人邮箱账号
my_pass = '***'              # 发件人邮箱密码(139邮箱密码不需要授权,就是自己的登录密码)
my_user='songjianguohp@163.com'      # 收件人邮箱账号,我这边发送给自己


mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.runoob.com">这是一个链接</a></p>
"""

def mail():
    ret=True
    try:
        msg=MIMEText('填写邮件内容','plain','utf-8')      #此处为仅填写文本数据
        # msg=MIMEText(mail_msg,'html','utf-8')      #需要发送html数据的时候用这种形式(139邮箱不能用,会被当成垃圾邮件退回)
        msg['From']=formataddr(["FromRunoob",my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        msg['To']=formataddr(["FK",my_user])              # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        msg['Subject']="菜鸟教程发送邮件测试"                # 邮件的主题,也可以说是标题
 
        server=smtplib.SMTP_SSL("smtp.139.com", 465)  # 发件人邮箱中的SMTP服务器
        server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
        server.sendmail(my_sender,[my_user,],msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
        server.quit()  # 关闭连接
    except Exception as e:  # 如果 try 中的语句没有执行,则会执行下面的 ret=False
        print(e)
        ret=False
    return ret
 
ret=mail()
if ret:
    print("邮件发送成功")
else:
    print("邮件发送失败")
  • 当发送带有html的邮件时
  • 解决方法:那就发送文本网址就好啦~~~自己复制一下好像也不是很麻烦,哈哈。

在这里插入图片描述

2.发送带有附件的邮件(原理同上,仅注意修改邮箱服务器和授权密码即可)

print("*************139邮箱带附件形式*****************")
# 授权码: ***
# 接收邮件服务器:imap.139.com,使用SSL,端口号993
# 发送邮件服务器:smtp.139.com,使用SSL,端口号465

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.utils import formataddr
 
my_sender='18306462619@139.com'    # 发件人邮箱账号
my_pass = '***'              # 发件人邮箱密码
my_user='songjianguohp@163.com'      # 收件人邮箱账号,我这边发送给自己
def mail():
    ret=True
    try:

        #创建一个带附件的实例
        msg = MIMEMultipart()
        msg['From'] = formataddr(["FromRunoob",my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        msg['To'] = formataddr(["FK",my_user])              # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        msg['Subject'] = 'Python SMTP 邮件测试'        # 邮件的主题,也可以说是标题
 
        #邮件正文内容
        msg.attach(MIMEText('这是菜鸟教程Python 邮件发送测试……', 'plain', 'utf-8'))
 
        # 构造附件1,传送当前目录下的 test.txt 文件
        att1 = MIMEText(open('./驾驶证.jpg', 'rb').read(), 'base64', 'gb2312')#
        att1["Content-Type"] = 'application/octet-stream'
        # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
        att1.add_header('Content-Disposition', 'attachment',filename=("驾驶证.jpg"))
        msg.attach(att1)
 
        # 构造附件2,传送当前目录下的 runoob.txt 文件
        att2 = MIMEText(open('./分公司建维部人员信息.xlsx', 'rb').read(), 'base64', 'gb2312')
        att2["Content-Type"] = 'application/octet-stream'
        att2.add_header('Content-Disposition', 'attachment',filename=("分公司建维部人员信息.xlsx"))
        msg.attach(att2)
 
        server=smtplib.SMTP_SSL("smtp.139.com", 465)  # 发件人邮箱中的SMTP服务器
        server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
        server.sendmail(my_sender,[my_user,],msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号(如果需要多发就把上面的接受改成数组,这里不用加中括号了)、发送邮件
        server.quit()  # 关闭连接
    except Exception as e:  # 如果 try 中的语句没有执行,则会执行下面的 ret=False
        print(e)
        ret=False
    return ret
 
ret=mail()
if ret:
    print("邮件发送成功")
else:
    print("邮件发送失败")
  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值