为了可以实现邮件发送功能。首先。我们须要了解一下邮件的发送过程是什么样子的,此处不再具体说明,请大家自行搜索或查看

p=438">http://www.sogouqa.com/?p=438

在了解了邮件的发送过程后,为了实现邮件的全自己主动匿名发送,我们须要通过windows的命令行,解析邮件的匿名server。然后使用匿名server,发送邮件到对应的邮箱

代码例如以下:

def _get_mail_exchanger(domain_name,name_server=""):
#print domain_name
temp_file=os.getenv("temp")+"\\temp.lsh"
os.system("nslookup -qt=mx "+domain_name+" "+name_server+" >"+temp_file+" 2>&1")
f=open(temp_file)
c=f.read()
f.close()
os.remove(temp_file)
#print c
internet_addresses_map=_get_internet_address(c)
mail_exchangers=re.findall(r"mail\s+exchanger\s*=\s*(\S+)",c)
#mail_exchangers=[internet_addresses_map.get(i,i) for i in mail_exchangers]
mail_exchangerIPs=[]
for i in mail_exchangers:
try:
mail_exchangerIPs.append(internet_addresses_map[i])
except:
ip=_getIP(i)
if ip:
mail_exchangerIPs.append(ip) if mail_exchangerIPs or name_server:
print "mail_exchangers",mail_exchangerIPs
return mail_exchangerIPs
else:
print "mail_exchangers from 预配置",g_mail_exchanger.get(domain_name,[])
return g_mail_exchanger.get(domain_name,[])

当中有个函数用于获取匿名邮箱服务器地址,使用正则分析返回值。代码例如以下:

def _get_internet_address(content):
internet_addresses=re.findall(r"(\S+)\s+internet\s+address\s*=\s*(\S+)",content)
internet_addresses_map={}
for internet_address in internet_addresses:
internet_addresses_map[internet_address[0]]=internet_address[1]
return internet_addresses_map

然后,有了地址后,我们须要通过解析出地址的IP,相同,使用windows命令获取结果并正则分析获取IP,代码例如以下:

def _getIP(domain_name,name_server=""):
temp_file=os.getenv("temp")+"\\temp.lsh"
os.system("nslookup -qt=a "+domain_name+" "+name_server+" >"+temp_file+" 2>&1")
f=open(temp_file)
c=f.read()
f.close()
os.remove(temp_file)
ips=re.findall(domain_name+r"\s*Address\s*:\s*(\S+)",c,re.I) if ips:
return ips[0][0]
elif name_server=="":
return _getIP(domain_name,"8.8.8.8")
else:
return None

有了邮箱server的IP,剩下的事情就是使用IP去发送邮件了。代码比較简单

def _send_to_mail_exchanger(mail_exchanger,mail_from,rcpt_to,From="",To="",Subject="",Date=None,Body="",attachments=None,encoding="gbk"):
import smtplib,email
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage # 构造MIMEMultipart对象做为根容器
main_msg=email.MIMEMultipart.MIMEMultipart()
# 设置根容器属性
main_msg['From'] = From
main_msg['To'] = To
main_msg['Subject'] = Subject
if Date:
main_msg['Date'] = Date
else:
main_msg['Date'] = email.Utils.formatdate() # 构造MIMEText对象做为邮件显示内容并附加到根容器
text_msg = email.MIMEText.MIMEText(Body,'html', encoding)
main_msg.attach(text_msg) # 构造MIMEBase对象做为文件附件内容并附加到根容器
if attachments:
for attachment in attachments:
if not os.path.isfile(attachment):
continue
if IsImage(attachment):
try:
fp = open(attachment, "rb")
file_msg = MIMEImage(fp.read())
fp.close()
file_msg.add_header("Content-ID", os.path.basename(attachment).replace(".jpg", "").replace(".png", ""))
main_msg.attach(file_msg)
except:
pass
else:
file_msg=email.MIMEBase.MIMEBase("application","octet-stream")
f=open(attachment,'rb')
file_msg.set_payload(f.read())
f.close()
email.Encoders.encode_base64(file_msg)
file_msg.add_header('Content-Disposition','attachment',filename=os.path.basename(attachment))
main_msg.attach(file_msg) # 用smtp发送邮件
data=main_msg.as_string()
for i in range(2):
try:
Log(mail_exchanger)
server=smtplib.SMTP(mail_exchanger)
Log(mail_from)
Log(rcpt_to)
ret=server.sendmail(mail_from,rcpt_to,data)
break
except:
import traceback
Log(traceback.format_exc()) ret=False
try:
server.quit()
except:
pass
try:
server.quit()
except:
pass if ret==False or ret:
#print "发往例如以下的邮件失败:",rcpt_to
return False
return True

ok,这样把整个流程整理清楚后,就能够自己主动发送邮件了

