Robot Framework通过Python SMTP进行email收发测试。

工作中需要对发送的邮件进行过滤,方法基本属于ACL控制,即查看“源/目的”邮件地址,邮件标题,邮件正文,邮件附件等进行过滤。

所以需要先模拟一下用Python能否达到邮件Client,Server的功能,还有能否在server上显示发送的  “源/目的”邮件地址,邮件标题,邮件正文,邮件附件  这些信息。

如果能取到这些信息,然后就可以对这些字符串进行查找,然后判断过滤功能是否work的目的了。

 

现在咱们先看下邮件服务器:

 

mailserver.py:

import smtpd
import asyncore

class CustomSMTPServer(smtpd.SMTPServer):
    
    def process_message(self, peer, mailfrom, rcpttos, data):
        print 'Receiving message from:', peer
        print 'Message addressed from:', mailfrom
        print 'Message addressed to  :', rcpttos
        print 'Message length        :', len(data)
        print 'data                  :', data
        return

server = CustomSMTPServer(('172.18.0.100', 9999), None)

asyncore.loop()

这个就是邮件服务器,保存完后,直接双击运行就好,它会一直运行的。

 

UPDATE:

  将此邮件服务器做成类似于linux服务:

  1.将此程序放到/home目录下:

[root@Server init]# vim /home/mailserver.py 

import smtpd
import asyncore

class CustomSMTPServer(smtpd.SMTPServer):
    
    def process_message(self, peer, mailfrom, rcpttos, data):
        self.peer = peer
        self.mailfrom = mailfrom
        self.rcpttos = rcpttos
        self.data = data
        mail_log = open('/home/current_mail.log','wb+')
        mail_log.write(str('Receiving message from:')+ str(self.peer)+'\n')
        mail_log.write(str('Message addressed from:')+ str(self.mailfrom)+'\n')
        mail_log.write(str('Message addressed to  :')+ str(self.rcpttos)+'\n')
        mail_log.write(str('Message length        :')+ str(len(self.data))+'\n')
        mail_log.write(str('data                  :')+ str(self.data)+'\n')
        mail_log.close()
        return

server = CustomSMTPServer(('172.16.0.3', 9999), None)

asyncore.loop()

这个程序会在当前目录下创建邮件log,用来判断客户端发送的请求是否正确。

  

  2.在/etc/init目录下(不是/etc/init.d)创建mailserver.conf这个文件,然后填写如下配置:

[root@Server init]# vim mailserver.conf 
description "mailserver is in /home/mailserver.py"
author "xxx@xxx.com"

start on runlevel [2345]
stop on runlevel [!2345]

#env AN_ENVIRONMENTAL_VARIABLE=i-want-to-set

respawn

exec /home/mailserver.py

  3. 执行“initctl reload-configuration"命令

  4. 然后可以通过以下命令启动或关闭邮件服务器:

 

start mailserver
stop mailserver
restart mailserver

 

 

 

 

 

 

邮件客户端:

Step1: 先在pyton目录下创建一个自定义的文件夹“SelfEmailLibrary”(您的Python安装到哪里就相应的放到哪里):

F:\Python27\Lib\site-packages\SelfEmailLibrary

 

Step2: 将下面的代码复制到“mailsend.py”和“__init__.py”中。

 

mailsend.py:

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import Encoders
import os

class SendEmailUtility(object):


    ROBOT_LIBRARY_SCOPE = 'Global'
    
    def __init__(self):
        print 'send email utility'
        
    def send_mail_with_attachment(self, from_user, from_password, to, subject, text, attach, mailserver, serverport):
        self.mailserver = str(mailserver)
        self.serverport = int(serverport)
        msg = MIMEMultipart()
    
        msg['From'] = from_user
        msg['To'] = to
        msg['Subject'] = subject

        msg.attach(MIMEText(text))

        part = MIMEBase('application', 'octet-stream')
        part.set_payload(open(attach, 'rb').read())
        #Encoders.encode_base64(part)
        part.add_header('Content-Disposition',
               'attachment; filename="%s"' % os.path.basename(attach))
        msg.attach(part)

        mailServer = smtplib.SMTP(self.mailserver, self.serverport)
        mailServer.ehlo()
        #mailServer.starttls()
        mailServer.ehlo()
        #mailServer.login(from_user, from_password)
        mailServer.sendmail(from_user, to, msg.as_string())
        # Should be mailServer.quit(), but that crashes...
        mailServer.close()

    def send_mail_no_attachment(self, from_user, from_password, to, subject, text,
                                mailserver, serverport):
        self.mailserver = str(mailserver)
        self.serverport = int(serverport)
        
        msg = MIMEMultipart()

        msg['From'] = from_user
        msg['To'] = to
        msg['Subject'] = subject
        msg.attach(MIMEText(text))

        mailServer = smtplib.SMTP(self.mailserver, self.serverport)
        mailServer.ehlo()
        #mailServer.starttls()
        mailServer.ehlo()
        #mailServer.login(from_user, from_password)
        mailServer.sendmail(from_user, to, msg.as_string())
        # Should be mailServer.quit(), but that crashes...
        mailServer.close()

 

