Python SMTP发送邮件遇到的一些问题及解决办法

作者:xiaopeng_hd 时间:2023-04-17 12:06:52 

Python练习内容:

SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。

Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。

首先,我们来构造一个最简单的纯文本邮件:


from email.mime.text import MIMEText
msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')

注意到构造MIMEText对象时,第一个参数就是邮件正文,第二个参数是MIME的subtype,传入'plain'表示纯文本,最终的MIME就是'text/plain',最后一定要用utf-8编码保证多语言兼容性。

然后,通过SMTP发出去:


# 输入Email地址和口令:from_addr = input('From: ')
password = input('Password: ')# 输入收件人地址:to_addr = input('To: ')# 输入SMTP服务器地址:smtp_server = input('SMTP server: ')import smtplib
server = smtplib.SMTP(smtp_server, 25) # SMTP协议默认端口是25server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()

我们用set_debuglevel(1)就可以打印出和SMTP服务器交互的所有信息。SMTP协议就是简单的文本命令和响应。login()方法用来登录SMTP服务器,sendmail()方法就是发邮件,由于可以一次发给多个人,所以传入一个list,邮件正文是一个str,as_string()把MIMEText对象变成str。

如果一切顺利,就可以在收件人信箱中收到我们刚发送的Email

————————分割线,以上都是资料内容————————

使用过程中我遇到了一些问题,或者是之前作者没有表述清楚

我使用的是163邮箱

1、首先作者没有提醒我,要确保自己的邮箱地址开启了smtp服务,并设置客户端授权登陆密码

Python SMTP发送邮件遇到的一些问题及解决办法

2、发送邮件时,password应该填写邮箱的授权登陆码,而不是自己的邮箱密码。

3、按照以上代码运行,会报错


Traceback (most recent call last):
File "mailDemo.py", line 24, in
server.sendmail(from_addr,[to_addr],msg.as_string())
File "C:\Program Files\Python35-32\lib\smtplib.py", line 878, in sendmail
raise SMTPDataError(code, resp)

应该在代码中加上:


#发送邮箱地址
msg['From'] = from_addr
#收件箱地址
msg['To'] = to_addr
#主题
msg['Subject'] = 'the frist mail'

4、在公司环境运行没问题的代码,在自己家的网络下又遇到了一系列问题,运行时报。


Traceback (most recent call last):
File "/Users/xuexiaopeng/Documents/sendmailDemo.py", line 13, in <module>
server = smtplib.SMTP(smtp_server,25)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/smtplib.py", line 253, in __init__
raise SMTPConnectError(code, msg)
smtplib.SMTPConnectError: (554, b'IP<114.111.167.154> in blacklist')

我也不知道这个114.111.167.154是那里的IP,我将自己电脑的 * 关闭,重启了路由器解决了。

5、发送邮件时报错:


Traceback (most recent call last):
File "/Users/xuexiaopeng/Documents/sendmailDemo.py", line 21, in <module>
server.sendmail(from_addr, [to_addr], msg.as_string())
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/smtplib.py", line 878, in sendmail
raise SMTPDataError(code, resp)
smtplib.SMTPDataError: (554, b'DT:SPM 163 smtp10,DsCowAA3h9_QbgZXI9_fCQ--.713S2 1460039376,please see http://mail.163.com/help/help_spam_16.htm?ip=117.114.147.187&hostid=smtp10&time=1460039376')

我查了一下页面http://mail.163.com/help/help_spam_16.htm?ip=117.114.147.187&hostid=smtp10&time=1460039376,是发生了退信行为,后来我关闭了路由器,连接了自己手机分享的热点,才发送成功。

至于家里的网络为啥会出问题,我还的再研究。

完整代码如下:


from email.mime.text import MIMEText
msg = MIMEText('hello,send by python...','plain','utf-8')
#发送邮箱地址
from_addr = 'test@163.com'
#邮箱授权码,非登陆密码
password = '123'
#收件箱地址
to_addr = '123456@qq.com'
#smtp服务器
smtp_server = 'smtp.163.com'
#发送邮箱地址
msg['From'] = from_addr
#收件箱地址
msg['To'] = to_addr
#主题
msg['Subject'] = 'the frist mail'
import smtplib
server = smtplib.SMTP(smtp_server,25)
server.set_debuglevel(1)
print(from_addr)
print(password)
server.login(from_addr,password)
server.sendmail(from_addr,[to_addr],msg.as_string())
server.quit()

来源:https://blog.csdn.net/sinat_30491451/article/details/51083440

标签:python,smtp
0
投稿

猜你喜欢

  • 简易CSS相册源代码

    2008-04-18 12:28:00
  • Python连接mysql方法及常用参数

    2024-01-15 00:33:54
  • 使用python-Jenkins批量创建及修改jobs操作

    2023-07-01 01:53:11
  • 将各种类型或对象都转变为数组

    2009-12-28 13:19:00
  • 常用SQL语句优化技巧总结【经典】

    2024-01-20 19:27:03
  • mysql 左连接、右连接和内连接

    2024-01-22 10:14:39
  • js中eval详解

    2024-04-19 10:01:30
  • css样式表使用技巧小结

    2008-01-11 20:44:00
  • OpenCV制作Mask图像掩码的案例

    2023-09-20 16:34:04
  • MySQL mysqladmin客户端的使用简介

    2024-01-26 00:33:29
  • 原生js实现对Ajax的封装(仿jquery)

    2024-04-22 12:57:06
  • python导出chrome书签到markdown文件的实例代码

    2022-08-26 00:49:36
  • MySQL数据库的其它安全问题

    2008-12-23 15:40:00
  • MySQL查询缓存优化示例详析

    2024-01-27 12:21:32
  • MySQL主从复制配置心跳功能介绍

    2024-01-23 19:52:34
  • 详解如何在阿里云上安装mysql

    2024-01-14 08:25:57
  • js function定义函数使用心得

    2024-04-16 09:10:37
  • python将txt文件读取为字典的示例

    2023-02-25 15:57:16
  • python实现俄罗斯方块游戏(改进版)

    2022-03-10 07:55:48
  • 防止删库跑路及高级代码投毒技巧

    2022-03-27 13:20:16
  • asp之家 网络编程 m.aspxhome.com