转载请注明出处:http://blog.csdn.net/sogouauto

Python写自己主动化之邮件发送(匿名)的更多相关文章

  1. python+robot framework实现测报告定制化和邮件发送

    前面已经介绍了python+robot framework自动化框架和基本原理的实现,详情请看 python+robot framework接口自动化测试 本章主要讲解报告已经产生那如何以自动化的方式 ...

  2. 用python做自己主动化測试--对server端的自己主动化測试(3)-很多其它http client实例

    上一篇中仅仅是实现了一个非常easy的http client功能,request还提供了keep alive, SSL, 多文件上传,cookie 管理功能,http requests头管理等丰富的功 ...

  3. 用python做自己主动化測试--绘制系统性能趋势图和科学计算

    在性能測试中.我们常常须要画出CPU memory 或者IO的趋势图. 预计大学里.大多数人都学习过matlib, 领略了matlib绘图的强大. python提供了强大的绘图模块matplotlib ...

  4. Windows命令实现匿名邮件发送

    在日常工具开发中,常常会有发送邮件的需求.在一些高级语言中,如Python.C#中,都有专门的邮件发送模块,如Python 中的 smtplib 模块.那么.一封邮件究竟是怎样发送到一个特定的邮箱呢? ...

  5. Robot Framework自己主动化測试框架之我见

    一些自己主动化測试现状: 盲目的去做自己主动化,终于以失败告终. 觉得是能提高效率的事情.却推广不下去: 事实上上述问题产生的原因是: 自己主动化測试案例稳定性不高,可维护性比較差: 自己主动化測试工 ...

  6. 【Linux】结合Python 简易实现监控公司网站,邮件发送异常

    背景 由于一些原因,博主负责测试的网站的服务器切换到了香港,切换后出现了多次访问超时的情况 于是主动请缨写一个自动监测的脚本,本来准备完全使用shell来写,后来发现shell发送邮件只能在测试机之间 ...

  7. python SMTP邮件发送(转载)

    Python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. py ...

  8. Python 邮件发送

    python发送各类邮件的主要方法   python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法,这里写写自己的的心得,也请高手给些指点.     一.相关模块介绍 ...

  9. Python Selenium unittest+HTMLTestRunner实现 自动化测试及发送测试报告邮件

    1.UI测试框架搭建-目录结构 2. 文件介绍 2.1.baseinfo->__init__.py 配置文件定义基础参数 #-*-coding:utf-8-*- #测试用例配置参数 base_u ...

随机推荐

  1. 用PowerDesigner对现有的数据库反向工程建立E-R图

    由于早期的一个项目在数据库设计建立时没有输出为E-R图,偶在对此项目进行二次改造升级时则使用了PD对原有的数据库进行反向工程,即根据数据源将数据库的的所有表生成为E-R图结构,我使用的是PD 15,反 ...

  2. 2.Java基础:方法定义和调用

    一.方法的定义 1.类的方法代表的是实力的某种行为(或功能) 方法的定义:方法类型 . 方法签名 . 方法体 2.定义类的方法 访问修饰符 类型 方法名(参数列表){ ///方法体 } 3.把方法当作 ...

  3. 红黑树 - C++代码实现

    红黑树的介绍 红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树.红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键 ...

  4. java使用ssh访问Linux的项目jscraft

    一.gradle地址 // https://mvnrepository.com/artifact/com.jcraft/jsch compile group: 'com.jcraft', name: ...

  5. DCDC纹波小实验

    关于使用示波器測试纹波的注意事项 使用示波器的AC耦合方式測量 因为示波器的头套easy引人噪声,因此在測试前必需把探头的头套去掉 因为电源的高频噪声非常easy通过小电感就能够滤掉,因此更关心的是中 ...

  6. php - 中文字符串分割

    //先删除掉非中文的字体$str = preg_replace('/[^\x{4e00}-\x{9fa5}]/u', '', $str);//经过测试中文占3个篇幅$re = chunk_split( ...

  7. python标准库介绍——15 fileinput 模块详解

    ``fileinput`` 模块允许你循环一个或多个文本文件的内容, 如 [Example 2-1 #eg-2-1] 所示. ====Example 2-1. 使用 fileinput 模块循环一个文 ...

  8. [QT] 小知识集锦

    qt 中关于 QWidget 的背景颜色和背景图片的设置 首先设置autoFillBackground 属性为真 然后定义一个QPalette 对象 设置QPalette 对象的背景属性(颜色或图片) ...

  9. hdu4901The Romantic Hero

    #include<iostream> #include<map> #include<string> #include<cstring> #include ...

  10. vim+cscope简易教程

    Cscope具有纯正的Unix血统,它最早是由贝尔实验室为PDP-11计算机开发的,后来成为商用的AT&T Unix发行版的组成部分.直到2000年4月,这个工具才由SCO公司以BSD lic ...