第38节:python通过SMTP协议发送邮件失败,报错505或535或554

发送失败

错误1:smtplib.SMTPAuthenticationError: (550, b'User has no permission')
   我们使用python发送邮件时相当于自定义客户端根据用户名和密码登录,然后使用SMTP服务发送邮件,新注册的163邮箱是默认不开启客户端授权的,因此登录总是被拒绝,解决办法(以163邮箱为例):进入163邮箱-设置-客户端授权密码-开启(授权码是用于登录第三方邮件客户端的专用密码),非第三方登录密码不变。


错误2:smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed')

  以163邮箱为例,在开启POP3/SMTP服务,并开启客户端授权密码时会设置授权码,将这个授权码代替smtplib.SMTP().login(user,password)方法中的password即可。


以下是python利用SMTP协议发送邮件的代码:

[python] view plain copy
  1. #coding:utf-8  
  2. import smtplib  
  3. from email.mime.text import MIMEText  # 引入smtplib和MIMEText  
  4.   
  5. host = 'smtp.163.com'  # 设置发件服务器地址  
  6. port = 25  # 设置发件服务器端口号。注意,这里有SSL和非SSL两种形式  
  7. sender = 'XXXXXX@163.com'  # 设置发件邮箱,一定要自己注册的邮箱  
  8. pwd = 'XXXXXX'  # 设置发件邮箱的密码,等会登陆会用到  
  9. receiver = 'XXXXXXXX@YY.com' # 设置邮件接收人,可以是扣扣邮箱  
  10. body = '<h1>Hi</h1><p>test</p>' # 设置邮件正文,这里是支持HTML的  
  11.   
  12. msg = MIMEText(body, 'html'# 设置正文为符合邮件格式的HTML内容  
  13. msg['subject'] = 'Hello world' # 设置邮件标题  
  14. msg['from'] = sender  # 设置发送人  
  15. msg['to'] = receiver  # 设置接收人  
  16.   
  17. try:  
  18.     s = smtplib.SMTP(host, port)  # 注意!如果是使用SSL端口,这里就要改为SMTP_SSL  
  19.     s.login(sender, pwd)  # 登陆邮箱  
  20.     s.sendmail(sender, receiver, msg.as_string())  # 发送邮件!  
  21.     print 'Done'  
  22. except smtplib.SMTPException:  
  23.     print 'Error'  
错误3:smtplib.SMTPDataError: (554, 'DT:SPM 163 smtp9,)

原因是:代码中缺少发送者和接收者,如下:

一些常用邮箱发件服务器及端口号

邮箱   发件服务器    非SSL协议端口    SSL协议端口

163   smtp.163.com      25          465/587

qq    smtp.qq.com      25          465/587


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
利用 Python 发送邮件需要使用到 smtplib 库。 具体实现步骤如下: 1. 导入 smtplib, email.mime.text 和 email.mime.multipart 库 ```python import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart ``` 2. 设置发件人、收件人、抄送人、邮件主题等信息 ```python from_addr = '发件人邮箱地址' to_addr = '收件人邮箱地址' cc_addr = '抄送人邮箱地址' password = '发件人邮箱密码' smtp_server = 'smtp.邮箱服务器地址:端口号' msg = MIMEMultipart() msg['From'] = from_addr msg['To'] = to_addr msg['Cc'] = cc_addr msg['Subject'] = '邮件主题' ``` 3. 添加邮件正文内容和附件等信息 ```python # 添加邮件正文 text = '邮件正文' msg.attach(MIMEText(text, 'plain')) # 添加附件 with open('附件路径', 'rb') as f: attach_file = MIMEText(f.read(), 'base64', 'utf-8') attach_file['Content-Type'] = 'application/octet-stream' attach_file.add_header('Content-Disposition', 'attachment', filename='附件名称') msg.attach(attach_file) ``` 4. 登录邮箱服务器并发送邮件 ```python # 登录邮箱服务器并发送邮件 s = smtplib.SMTP_SSL(smtp_server) s.login(from_addr, password) s.sendmail(from_addr, [to_addr, cc_addr], msg.as_string()) s.quit() ``` 完整代码示例: ```python import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from_addr = '发件人邮箱地址' to_addr = '收件人邮箱地址' cc_addr = '抄送人邮箱地址' password = '发件人邮箱密码' smtp_server = 'smtp.邮箱服务器地址:端口号' msg = MIMEMultipart() msg['From'] = from_addr msg['To'] = to_addr msg['Cc'] = cc_addr msg['Subject'] = '邮件主题' # 添加邮件正文 text = '邮件正文' msg.attach(MIMEText(text, 'plain')) # 添加附件 with open('附件路径', 'rb') as f: attach_file = MIMEText(f.read(), 'base64', 'utf-8') attach_file['Content-Type'] = 'application/octet-stream' attach_file.add_header('Content-Disposition', 'attachment', filename='附件名称') msg.attach(attach_file) s = smtplib.SMTP_SSL(smtp_server) s.login(from_addr, password) s.sendmail(from_addr, [to_addr, cc_addr], msg.as_string()) s.quit() ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值