首页 > 编程 > Python > 正文

简单实现python收发邮件功能

2020-02-16 11:30:44
字体:
来源:转载
供稿:网友

今天记录一下如何使用python收发邮件,知识要点在python内置的poplib和stmplib模块的使用上。

1. 准备工作

首先,我们需要有一个测试邮箱,我们使用新浪邮箱,而且要进行如下设置:

在新浪邮箱首页的右上角找到设置->更多设置,然后在左边选择“客户端/pop/imap/smtp”:

最后,将Pop3/smtp服务的服务状态打开即可:

2. poplib接收邮件

首先,介绍一下poplib登录邮箱和下载邮件的一些接口:

self.popHost = 'pop.sina.com' self.smtpHost = 'smtp.sina.com' self.port = 25 self.userName = 'xxxxxx@sina.com' self.passWord = 'xxxxxx' self.bossMail = 'xxxxxx@qq.com' 

我们需要如上一些常量,用于指定登录邮箱以及pop,smtp服务器及端口。我们调用poplib的POP3_SSL接口可以登录到邮箱。

# 登录邮箱 def login(self):  try:   self.mailLink = poplib.POP3_SSL(self.popHost)   self.mailLink.set_debuglevel(0)   self.mailLink.user(self.userName)   self.mailLink.pass_(self.passWord)   self.mailLink.list()   print u'login success!'  except Exception as e:   print u'login fail! ' + str(e)   quit() 

在登录邮箱的时候,很自然,我们需要提供用户名和密码,如上述代码所示,使用非常简单。
登录邮箱成功后,我们可以使用list方法获取邮箱的邮件信息。我们看到list方法的定义:

def list(self, which=None):  """Request listing, return result.   Result without a message number argument is in form  ['response', ['mesg_num octets', ...], octets].   Result when a message number argument is given is a  single response: the "scan listing" for that message.  """  if which is not None:   return self._shortcmd('LIST %s' % which)  return self._longcmd('LIST') 

我们看到list方法的注释,其中文意思是,list方法有一个默认参数which,其默认值为None,当调用者没有给出参数时,该方法会列出所有邮件的信息,其返回形式为 [response, ['msg_number, octets', ...], octets],其中,response为响应结果,msg_number是邮件编号,octets为8位字节单位。我们看一看具体例子:
('+OK ', ['1 2424', '2 2422'], 16)
这是一个调用list()方法以后的返回结果。很明显,这是一个tuple,第一个值sahib响应结果'+OK',表示请求成功,第二个值为一个数组,存储了邮件的信息。例如'1 2424'中的1表示该邮件编号为1。
下面我们再看如何使用poplib下载邮件。

# 获取邮件 def retrMail(self):  try:   mail_list = self.mailLink.list()[1]   if len(mail_list) == 0:    return None   mail_info = mail_list[0].split(' ')   number = mail_info[0]   mail = self.mailLink.retr(number)[1]   self.mailLink.dele(number)    subject = u''   sender = u''   for i in range(0, len(mail)):    if mail[i].startswith('Subject'):     subject = mail[i][9:]    if mail[i].startswith('X-Sender'):     sender = mail[i][10:]   content = {'subject': subject, 'sender': sender}   return content  except Exception as e:   print str(e)   return None             
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表