__init__.py:

from mailsend import SendEmailUtility
__version__ = '1.0'

class SelfEmailLibrary(SendEmailUtility):

       
    ROBOT_LIBRARY_SCOPE = 'GLOBAL'

Step3:创建一个脚本测试一下这两个function是否工作:

mailclient.py:

from SelfEmailLibrary import *


a = SendEmailUtility()

a.send_mail_no_attachment(from_user="aaa@aaa.com", from_password='', to="bbb@bbb.com", subject="selftry",
                          text="asdlfkajsdlfd", mailserver="172.18.0.100", serverport="9999")



a.send_mail_with_attachment(from_user="ddd@ddd.com", from_password='', to="ccc@ccc.com",
                            subject="selftry",text="bbbbbbbbbb", attach='simple.txt',
                            mailserver="172.18.0.100", serverport="9999")

 

Step4: 测试这俩函数对不对:

1. 先双击开启mailserver.py。

2. 执行mailclient.py。

3. 查看mailserver的显示是否正确:

 

可以看到,邮件的各个属性还有附件内容(simple.txt的内容就是“testkeyword”)都可以查看到。这样我们就可以通过查看mailserver收到的DATA来判断过滤功能了。

 

 

Note:

send_mail_with_attachmentsend_mail_no_attachment两个函数中的from_password参数其实没有用,可以删掉。然后如果你想用base64加密,可以取消注销掉Encoders.encode_base64(part)这一行。

其实功能已经实现了,要是想让它在RobotFramework中work就是轻而易举的事儿了。

转载于:https://www.cnblogs.com/bonjov1/p/4750357.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自动化环境搭建 1、Python(推荐使用ActivePython,这个版本PATH已经配好了,也安了一些像pip这样的包) 2、WxPython(安装,保持勾选状态,不要把勾去掉!!!) 3、安装rf,以管理员身份运行cmd, pip install robotframework 4、安装RIDE,以管理员身份运行cmd, pip install robotframework-ride 5、安装Selenium2Library,以管理员身份运行cmd,pip install robotframework-selenium2library 6、安装python32位拓展,以管理员身份运行cmd,pip install pywin32 7、安装DatabaseLibrary , 以管理员身份运行cmd, pip install robotframework-databaselibrary 安装VCForPython27 安装vcredist_x64 安装驱动MySQL-python-1.2.3.win-amd64-py2.7(根据电脑自行选择32,64) 8、pip install pyodbc 需要更新setuptools,运行pip install --upgrade setuptools pip(第一遍报错,在执行一遍命令即可) 然后安装连接pyodbc的驱动mysql-connector-odbc-5.3.9-winx64.msi。(安装到这一步就完成了。下面是测试步骤,所有安装完成后再测试也可以)安装完成后打开   打开数据源添加驱动(添加按钮)   填写完整后点击test返回successful表示成功   选择库 打开robot新建测试用例输入如下内容   Connect To Database Using Custom Params 连接数据库的关键字 pyodbc 连接数据库的工具 database='test', 数据库的名字 user='root', 连接数据库的用户名 password='', 密 码 host='127.0.0.1', 数据库的IP port=3306, 数据库的端口号 Driver='{MySQL ODBC 5.3 Unicode Driver}' 数据库的驱动 query 查询语句 Disconnect From Database 断开连接数据库   Execute Sql String     执行sql语句 9、安装AutoItLibrary库(模拟键盘鼠标操作) 安装(选择x64安装) (路径改一下,因为program files(x86)路径win系统似乎会禁止读写,改成c:\AutoIt3即可) 安装 解压后,使用cmd(管理员启动),cd到包目录执行python setup.py install命令安装 9、pip freeze检查安装包 启动ride: 命令进入ride: 1:cmd; 2:cd c:\; 3:cd Python27; 4:cd Scripts; 5:输入命令:python ride.py。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值