pyhon使用http代理服务器和POP3、SMTP邮件服务器

原创 2006年06月05日 21:33:00

python标准库已包含对http的支持,通过很简单的办法就可以直接使用http代理服务器获取网页数据:

import httplib
host,port = "192.168.131.54" , "8086" #http proxy server ip and port
conn = httplib.HTTPConnection(host, port)
conn.request(method,url)
print(r.status,r.reason)
print r.read()
python自带的库文件python/lib/poplib.py支持通过pop3接收邮件
该文件末尾自带测试函数,可以直接运行poplib.py:
poplib pop.126.com yourname yourpassword
值得学习的是,在python的库文件中,很多都是自带测试程序,一般在文件末尾,形式如下:
if __name__ == "__main__":
    a = POP3("10.3.4.3","3128")
    print ="this is a test"
这样,直接运行库文件就可以看到测试效果,同时也不干扰正常的import使用。
如果需要通过代理来访问pop,则需要做一点额外的工作,简单起见,直接在poplib.py上面修改,首先复制一份到自己的工作目录,然后修改 class POP3 的 __init__函数:
    def __init__(self, host, port = POP3_PORT):
        self.host = "10.3.4.3"
        self.port = "3128"
        msg = "getaddrinfo returns an empty list"
        self.sock = None
         
        for res in socket.getaddrinfo(self.host, self.port, 0, socket.SOCK_STREAM):
            af, socktype, proto, canonname, sa = res
            try:
                self.sock = socket.socket(af, socktype, proto)
                self.sock.connect(sa)
            except socket.error, msg:
                if self.sock:
                    self.sock.close()
                self.sock = None
                continue
            break
        if not self.sock:
            raise socket.error, msg
        self.file = self.sock.makefile('rb')
        self._debugging = 0
        self._putline("CONNECT 220.181.15.121:110 HTTP/1.0/r/n")  #pop.126.com的ip地址
        msg_proxy = self._getline()
        msg_proxy = self._getline()
        self.welcome = self._getresp()
简单起见,上面的代理服务器和pop服务器的ip地址是直接添上去的,实际使用用时需要适当修改成方便应用的形式。
 
python通过smtp认证服务器发邮件的操作也是相当简单:
(如需要支持中文,注意指明编码,并保持所有编码一致)
 
# -*- coding: GB2312 -*-
import smtplib

addr_from = "测试邮件发送地址"<mymail@gmail.com>"
addr_to = "测试邮件接收地址"<mymail@gmail.com>"
smtp = "smtp.gamil.com"
head_format = """To: %s/nFrom: %s/nContent-Type: text/plain;/ncharset="gb2312"/nSubject: Test mail from python/n/n"""
body = "This is a test mail./nSecond line./n3rd line."

server = smtplib.SMTP('smtp.changhong.com')
server.login("name","password")
head = head_format%(addr_to,self.addr_from)
msg = head + body
server.sendmail(self.addr_from,addr_to ,msg)
server.quit()
另外如果需要发送html格式的邮件则又要额外多费一点功夫了,一下是一个简单的发送html格式邮件的py文件,我已经把编码固定成了GB2312:
# -*- coding: GB2312 -*-
class smtp_server:
 server = None
 subject = "Python mail sender"
 addr_from = """PythonMail<
abc@126.com>"""
 addr_to = """PythonMail<
abc@126.com>"""
 
 charset = 'GB2312'
 
 def __init__(self):
  import smtplib
  self.server = smtplib.SMTP("smtp.126.com")
  self.server.login("user_name","mypass")
  return
 
 def __del__(self):
  if(self.server != ""):
   self.server.quit()
  return  
    
 def send(self, addr_from , addr_to ,msg):
  self.server.sendmail(addr_from , addr_to , msg)
  return
 
 def send_html(self, addr_from , addr_to ,html , subject):
  msg = self.create_html_mail(html,None,subject,addr_from,addr_to)
  self.send(addr_from,addr_to,msg)
  return
 
 def create_html_mail(self,html, text=None ,subject=None, addr_from=None , addr_to=None):
    
  "Create a mime-message that will render as HTML or text, as appropriate"
  import MimeWriter
  import mimetools
  import cStringIO
  import base64
  
  charset = self.charset
  if subject is None:
   subject=self.subject
  if addr_from is None:
   addr_from=self.addr_from
  if addr_to is None:
   addr_to=self.addr_to  
  
  if text is None:
   # Produce an approximate textual rendering of the HTML string,
   # unless you have been given a better version as an argument
   import htmllib, formatter
   textout = cStringIO.StringIO(  )
   formtext = formatter.AbstractFormatter(formatter.DumbWriter(textout))
   parser = htmllib.HTMLParser(formtext)
   parser.feed(html)
   parser.close(  )
   text = textout.getvalue(  )
   del textout, formtext, parser
  
  out = cStringIO.StringIO(  ) # output buffer for our message
  htmlin = cStringIO.StringIO(html)
  txtin = cStringIO.StringIO(text)
  
  writer = MimeWriter.MimeWriter(out)
  
  # Set up some basic headers. Place subject here
  # because smtplib.sendmail expects it to be in the
  # message body, as relevant RFCs prescribe.
  writer.addheader("From",addr_from)
  writer.addheader("To",addr_to)
  writer.addheader("Subject", subject)
  writer.addheader("MIME-Version", "1.0")
  
  # Start the multipart section of the message.
  # Multipart/alternative seems to work better
  # on some MUAs than multipart/mixed.
  writer.startmultipartbody("alternative")
  writer.flushheaders(  )
  
  # the plain-text section: just copied through, assuming iso-8859-1
  subpart = writer.nextpart(  )
  pout = subpart.startbody("text/plain", [("charset", charset)])
  pout.write(txtin.read(  ))
  txtin.close(  )
  
  # the HTML subpart of the message: quoted-printable, just in case
  subpart = writer.nextpart(  )
  subpart.addheader("Content-Transfer-Encoding", "quoted-printable")
  pout = subpart.startbody("text/html", [("charset", charset)])
  mimetools.encode(htmlin, pout, 'quoted-printable')
  htmlin.close(  )
  
  # You're done; close your writer and return the message body
  writer.lastpart(  )
  msg = out.getvalue(  )
  out.close(  )
  return msg
