测试文件与代码结构

一, 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'    # 发件人邮箱账号
my_pass = '***'              # 发件人邮箱密码
my_user='songjianguohp@163'      # 收件人邮箱账号,我这边发送给自己


mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.runoob">这是一个链接</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", 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'    # 发件人邮箱账号
my_pass = '***'              # 发件人邮箱密码
my_user='songjianguohp@163'      # 收件人邮箱账号,我这边发送给自己
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", 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'    # 发件人邮箱账号
my_pass = '****'              # 发件人邮箱密码
my_user='songjianguohp@163'      # 收件人邮箱账号,我这边发送给自己


mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.runoob">这是一个链接</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", 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'    # 发件人邮箱账号
my_pass = '***'              # 发件人邮箱密码
my_user='songjianguohp@163'      # 收件人邮箱账号,我这边发送给自己
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", 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'    # 发件人邮箱账号
my_pass = '***'              # 发件人邮箱密码(139邮箱密码不需要授权,就是自己的登录密码)
my_user='songjianguohp@163'      # 收件人邮箱账号,我这边发送给自己


mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.runoob">这是一个链接</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", 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'    # 发件人邮箱账号
my_pass = '***'              # 发件人邮箱密码
my_user='songjianguohp@163'      # 收件人邮箱账号,我这边发送给自己
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", 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("邮件发送失败")

更多推荐

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