当前位置:   article > 正文

Python程序设计——邮件处理_python stp.sendmail 返回结果

python stp.sendmail 返回结果

本文知识框架引用自《零基础Python:从入门到精通》

一、发送电子邮件

1.SMTP发送电子邮件

Python标准库提供了smtplib模块,用于实现SMTP协议,发送邮件。

Python创建SMTP对象的语法为:

smtpObj = smtplib.SMTP([host [, port [, local_hostname]]])

参数说明:

  • host:SMTP服务器主机,是可选参数。可指定主机IP地址,如:smtp.qq.com
  • port:指定SMTP服务所需的端口号,一般情况下为25
  • local_hostname:如果SMTP在本机上,只需要指定为localhost即可

PythonSMTP对象使用sendmail方法发送邮件的语法为:

SMTP.sendmail(from_addr,to_addrs,msg [, mail_options, rcpt_options])

参数说明:

  • from:邮件发送者地址
  • to_addr:邮件发送地址
  • msg:发送的消息

使用上述方法发送邮件如下:

  1. import smtplib
  2. #模块导入
  3. from email.mime.text import MIMEText
  4. from email.header import Header
  5. #邮箱用户名
  6. sender = "xxx@qq.com"
  7. #邮箱授权码
  8. password = "xxxxxx"
  9. #收件人
  10. receiver = "xxxx@qq.com"
  11. #邮件正文
  12. message = MIMEText("使用Python发送邮件","plain","utf-8")
  13. #发件人的名字
  14. message["From"] = Header("Kiku","utf-8")
  15. #收件人名字
  16. message["To"] = Header("Tian","utf-8")
  17. #邮件标题
  18. message["Subject"] = "Python发送邮件测试"
  19. try:
  20. #使用QQ邮箱发送
  21. smtp = smtplib.SMTP_SSL("smtp.qq.com",465)
  22. #登录邮箱
  23. smtp.login(sender,password)
  24. #发送邮件
  25. smtp.sendmail(sender,receiver,message.as_string())
  26. print("邮件已发送!")
  27. except smtplib.SMTPException as e:
  28. print("Error!发送失败",e)

注意:邮箱授权码不是密码,需要在QQ邮箱的账户页面中获取。

获取方法可参考:http://t.csdn.cn/znEwz


2.HTML格式的邮件发送

前面例子中的邮件发送方式只能发送纯文本格式,HTML则可以发送类型更丰富的邮件

发送HTMP格式的邮件很简单,只需要在使用MIMEText函数时将第二个参数设置为“html”

代码显示如下:

  1. import smtplib
  2. #模块导入
  3. from email.mime.text import MIMEText
  4. from email.header import Header
  5. #邮箱用户名
  6. sender = "xxx@qq.com"
  7. #邮箱授权码
  8. password = "xxxxx"
  9. #收件人
  10. receiver = "xxx@qq.com"
  11. #邮件正文
  12. mail_msg = """
  13. <p>使用Python发送邮件
  14. <br>
  15. <p><a href="http://www.baidu.com">这是一个超链接</p>
  16. """
  17. message = MIMEText(mail_msg,"html","utf-8")
  18. #发件人的名字
  19. message["From"] = Header("Kiku","utf-8")
  20. #收件人名字
  21. message["To"] = Header("Tian","utf-8")
  22. #邮件标题
  23. message["Subject"] = "Python发送邮件测试"
  24. try:
  25. #使用QQ邮箱发送
  26. smtp = smtplib.SMTP_SSL("smtp.qq.com",465)
  27. #登录邮箱
  28. smtp.login(sender,password)
  29. #发送邮件
  30. smtp.sendmail(sender,receiver,message.as_string())
  31. print("邮件已发送!")
  32. except smtplib.SMTPException as e:
  33. print("Error!发送失败",e)

3.发送带附件的邮件

附件实际上时另一种格式的MIMEText,所以构造邮件消息体时需要使用MIMEMultipart来构造复合类型的消息体,然后加入文本和附件,其次要用MIMEApplication指定文件类型。

