最近上课老师要求结合SOA风格,基于阿里云的邮件服务,实现一个能够发送电子邮件消息的Web service服务(要求使用soap、rest两种风格) 这是要求的三种方法
sendEmail(String _url,String _payload) //邮件地址为_url,内容为_payload sendEmailBatch(String[] _url,String _payload) //批量发送邮件 validateEmailAddress(String _url) //验证是否为有效的邮件地址最开始遇到这题目是一脸懵逼的,什么是soap、什么又是rest? 无奈,老规矩,各种搜索,发现这种东西几乎都是Java写的(真香),还好找到了几篇创建简单service的文章 python创建一个简单的rest应用 另一篇 使用了python3 的web库,python3环境下web.py安装以及遇到的一个错误。 经过一番删改调试,成功发布了webservice
rest的客户端调用比较简单,全部使用URL访问Web Service服务,通过web库的函数调用,解析传进的参数,调用对应的服务。
可通过类似:http://localhost:8080/xxxxxxxx链接访问
代码附上
import web import xml.etree.ElementTree as ET from sesTest import SendEmail tree = ET.parse('users.xml') root = tree.getroot() urls=( '/users/post/(.*&)(.+)','post' ) app = web.application(urls,globals()) class post: def GET(self,user,content): a=SendEmail() user=user[:-1] # user="123@qq.com;1456@kong.com;456@asdasd.vom" users=user.split(";") print(users) print(content) if len(users)<2: a.sendEmail(user,content) print("发送一封") else: a.sendEmailBatch(users,content) print("发送多封") return "Bingo" if __name__ == '__main__': app.run()课程要求的使用阿里云邮件推送服务创建的类
import smtplib import email from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import re class SendEmail: def sendEmail(self,to_email,content):# 单发 if self.validateEmailAddress(to_email)==0: return False title="title" # EMAIL_FROM='' #发信地址 # EMAIL_HOST_PASSWORD="" #密码 EMAIL_HOST, EMAIL_PORT='smtpdm.aliyun.com',80 # 自定义的回复地址 replyto = EMAIL_FROM msg = MIMEMultipart('alternative') msg['Subject'] = title msg['From'] = '%s <%s>' % ("admin", EMAIL_FROM) msg['To'] = '%s <%s>' % ("client", to_email) msg['Reply-to'] = replyto msg['Message-id'] = email.utils.make_msgid() msg['Date'] = email.utils.formatdate() textplain = MIMEText('{}'.format(content), _subtype='plain', _charset='UTF-8') msg.attach(textplain) try: client = smtplib.SMTP() client.connect(EMAIL_HOST, EMAIL_PORT) # 开启DEBUG模式 client.set_debuglevel(0) client.login(EMAIL_FROM, EMAIL_HOST_PASSWORD) client.sendmail(EMAIL_FROM, [to_email], msg.as_string()) client.quit() return True except smtplib.SMTPConnectError as e: error_msg= '邮件发送失败,连接失败' except smtplib.SMTPAuthenticationError as e: error_msg = '邮件发送失败,认证错误:' print (e) except smtplib.SMTPSenderRefused as e: error_msg = '邮件发送失败,发件人被拒绝:' except smtplib.SMTPRecipientsRefused as e: error_msg = '邮件发送失败,收件人被拒绝:' except smtplib.SMTPDataError as e: error_msg = '邮件发送失败,数据接收拒绝:' except smtplib.SMTPException as e: error_msg = '邮件发送失败, {}'.format(e.message) except Exception as e: error_msg = '邮件发送异常, {}'.format(str(e)) print(error_msg) return False def sendEmailBatch(self, _url, _payload):# 群发 for i in _url: self.sendEmail(i,_payload) def validateEmailAddress(self,_url):# 判断邮件地址是否有效 p = re.compile(r"[^@]+@[^@]+\.[^@]+") #p = re.compile(r'([^@]+)@([^@]+)\.([^@]+)') 如果改成这种形式,后面可以输出帐号 each=_url if not p.match(each): print(each, " NOT valid") return 0 else: print(each, ' is valid') return 1 def main(self): _url =["xxxx@qq.com","qqqqq@qq.com"] content="hello world!" self.sendEmailBatch(_url,content) self.validateEmailAddress(_url[0])soap风格准备写在下一篇。。。 感觉做完也没有能完全体会到rest风格的作用,文章也仅仅是拿出来记录下自己干了啥,写的不好多包涵!