全部产品
云市场

1.Email

更新时间:2019-09-18 15:36:33

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

Parameters/参数说明

参数名称 参数类型 参数说明

Return Value/返回信息

  1. 暂无

Remarks/备注

  1. #注意s不能简单地传入‘name <addr@example.com>’,因为如果包含中文,需要通过Header对象进行编码。
  2. name, addr = parseaddr(s)
  3. #接收的是字符串而不是list,如果有多个邮件地址,用,分隔即可。
  4. msg['To']
  5. #加密SMTP 使用标准的25端口连接SMTP服务器时,使用的是明文传输,发送邮件的整个过程可能会被窃听。要更安全地发送邮件,可以加密SMTP会话,实际上就是先创建SSL安全连接,然后再使用SMTP协议发送邮件。
  6. smtp_server = 'smtp.gmail.com'
  7. smtp_port = 587
  8. server = smtplib.SMTP(smtp_server, smtp_port)
  9. server.starttls()
  10. # 剩下的代码和前面的一模一样:
  11. server.set_debuglevel(1)

常用邮箱端口说明:

邮箱 SMTP服务器 SSL协议端口 非SSL协议端口
163 smtp.163.com 465或者994 25
qq smtp.qq.com 465或587 25

邮件发送

  1. 1.构造MIMEText对象时,第一个参数就是邮件正文,第二个参数是MIMEsubtype,传入'plain'表示纯文本,最终的MIME就是'text/plain',最后一定要用utf-8编码保证多语言兼容性。
  2. 2.set_debuglevel(1)就可以打印出和SMTP服务器交互的所有信息。SMTP协议就是简单的文本命令和响应。login()方法用来登录SMTP服务器,sendmail()方法就是发邮件,由于可以一次发给多个人,所以传入一个list,邮件正文是一个stras_string()把MIMEText对象变成str

Example/实例

Example 邮件发送

  1. def _format_addr(s):
  2. name, addr = parseaddr(s)
  3. return formataddr((Header(name, 'utf-8').encode(), addr))
  4. pass
  5. def EmailSend():
  6. from_addr = '2771403***@qq.com'
  7. password ='emi**********ega'
  8. to_addr ='136*****384@163.com'
  9. smtp_server = 'smtp.qq.com'
  10. msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
  11. msg['From'] = _format_addr('Python爱好者 <%s>' % from_addr)
  12. msg['To'] = _format_addr('管理员 <%s>' % to_addr)
  13. msg['Subject'] = Header('来自SMTP的问候……', 'utf-8').encode()
  14. server = smtplib.SMTP(smtp_server, 25)
  15. server.set_debuglevel(1)
  16. server.login(from_addr, password)
  17. server.sendmail(from_addr, [to_addr], msg.as_string())
  18. server.quit()
  19. pass

Example 加密邮件发送

  1. #加密邮件
  2. def _format_addr(s):
  3. name, addr = parseaddr(s)
  4. return formataddr((Header(name, 'utf-8').encode(), addr))
  5. pass
  6. def EmailSend():
  7. from_addr = '2771403***@qq.com'
  8. password ='emi**********ega'
  9. to_addr ='136*****384@163.com'
  10. #smtp_server = 'smtp.qq.com'
  11. msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
  12. msg['From'] = _format_addr('Python爱好者 <%s>' % from_addr)
  13. msg['To'] = _format_addr('管理员 <%s>' % to_addr)
  14. msg['Subject'] = Header('来自SMTP的问候……', 'utf-8').encode()
  15. smtp_server = 'smtp.gmail.com'
  16. smtp_port = 587
  17. server = smtplib.SMTP(smtp_server, smtp_port)
  18. server.starttls()
  19. # 剩下的代码和前面的一模一样:
  20. server.set_debuglevel(1)
  21. server.login(from_addr, password)
  22. server.sendmail(from_addr, [to_addr], msg.as_string())
  23. server.quit()
  24. pass

