java mail 服务器 网易 554

错误信息

(554, b’DT:SPM 163 smtp14,EsCowACnnOp_kdBflbfuIg–.5619S2 1607504256,please see .htm?ip=61.140.181.56&hostid=smtp14&time=1607504256’)

出错代码:

import os

import smtplib

import base64

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

class SendEmail(object):

def __init__(self, username, passwd, sender, recv, title, content,

file=None, ssl=False, email_host='smtp.163',

port=25, ssl_port=465):

"""

:param username: 用户名

:param passwd: 密码

:param recv: 收件人,多个收件人传list ['a@qq','b@qq]

:param title: 邮件标题

:param content: 邮件正文

:param file: 附件路径,如果不在当前目录下,要写绝对路径

:param ssl: 是否安全链接

:param email_host: smtp服务器地址

:param port: 普通端口

:param ssl_port: 安全链接端口

"""

self.username = username

self.passwd = passwd

self.sender = sender

self.recv = recv

self.title = title

self.content = content

self.file = file

self.email_host = email_host

self.port = port

self.ssl = ssl

self.ssl_port = ssl_port

def send_email(self):

msg = MIMEMultipart()

# 发送邮件对象

if self.file:

file_name = os.path.split(self.file)[-1] # 只取文件名,不取路径

try:

f = open(self.file, 'rb').read()

except Exception as e:

raise Exception('附件打不开!!!')

else:

att = MIMEText(f, "base64", "utf-8")

att["Content-Type"] = 'application/octet-stream'

new_file_name = '=?utf-8?b?' + base64.b64encode(file_name.encode()).decode() + '?='

att["Content-Type"] = 'attachment; filename="%s"' % new_file_name

msg.attach(att)

msg.attach(MIMEText(self.content)) # 邮件正文的内容

msg["Subject"] = self.title # 邮件主题

msg['From'] = self.sender # 发送者账号

msg['To'] = ','.join(self.recv) # 接收者账号列表

if self.ssl:

self.smtp = smtplib.SMTP_SSL(self.email_host, port=self.ssl_port)

else:

self.smtp = smtplib.SMTP(self.email_host, port=self.port)

try:

self.smtp.login(self.username, self.passwd)

self.smtp.sendmail(self.username, self.recv, msg.as_string())

print('成功了。。')

except Exception as e:

print('出错了..', e)

if __name__ == '__main__':

m = SendEmail(

username='17746506075@163',

passwd='FJRMTAWBWHWVWURK',

sender='17746506075@163',

recv=['1401230275@qq'],

title='123',

content='测试邮件发送',

file=r'F:\图片\abc.jpg',

ssl=True

)

m.send_email()

运行结果

D:\自学python\python基础\API_Test\venv\Scripts\python.exe D:/自学python/python基础/API_Test/common/send_email.py

出错了.. (554, b'DT:SPM 163 smtp14,EsCowACnnOp_kdBflbfuIg--.5619S2 1607504256,please see .htm?ip=61.140.181.56&hostid=smtp14&time=1607504256')

Process finished with exit code 0

原 因是:

原来这时因为网易将我发的邮件当成了垃圾邮件!

解决办法是:这时候你只要在发邮件的时候抄送上自己,就再也不会报这个错误了!

import os

import smtplib

import base64

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

class SendEmail(object):

def __init__(self, username, passwd, sender, recv, title, content,

file=None, ssl=False, email_host='smtp.163',

port=25, ssl_port=465):

"""

:param username: 用户名

:param passwd: 密码

:param recv: 收件人,多个收件人传list ['a@qq','b@qq]

:param title: 邮件标题

:param content: 邮件正文

:param file: 附件路径,如果不在当前目录下,要写绝对路径

:param ssl: 是否安全链接

:param email_host: smtp服务器地址

:param port: 普通端口

:param ssl_port: 安全链接端口

"""

self.username = username

self.passwd = passwd

self.sender = sender

self.recv = recv

self.title = title

self.content = content

self.file = file

self.email_host = email_host

self.port = port

self.ssl = ssl

self.ssl_port = ssl_port

def send_email(self):

msg = MIMEMultipart()

# 发送邮件对象

if self.file:

file_name = os.path.split(self.file)[-1] # 只取文件名,不取路径

try:

f = open(self.file, 'rb').read()

except Exception as e:

raise Exception('附件打不开!!!')

else:

att = MIMEText(f, "base64", "utf-8")

att["Content-Type"] = 'application/octet-stream'

new_file_name = '=?utf-8?b?' + base64.b64encode(file_name.encode()).decode() + '?='

att["Content-Type"] = 'attachment; filename="%s"' % new_file_name

msg.attach(att)

msg.attach(MIMEText(self.content)) # 邮件正文的内容

msg["Subject"] = self.title # 邮件主题

msg['From'] = self.sender # 发送者账号

msg['To'] = ','.join(self.recv) # 接收者账号列表

if self.ssl:

self.smtp = smtplib.SMTP_SSL(self.email_host, port=self.ssl_port)

else:

self.smtp = smtplib.SMTP(self.email_host, port=self.port)

try:

self.smtp.login(self.username, self.passwd)

self.smtp.sendmail(self.username, self.recv, msg.as_string())

print('成功了。。')

except Exception as e:

print('出错了..', e)

if __name__ == '__main__':

m = SendEmail(

username='17746506075@163',

passwd='FJRMTAWBWHWVWURK',

sender='17746506075@163',

recv=['1401230275@qq', '17746506075@163'],

title='123',

content='测试邮件发送',

file=r'F:\图片\abc.jpg',

ssl=True

)

m.send_email()

运行结果为:

D:\自学python\python基础\API_Test\venv\Scripts\python.exe D:/自学python/python基础/API_Test/common/send_email.py

成功了。。

Process finished with exit code 0

本文地址:

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!