代码显示如下:

  1. import smtplib
  2. #模块导入
  3. from email.mime.text import MIMEText
  4. from email.mime.multipart import MIMEMultipart
  5. from email.mime.application import MIMEApplication
  6. from email.header import Header
  7. #邮箱用户名
  8. sender = "xxx@qq.com"
  9. #邮箱授权码
  10. password = "xxx"
  11. #收件人
  12. receiver = "xxx@qq.com"
  13. #指定复合类型消息体
  14. message = MIMEMultipart()
  15. #发件人的名字
  16. message["From"] = Header("Kiku","utf-8")
  17. #收件人名字
  18. message["To"] = Header("Tian","utf-8")
  19. #邮件标题
  20. message["Subject"] = "Python发送邮件测试"
  21. #邮件正文
  22. mail_msg = MIMEText('hello, this is email content.')
  23. message.attach(mail_msg)
  24. #添加附件
  25. zipFile = "D:\桌面\数据结构.zip"
  26. zipApart = MIMEApplication(open(zipFile,'rb').read())
  27. zipApart.add_header('Content-Disposition','attachment',filename=zipFile)
  28. message.attach(zipApart)
  29. try:
  30. #使用QQ邮箱发送
  31. smtp = smtplib.SMTP_SSL("smtp.qq.com",465)
  32. #登录邮箱
  33. smtp.login(sender,password)
  34. #发送邮件
  35. smtp.sendmail(sender,receiver,message.as_string())
  36. print("邮件已发送!")
  37. except smtplib.SMTPException as e:
  38. print("Error!发送失败",e)

注意:

  1. 附件地址一定要准确,否则会报路径错误
  2. 其他格式文件与例题处理方式相同,MIMEApplication适应所有类型的文件

二、接收电子邮件

接收邮件有两种常用的协议:POP3和IMAP协议,两者最大的区别就是POP3协议下用户在客户端的操作不会反馈到服务器上,二IMAP协议下用户在客户端做的任何改变都会在服务器上同步。

下面分别介绍这两种协议的使用方法:


1.使用POP3协议下载邮件

步骤详细解析可参考:http://t.csdn.cn/WIvPs

  1. import poplib
  2. #模块导入
  3. from email.parser import Parser
  4. #登录邮箱用户名
  5. username = "xxx@qq.com"
  6. #登录邮箱授权码
  7. password = "xxx"
  8. #连接邮箱服务器
  9. pop_server = poplib.POP3_SSL("pop.qq.com",995)
  10. #打印邮箱服务器上的欢迎文字
  11. print(pop_server.getwelcome().decode("utf-8"))
  12. #登录邮箱服务器
  13. pop_server.user(username)
  14. pop_server.pass_(password)
  15. #打印邮箱账号当前状态(第一个返回值为邮件数,第二个返回值为占用空间)
  16. print("server stat",pop_server.stat())
  17. #获取邮件列表
  18. resp, mails,octets = pop_server.list()
  19. print(mails)
  20. #获取最新一封邮件
  21. index = len(mails)
  22. resp, lines, octets = pop_server.retr(index)
  23. msg_content = b'\r\n'.join(lines).decode("utf-8")
  24. #解析邮件
  25. msg = Parser().parsestr(msg_content)
  26. #根据索引号直接删除邮件
  27. pop_server.dele(index)
  28. #关闭连接
  29. pop_server.quit()

如果能连接邮箱并且列出邮件数量,说明代码正确。


2.使用IMAP协议下载邮件

  1. import imaplib
  2. import email
  3. #登录邮箱用户名
  4. username = "xxx@qq.com"
  5. #登录邮箱授权码
  6. password = "xxxx"
  7. #连接邮箱服务器
  8. imap_server = imaplib.IMAP4_SSL("imap.qq.com",993)
  9. #登录邮箱服务器
  10. imap_server.login(username,password)
  11. print("==========LOG==========")
  12. imap_server.print_log()
  13. print("=======================")
  14. #获取邮件目录
  15. resp, data = imap_server.list()
  16. print(data)
  17. #选择默认收件箱并打印邮件数量
  18. res, data = imap_server.select('INBOX')
  19. print(res,data)
  20. print(data[0])
  21. #获取最新邮件
  22. typ, lines = imap_server.fetch(data[0],'(RFC822)')
  23. #解析邮件
  24. msg = email.message_from_string(lines[0][1].decode('utf-8'))
  25. #关闭连接
  26. imap_server.close()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/701887
推荐阅读
相关标签
  

闽ICP备14008679号