Example 添加附件发送

  1. #增加附件
  2. def _format_addr(s):
  3. name, addr = parseaddr(s)
  4. return formataddr((Header(name, 'utf-8').encode(), addr))
  5. pass
  6. def EmailSend():
  7. from_addr = '2771403***@qq.com'
  8. password ='emi**********ega'
  9. to_addr ='136*****384@163.com'
  10. smtp_server = 'smtp.qq.com'
  11. msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
  12. msg['From'] = _format_addr('Python爱好者 <%s>' % from_addr)
  13. msg['To'] = _format_addr('管理员 <%s>' % to_addr)
  14. msg['Subject'] = Header('来自SMTP的问候……', 'utf-8').encode()
  15. with open('test/test.png', 'rb') as f:
  16. # 设置附件的MIME和文件名,这里是png类型:
  17. mime = MIMEBase('image', 'png', filename='test.png')
  18. # 加上必要的头信息:
  19. mime.add_header('Content-Disposition', 'attachment', filename='test.png')
  20. mime.add_header('Content-ID', '<0>')
  21. mime.add_header('X-Attachment-Id', '0')
  22. # 把附件的内容读进来:
  23. mime.set_payload(f.read())
  24. # 用Base64编码:
  25. encoders.encode_base64(mime)
  26. # 添加到MIMEMultipart:
  27. msg.attach(mime)
  28. server = smtplib.SMTP(smtp_server, 25)
  29. server.set_debuglevel(1)
  30. server.login(from_addr, password)
  31. server.sendmail(from_addr, [to_addr], msg.as_string())
  32. server.quit()
  33. pass

接收Email

  1. print(myemail.recive('xxxxxxxx@qq.com','oqkgbaghkakrbiah','pop.qq.com'))
  2. >>>[{'From': ' <xxxxxxxx@qq.com>', 'To': ' <xxxxxxxx@qq.com>', 'Subject': '使用python发送邮件的内容', 'Text': 'python发送邮件'}]

Parameters/参数说明

参数名称 参数类型 参数说明
email string email地址
password string 登录密码
pop3_server string 服务地址
length int 读取几个邮件,从时间新的开始读,默认读取最新的

Return Value/返回信息

  1. 返回一个字典数组,每个字典代表一个邮件的内容

Remarks/备注

POP3和IMAP

  1. POP是指邮局协议,目的是让用户可以访问邮箱服务器中的邮件,允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。
  2. 后来又出现了IMAP协议(Interactive Mail Access Protocol),即交互式邮件访问协议,与POP3的不同在于:开启了IMAP后,在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。

  1. 1.构造MIMEText对象时,第一个参数就是邮件正文,第二个参数是MIMEsubtype,传入'plain'表示纯文本,最终的MIME就是'text/plain',最后一定要用utf-8编码保证多语言兼容性。
  2. 2.set_debuglevel(1)就可以打印出和SMTP服务器交互的所有信息。SMTP协议就是简单的文本命令和响应。login()方法用来登录SMTP服务器,sendmail()方法就是发邮件,由于可以一次发给多个人,所以传入一个list,邮件正文是一个stras_string()把MIMEText对象变成str

Example/实例

poplib的常用方法:

方法 描述
POP3(server) 实例化POP3对象,server是pop服务器地址
user(username) 发送用户名到服务器,等待服务器返回信息
pass_(password) 密码
stat() 返回邮箱的状态,返回2元祖(消息的数量,消息的总字节)
list([msgnum]) stat()的扩展,返回一个3元祖(返回信息, 消息列表, 消息的大小),如果指定msgnum,就只返回指定消息的数据
retr(msgnum) 获取详细msgnum,设置为已读,返回3元组(返回信息, 消息msgnum的所以内容, 消息的字节数),如果指定msgnum,就只返回指定消息的数据
dele(msgnum) 将指定消息标记为删除
quit() 登出,保存修改,解锁邮箱,结束连接,退出

Example POP3接收

  1. from poplib import POP3
  2. p = POP3('pop.163.com')
  3. p.user('xxxxxxx@163.com')
  4. p.pass_('xxxxxxxx')
  5. p.stat()
  6. ...
  7. p.quit()

python中的imaplib包支持IMAP4常用方法:

方法 描述
IMAP4(server) 与IMAP服务器建立连接
login(user, pass) 用户密码登录
list() 查看所有的文件夹(IMAP可以支持创建文件夹)
select() 选择文件夹默认是”INBOX”
search() 三个参数,第一的是CHARSET,通常为None(ASCII),第二个参数不知到是干什么官方没解释

Example IMAOP4接收

  1. import getpass, imaplib
  2. M = imaplib.IMAP4()
  3. M.login(getpass.getuser(), getpass.getpass())
  4. M.select()
  5. typ, data = M.search(None, 'ALL')
  6. for num in data[0].split():
  7. typ, data = M.fetch(num, '(RFC822)')
  8. print 'Message %s\n%s\n' % (num, data[0][1])
  9. M.close()
  10. M.logout()