python调用sendcloud接口实现邮件批量发送收取及url回调

本文涉及的产品
.cn 域名,1个 12个月
简介:

前言:

今天和朋友聊起了邮件的发送,他那边有个业务是定期给大量的用户发新事物邮件,经常会有被拒的情况,还有就是他们的报警有点多,搞得exchange时常有压力,现在这哥们正琢磨着要搞邮件集群,我觉得没必要这么纠结,咱们可以利用第三方的邮件api。


国外有mailgun,国内有个sohu的sendcloud,这东西好多公司再用,比如youku,letv,安全宝、csdn等。。。



sendcloud不是简单的类似qq企业邮箱的方案,他的接口很是丰富,有发邮件,收邮件,webhook,url回调等功能。


咱们看看官网的介绍:

SendCloud为邮件提供DKIM签名及SPF、负责发送过程中ESP门户申诉与白名单确认,多重措施确保您的邮件高效送达。


SendCloud专注邮件发送领域,ESP白名单确认、发送频率控制、邮件发送追踪,每一个细节都确保无误,让开发者有更多时间专注开发!


SendCloud拥有的数据追踪功能,可以统计邮件送达过程中各种数据,并以多种图表形式呈现,一目了然。


怎么用sendcloud?

1.  需要注册,当然你要有一个域名,如果用过qq,163的企业邮箱,你就可以想成你的邮件服务器在sendcloud那边运维,发信收信的域名,肯定是你的域名了。


2.  需要在域名的授权处加入ESP、SPF、DKIM信息

wKioL1MPVMfCZqrqAAKiNLWbKiI497.jpg


3. 创建子账号:这样很安全,你的账号密码不会暴露给他们,发邮件的时候,调用临时的账号和token密码就可以啦。

wKioL1MPVO2iuxcyAAJr982P3Yg774.jpg




欧了,咱们开始测试,sendcloud支持很多语言的接口,他本身就提供了很多的例子,我这边用python的版本。

利用SMTPLIB的方法    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# -*- coding:utf- 8  -*-
import  smtplib
import  json
from email  import  Encoders
from email.mime.base  import  MIMEBase
from email.mime.multipart  import  MIMEMultipart
from email.mime.text  import  MIMEText
from email.header  import  Header
fromEmail =  'alert@xiaorui.cc'  # 用正确邮件地址替代
toEmail=[ 'rfyiamcool@163.com' , '754520135@qq.com' ]               # 用正确邮件地址替代收件人地址
msg = MIMEMultipart( 'alternative' )
msg[ 'Subject' ] =  "大家好,我是峰云"
msg[ 'From' ] = fromEmail
msg[ 'To' ] =  ', ' .join(toEmail)
html =  "" "<html><head></head><body><p>Hi! -name-<br>hello world!!!</p></body></html>" ""
part = MIMEText(html,  'html' )
msg.attach(part)
#不同于登录SendCloud站点的帐号,您需要登录后台创建发信子帐号,使用子帐号和密码才可以进行邮件的发送。
username =  'postmaster@rfyiamcool.sendcloud.org'
password =  '123123123'  #密码
s = smtplib.SMTP( 'smtpcloud.sohu.com:25' )
s.login(username, password)
s.sendmail(fromEmail, toEmail, msg.as_string())
s.quit()



wKioL1MPVenC6EkiAADEUV2Pysc879.jpg


wKiom1MPVh6zN7miAADj4Cq_l5k029.jpg


好了~ 咱们再来测试sendcloud的webapi调用方式 !

提交带附件的邮件,必须使用 POST 方式提交,并且参数使用 multipart/form-data, 可以使用Requests,MultipartPostHandler, urllib2_file,poster 进行附件的发送。

他可以加多个附件 !

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/python
#coding:utf- 8
import  requests
url= "https://sendcloud.sohu.com/webapi/mail.send.xml"
files={ "file1" : ( "clusterops.tar.gz" , open( "/root/clusterops.tar.gz" "rb" )), \
         "file2" : (u "smtp_test.py" , open(u "smtp_test.py" ))}
# 不同于登录SendCloud站点的帐号,您需要登录后台创建发信子帐号,使用子帐号和密码才可以进行邮件的发送。
params = { "api_user" "postmaster@rfyiamcool.sendcloud.org" , \
     "api_key"  "123123" ,\
     "to"  "rfyiamcool@163.com" , \
     "from"  "alert@xiaorui.cc" , \
     "fromname"  "from" , \
     "subject"  "主题" , \
     "html" "正文"  \
}
r = requests.post(url, files=files, data=params)
print r.text
~

博客原文http://rfyiamcool.blog.51cto.com/1030776/1364713

wKioL1MPVoPzc_mTAAD1nRSbdec509.jpg


官网还给提供Python SDK的调用示例,我用了下,还真不错,挺方便的。

sdk下载地址:

http://sendcloud.sohu.com/sendcloud/sites/drupal.sce.sohu.com.sendcloud/files/files/SendCloud_Python_SDK_1_0_0_and_doc.zip


