smtplib.SMTPConnectError: (554, b‘Local Policy Violation‘)

smtplib.SMTPConnectError: (554, b’Local Policy Violation’)

当python用SMTP来发送邮件出现554这个错误的时候,我们该怎么办

首先这个问题是权限问题,你用来发送邮件的这个服务器,不在接收服务器的白名单里面,使得发送邮件一直被拒绝访问,视作垃圾邮件。这样因为一些客户的环境就使得我们很难受了,那面对这种问题我们要怎么解决,首先我们要确定接收邮件的服务器的白名单的IP地址是多少。因为只有确认这一步才开始下面的步骤,不然就无法运行

确定好白名单的ip地址之后我们就先绑定白名单的ip地址,使得我们成功发送邮件

具体代码实现步骤

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import socket
import smtplib
from email.mime.text import MIMEText
from email.header import Header


def sendMailBySocket(sender, receiver, data):
    """
    @description: 使用socket方式发送邮件
    :param sender: 发件人邮箱
    :param receiver: 收件人邮箱
    :param data: 邮件内容
    :return: BOOL
    """
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 要被绑定白名单的ip地址,
    s.bind(('xxx.xxx.xxx.xxx', 0))
    try:
        # 连接smtp server
        s.connect(('xxx.xxx.xxx.xxx', 25)) #STMP服务器地址
        # s.send("EHLO server\r\n".encode(encoding='utf-8'))
        s.send("MAIL FROM:{}\r\n".format(sender).encode(encoding='utf-8'))
        s.send("RCPT TO:{}\r\n".format(receiver).encode(encoding='utf-8'))
        s.send("DATA\r\n".encode(encoding='utf-8'))
        s.send(data.encode('utf-8'))
        s.send("\r\n.\r\n".encode(encoding='utf-8'))
        print(s.recv(1024))#这句不能删,否则会无法发送出去
        s.send("QUIT\r\n".encode(encoding='utf-8'))
        return True
    except Exception as e:
        print(e)
        return False
    finally:
        s.close()
        
        
def sendmail():
    sender = 'from@runoob.com'
	receivers = ['429240967@qq.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
    # 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
	message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
	message['From'] = Header("菜鸟教程", 'utf-8')   # 发送者
	message['To'] =  Header("测试", 'utf-8')        # 接收者
    subject = 'Python SMTP 邮件测试'
	message['Subject'] = Header(subject, 'utf-8')
    try:
    	sendMailBySocket(sender, receivers, message.as_string())
        if result is True:
        	print('send success')
    	else:
        	print('send fail')
    except smtplib.SMTPException:
    	print("Error: 无法发送邮件") 

sendmail()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

有猫腻妖

你的鼓励是我更新的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值