python自动发送邮件2

python自动发送邮件

一开始代码:

# 导入相关库
import smtplib
from email.header import Header
from email.utils import parseaddr, formataddr
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication

# 构建一个类用来处理格式化文本
def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr((Header(name, 'utf-8').encode(), addr))

def setSMTP():
    # 设置SMTP授权码
    smtp_password = input('请输入你的邮箱的smtp授权码:')
    return smtp_password

def setServer():
    # 输入SMTP服务器地址
    smtp_server = 'smtp.qq.com'
    # 设置SMTP的加密端口465
    server = smtplib.SMTP_SSL(smtp_server, 465)
    return server


def sendEmail():
    # 设置发件人
    email_from = input('请输入发件人的邮箱号码:')
    # 设置收件人
    email_to = input('请输入收件人的邮箱号码:')
    # 设置发件人、收件人、标题、正文
    msg = MIMEText('这是一条python自动发送邮件测试邮件.....', 'plain', 'utf-8')
    msg['subject'] = Header(u'python自动发送邮件测试', 'utf-8').encode()
    msg['from'] = _format_addr(email_from + '<%s>' % email_from)
    msg['to'] = _format_addr(email_to + '<%s>' % email_to)
    try:
        # 登录邮箱
        setServer().login(email_from, setSMTP())
        # 发送邮件
        setServer().sendmail(email_from, [email_to], msg.as_string())
        print('发送成功')
    except Exception as error:
        print(f'异常原因:{error}')
    # 退出发送
    setServer().quit()


if __name__ == '__main__':
    sendEmail()
    # print('发送成功.....')

运行以后出现如下错误:在这里插入图片描述

出现了一个503错误,于是我上网查了查503错误,结果如下:

说是由于临时的服务器维护或过载无法处理请求,于是我去注册了一个163邮箱,并上网查了163邮箱的服务器地址和ssl协议端口,具体的地址和端口如下:添加链接描述

遇到如下错误,好家伙又遇到错误了,不方,咱们遇到问题就去解决,所以我上网查了553错误,错误的大概意思是需要身份验证,出现这种错误大多是因为用户名密码或端口的问题,ssl协议端口有两个465和994两个都用了都出现了553错误,所以我想不是端口问题,那就只有用户名密码了,所以我觉得是代码问题。

问了一些朋友以后发现了问题,原因如下:

def setServer():
    # 输入SMTP服务器地址
    smtp_server = 'smtp.qq.com'
    # 设置SMTP的加密端口465
    server = smtplib.SMTP_SSL(smtp_server, 465)
    return server

try:
        # 登录邮箱
        setServer().login(email_from, setSMTP())
        # 发送邮件
        setServer().sendmail(email_from, [email_to], msg.as_string())
        print('发送成功')
    except Exception as error:
        print(f'异常原因:{error}')
    # 退出发送
    setServer().quit()

主要是因为上面写了一个setServer函数,然后下面在登录邮箱的时候调用了3次setServer函数,每一次调用都是新的端口,所以在第二次调用时没有登录,所以就会在使用QQ邮箱的时候报503错误,出现服务器不可访问的问题,在使用163邮箱的时候出现553错误,需要验证身份,因为没有登录。其实这也是一些基础的东西,函数调用一次,就会产生一个新的值,再调用一次就会又产生一个新的值。

最后的整体代码如下,

# 导入相关库
import smtplib
from email.header import Header
from email.utils import parseaddr, formataddr
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication


# 构建一个类用来处理格式化文本
def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr((Header(name, 'utf-8').encode(), addr))


def setSMTP():
    # 设置SMTP授权码
    smtp_password = input('请输入您的授权码:')
    return smtp_password


def setServer():
    # 输入SMTP服务器地址
    smtp_server = 'smtp.qq.com'
    # 设置SMTP的加密端口465
    server = smtplib.SMTP_SSL(smtp_server, 465)
    return server


def sendEmail():
    # 设置发件人
    email_from = input('请输入发件人的邮箱号:')
    # 设置收件人
    email_to = input('请输入收件人的邮箱号:')
    content = '这是一封python自动发送邮件测试邮件....'
    # 添加正文
    textApart = MIMEText(content)
    excelfile = 'test.xlsx'
    # 打开附件
    part = MIMEApplication(open(excelfile, 'rb').read())
    # 修改附件名
    part.add_header('Content-Disposition', 'attachment', filename=excelfile)
    m = MIMEMultipart()
    # 添加附件和文本
    m.attach(part)
    m.attach(textApart)
    # 设置发件人、收件人、标题、
    m['subject'] = Header(u'python自动发送邮件测试邮件', 'utf-8').encode()
    m['from'] = _format_addr(email_from + '<%s>' % email_from)
    m['to'] = _format_addr(email_to + '<%s>' % email_to)
    try:
        # 登录邮箱
        server = setServer()
        server.login(email_from, setSMTP())
        # 发送邮件
        server.sendmail(email_from, [email_to], m.as_string())
        # 退出发送
        server.quit()
        print('发送成功....')
    except Exception as error:
        print(f'异常原因:{error}')


if __name__ == '__main__':
    sendEmail()

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Talia539

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值