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

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. Largest Number(leetcode 179)

    给定一个int数组(每个数字无前导0),要求用这些数字拼接出一个最大的数字. 解决思路: 对整个数组进行排序,把排序后的结果拼接起来. 那么如何进行排序呢?只需要定义一个比较函数,如果str(x)+s ...

  2. INFO ipc.Client:Retrying connect to server 9000

    hadoop使用bin/start_all.sh命令之后,使用jps发现datanode无法启动 This problem comes when Datanode daemon on the syst ...

  3. ubuntu 忘记root密码了不用怕,看这里

    方法来自这里:http://jingyan.baidu.com/article/8065f87fe20832233024985a.html

  4. java concurrent之ReentrantLock

    在编码的过程中.有时候我们不得不借助锁同步来保证线程安全.synchronizedkeyword在上一篇博客中已经介绍.自从JDK5開始,加入了还有一种锁机制:ReentrantLock. 二者的差别 ...

  5. C# 动态获取代码所在行号

    通过System.Diagnostics.StackTrace获取代码所在行号和文件信息 获取行号信息 /// <summary> /// Get line number of code ...

  6. Math.Celing、Math.Floor、Math.DivRem与Math.BigMul

    返回大于或等于指定数字的最小整数.例如: double a=Math.Celing(0.00);  //0 double a=Math.Celing(0.40);  //1 double a=Math ...

  7. Redis(二十一):Redis性能问题排查解决手册(转)

    性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息.通过这些信息来分析文章后面提到的一些性能指标. info命令输出的数 ...

  8. linux下使用find命令根据系统时间查找文件用法

    这篇文章主要为大家介绍了find 命令有几个用于根据您系统的时间戳搜索文件的选项. 这些时间戳包括 mtime 文件内容上次修改时间 atime 文件被读取或访问的时间ctime 文件状态变化时间 m ...

  9. Nginx用户认证配置方法详解(域名/目录)

    Nginx超级强大它可以单独为一个域名设置用户认证,方法也很简单我们只要生成用户认证的用户名和密码,然后再Nginx添加auth认证配置即可 Nginx可以为某一个域名单独加用户认证,具体做法如下: ...

  10. apache2部署django的错误

    apache的日志例如以下报错: /var/www/my_project/myproject/wsgi.py cannot be loaded as Python module ImportError ...