if __name__=="__main__":
    f = open("test.html", 'r')
    html = f.read(  )
    f.close(  )
    fromAddr = """PythonMail<
abc@126.com>"""
    toAddr = """PythonMail<
abc@126.com>"""
    server = smtp_server()
    #message = server.create_html_mail(html)
    #server.send(fromAddr, toAddr, message)
    server.send_html(fromAddr, toAddr,html,"subject")

相应修改smtp服务器的地址和认证信息,保存为"html_smtp.py"文件,直接运行即可发送内容为当前目录下名为:“test.html”的html格式邮件


pyhon使用http代理服务器和POP3、SMTP邮件服务器

python标准库已包含对http的支持,通过很简单的办法就可以直接使用http代理服务器获取网页数据:import httplibhost,port = "192.168.131.54" , "80...
  • Michael_shao
  • Michael_shao
  • 2011年01月19日 14:56
  • 789

邮件协议POP3/IMAP/SMTP服务的区别 常用邮箱的 IMAP/POP3/SMTP 设置

通过网上查找的资料和自己的总结完成了下面的文章,看完之后相信大家对这三种协议会有更深入的理解。如有错误的地方望指正。 POP3   POP3是Post Office Protocol 3的简称,即邮...
  • a2241076850
  • a2241076850
  • 2016年09月22日 18:06
  • 18857

Windows server 2003 SMTP/POP3 服务器架设实验

Windows server 2003 SMTP/POP3 服务器架设实验一、实验目标掌握windows server 2003 SMPT和POP3服务器架设 理解SMTP/POP3邮件收发原理二、...
  • shile
  • shile
  • 2015年10月14日 10:54
  • 1209

Lotus Notes通过POP3和SMTP来收发internet邮件(设置domino邮件为例)

一、       前提及说明1、            注意n        如果使用POP/SMTP的notes,如果inotes密码更改,notes联系人帐户中相应的密码也要更改n        ...
  • jackygits
  • jackygits
  • 2010年11月17日 15:20
  • 9032

邮件收发原理(POP3/SMTP)

现在多邮件类软件基本上都可以设置POP3/SMTP了. 同类软件中比较优秀的有:FoxMail,HansExpress,DreamMail等. 下面简单介绍下POP3/SMTP的配置,希望对你有帮...
  • hunanchenxingyu
  • hunanchenxingyu
  • 2014年04月14日 11:02
  • 1565

Mac 中 mail的使用POP IMAP SMTP

常用邮箱的使用:           进入mail,按提示相关yo
  • houseq
  • houseq
  • 2014年09月18日 17:27
  • 18446

什么是POP3和SMTP?如何用命令行来收发邮件。

POP3 :是Post Office Protocol 3的简称,是访问Internet上电子邮箱的常用方法。 POP3服务允许你设置你的本地浏览器的输入/输出邮件服务器名称,就像使用你的本地电子信箱...
  • guoxuequan
  • guoxuequan
  • 2008年09月19日 17:16
  • 5680

常用的邮箱服务器(SMTP、POP3)域名、端口汇总

【sina.com】 POP3服务器地址:pop3.sina.com.cn(端口:110) SMTP服务器地址:smtp.sina.com.cn(端口:25)    【sinaVIP】 POP3服务器...
  • zdqdj1
  • zdqdj1
  • 2015年08月27日 16:44
  • 4475

使用Nginx做邮件代理服务器配置

#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice;...
  • GQ2010
  • GQ2010
  • 2014年05月12日 08:14
  • 12026

ubuntu自己搭建邮件服务器

http://www.ixpub.net/thread-672704-1-1.html Ubuntu+Sendmail+Dovecot+Openwebmail搭建邮件服务器  1.安装ap...
  • psiitoy
  • psiitoy
  • 2014年04月08日 23:34
  • 4963
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:pyhon使用http代理服务器和POP3、SMTP邮件服务器
举报原因:
原因补充:

(最多只允许输入30个字)