`
izuoyan
  • 浏览: 8948942 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多

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)
printr.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格式邮件


分享到:
评论

相关推荐

    基于 Python POP3 和 SMTP 的邮件服务端和移动客户端课程设计【100012123】

    项目是基于 POP3 和 SMTP 的邮件服务端和移动客户端(安卓系统)的设计,设计一个邮件服务器和一个移动端(安卓系统)的邮件客户端,服务器端除了提供最基本的收发邮件功能之外,还应具有注册新用户、管理用户、群发...

    二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)

    SMTP (Simple Mail Transfer Protocol)邮件传送代理 (Mail Transfer Agent,MTA) 程序使用SMTP协议来发送电邮到接收者的邮件服务器。SMTP协议只能用来发送邮件,不能用来接收邮件。大多数的邮件发送服务器 (Outgoing...

    python实现邮件发送功能

    POP3是Post Office Protocol 3的简称,即邮局协议的第三个版本,他是规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的协议。它是因特网电子邮件的第一个离线协议的标准。POP3允许用户从服务器上把...

    python实现邮件收发

    (1) 可以查看与设置SMTP服务器和POP3服务器地址; (2) 通过输入用户名及密码,实现邮箱账号登录; (3) 可以查看邮箱内已收到的邮件,类似收件箱; (4) 可编辑新邮件,并发送给其他账号邮箱。

    zmail:Zmail使使用python3发送和检索电子邮件变得更加容易

    Zmail使使用python3发送和检索电子邮件变得更加容易。 无需手动添加-服务器地址,端口,合适的协议等-Zmail将为您完成此操作。 此外,使用python dict作为邮件也更加直观。 安装 Zmail仅在python3中运行,而无需第三...

    Python编程入门经典

    16.2.3 使用SMTP和smtplib发送 邮件 284 16.3 检索Internet邮件 286 16.3.1 使用mailbox解析本地 邮筒 286 16.3.2 使用poplib从POP3 服务器获取邮件 288 16.3.3 使用imaplib从IMAP 服务器获取邮件 290 16.3.4 安全的...

    Python核心编程第二版

     1.4 下载和安装Python   1.5 运行Python   1.5.1 命令行上的交互式解释器   1.5.2 从命令行启动脚本   1.5.3 集成开发环境   1.5.4 其他的集成开发环境和执行环境   1.6 Python文档   1.7 ...

    Python核心编程第二版(ok)

     1.4 下载和安装Python   1.5 运行Python   1.5.1 命令行上的交互式解释器   1.5.2 从命令行启动脚本   1.5.3 集成开发环境   1.5.4 其他的集成开发环境和执行环境   1.6 Python文档   1.7 ...

    Twisted-19.10.0-cp38-cp38.rar

    twisted.mail:IMAPv4,POP3,SMTP客户端和服务器 扭曲定位:与NMEA兼容的GPS接收机进行通讯的工具 twisted.names:DNS客户端和用于创建自己的DNS服务器的工具 twisted.trial:一种单元测试框架,可以与基于...

    Python实现发送与接收邮件的方法详解

    主要介绍了Python实现发送与接收邮件的方法,结合实例形式分析了Python基于smtplib库使用SMTP协议进行邮件发送及基于poplib库使用POP3服务器接收邮件的相关操作技巧,需要的朋友可以参考下

    Python的3行代码实现各种邮件的自动发送

    一、先开启各种邮箱的POP3/SMTP/IMAP和查看邮箱的服务器 https://blog.csdn.net/qq_42361748/article/details/88665991 二、编写代码,我用的是网易163邮箱 import yagmail #连接服务器 mail = yagmail.SMTP("邮箱....

    Robotask 任务机器人

    电子邮件 POP3/IMAP/SMTP 自动化(检查、发送和检索); SQL数据库自动化; 使用 Excel; 网络自动化(填写网络表单、网络操作); 处理图像(转换、调整大小、裁剪、翻转、水印等) 使用剪贴板、系统注册表、进程、...

    flyingrat:一个用于本地开发的简单邮件服务器

    它支持 SMTP 发送消息和 POP3 获取消息。 所有通过 SMTP 的消息都被放入一个(本地)邮箱中,这使您可以使用真实的电子邮件地址测试您的应用程序,而不会冒向这些收件人实际发送消息的风险。 运行简单的邮件服务器...

    AnsibleGroupwareServerRole:Ansible角色,用于管理邮件,联系人和日历服务器

    角色,用于管理邮件,联系人和日历服务器。 目录 特征 使用设置功能齐全的邮件服务器。 设置CalDAV / CardDAV服务器。 管理组件帐户。 要求 Debian GNU / Linux 10(Buster) SSL证书 Python Passlib(在控制主机...

    twisted:https

    twisted.mail :IMAPv4,POP3,SMTP客户端和服务器 twisted.positioning :与NMEA兼容的GPS接收机进行通讯的工具 twisted.names :DNS客户端和用于创建自己的DNS服务器的工具 twisted.trial :一个单元测试框架,...

    Mailu:孤岛式电子邮件分发-邮件服务器作为Docker映像

    标准电子邮件服务器,IMAP和IMAP +,SMTP和提交 高级电子邮件功能,别名,域别名,自定义路由 Web访问,多个Webmail和管理界面 用户功能,别名,自动回复,自动转发,获取的帐户 管理员功能,全局管理员,公告,每...

    ZeroMailProxy:ZeroMail的SMTPPOP3协议

    去做可用的命令行客户端在一个过程中启动POP3和SMTP服务器HTML / Markdown未处理支持HELO和VRFY SMTP服务器可能是多部分的问题命令行客户端发布变更自动创建秘密标志变更不仅向自己发送消息POP3服务器安装及使用...

    sslscan:SSLScan 测试启用 SSLTLS 的服务以发现支持的密码套件

    对 FTP、IMAP、POP3、SMTP 和 XMPP 的 STARTTLS 支持 执行 HTTP 连接 IPv4 和 IPv6 绑定到本地IP地址 Python 扩展 文本和 XML 输出 安装 要求: OpenSSL 1.0.0 或更高版本 海湾合作委员会 制作 制作 openssl-...

    RED HAT LINUX 6大全

    本书内容翔实、涉及领域广泛,并且提供了详细的例子和大量的参考资料(包括书籍、电子文档和Internet站点),是一本学习、使用和管理Linux不可多得的好书。 目 录 译者序 前言 第一部分 Red Hat Linux的介绍与安装 ...

    nginx(1-9-8).syno.tar官方镜像

    Nginx是用于HTTP,HTTPS,SMTP,POP3和IMAP协议的开源反向代理服务器,以及负载平衡器,HTTP缓存和Web服务器(原始服务器)。Nginx项目一开始就非常关注高并发,高性能和低内存使用。它获得了两节式BSD许可,并在...

Global site tag (gtag.js) - Google Analytics