1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env python
# -*- coding:utf- 8  -*-
#xiaorui.cc
import  sendcloud
# 不同于登录SendCloud站点的帐号,您需要登录后台创建发信域名,获得对应发信域名下的帐号和密码才可以进行邮件的发送。
server = sendcloud.SendCloud( 'postmaster@rfyiamcool.sendcloud.org' '123123' , tls=False) # 目前tls 不可用
message = sendcloud.Message(( "from@sendcloud.com" "来自SendCloud(fromname)" ),  "峰云就她了" , html= "<h1>大家好,这里是地球 !!! xiaorui.cc </h1>" )
message.add_to([ "rfyiamcool@163.com" ], [ "toname1" ])
message.add_attachment( "文件1.pdf" "/root/CreditCardReckoning201311.pdf" )
#message.add_attachment( "文件2.pdf" "/path/to/文件2.pdf" )
#server.set_host_port( 'smtpcloud.sohu.com' '25' )
# server.set_debuglevel( 1 )
server.smtp.send(message)


wKioL1MPWx-BEap_AAIJkOwvB1g486.jpg


博客原文http://rfyiamcool.blog.51cto.com/1030776/1364713


这边还有用CURL的使用示例,大家可以参考下,替换下邮件地址,用户名,密码就行了。

没有特殊字符时,可以使用-d参数进行post提交

1
2
3
curl -d "api_user=yourusername&api_key=password&to=example1@sendcloud.com; \
example2@sencloud.com&from=user@sendcloud.com&fromname=测试用户& \
subject=主题&html=正文" https: //sendcloud.sohu.com/webapi/mail.send.xml


有特殊字符时,使用–data-urlencode参数进行post提交

1
2
3
4
curl -d "api_user=yourusername&api_key=password&to=example1@sendcloud.com;\
example2@sendcloud.com&from=user@sendcloud.com&fromname=测试用户" \
--data-urlencode subject= "我是有特殊字符的主题,如特殊字符&a=1"  \
--data-urlencode html= "我是正文,特殊字符&b=2"  \


URL回调,能选择东西还挺多的。

wKioL1MPXkSz72CfAAFYKyTmHlg373.jpg



好了,测试ok了~  看下sendcloud里面统计的数据 ~

wKioL1MPXqqj6CVtAAHYwDQuAR4820.jpg





  本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1364713,如需转载请自行联系原作者


相关文章
|
13天前
|
前端开发 JavaScript Java
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
本文介绍了一个结合SpringBoot和Python的实用功能,旨在监控iPhone 15的库存状态并通过邮件提醒用户。系统采用SpringBoot监听苹果官网API,解析JSON数据判断是否有货,并展示最近的库存记录。此外,还能自动触发Selenium+Python脚本实现自动化购买。文中详细介绍了技术栈、接口分析、邮件配置及自动化脚本的设置方法。该项目不仅适用于熟悉后端开发的人员,也适合回顾Layui和Jquery等前端技术。
35 0
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
|
15天前
|
数据采集 索引 Python
Python中这样操作url也太爽了吧
Python中这样操作url也太爽了吧
|
15天前
|
前端开发 JavaScript Serverless
Python+Dash快速web应用开发:回调交互篇(上)
Python+Dash快速web应用开发:回调交互篇(上)
|
15天前
|
JSON JavaScript 前端开发
Python+Dash快速web应用开发:回调交互篇(下)
Python+Dash快速web应用开发:回调交互篇(下)
|
15天前
|
数据可视化 JavaScript
Python+Dash快速web应用开发:回调交互篇(中)
Python+Dash快速web应用开发:回调交互篇(中)
|
2月前
|
监控 网络协议 网络安全
SMTP操作使用详解并通过python进行smtp邮件发送示例
SMTP操作使用详解并通过python进行smtp邮件发送示例
49 3
|
2月前
|
前端开发 安全 测试技术
【Python】已解决:The method is not allowed for the requested URL.
【Python】已解决:The method is not allowed for the requested URL.
54 3
|
3月前
|
设计模式 算法 Python
Python回调函数中的循环艺术:深入探索for循环的回调应用
Python回调函数中的循环艺术:深入探索for循环的回调应用
37 1
|
2月前
|
存储 SQL Python
`urllib.parse`模块是Python标准库`urllib`中的一个子模块,它提供了处理URL(统一资源定位符)的实用功能。这些功能包括解析URL、组合URL、转义URL中的特殊字符等。
`urllib.parse`模块是Python标准库`urllib`中的一个子模块,它提供了处理URL(统一资源定位符)的实用功能。这些功能包括解析URL、组合URL、转义URL中的特殊字符等。
|
3月前
|
调度 开发者 UED
探索Python中的异步编程:从回调到协程
【6月更文挑战第14天】本文深入探讨了Python异步编程的演变历程,从最初的回调函数到现代的协程模型。我们将通过具体示例,展示如何利用asyncio库提升程序的执行效率和响应能力。文章旨在为读者提供一个清晰的异步编程发展脉络,并指导他们如何在项目中实际应用这些技术。