本文共 3869 字,大约阅读时间需要 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信息
3. 创建子账号:这样很安全,你的账号密码不会暴露给他们,发邮件的时候,调用临时的账号和token密码就可以啦。
欧了,咱们开始测试,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() |
好了~ 咱们再来测试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 ~ |
博客原文:
官网还给提供Python SDK的调用示例,我用了下,还真不错,挺方便的。
sdk下载地址:
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) |
博客原文:
这边还有用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回调,能选择东西还挺多的。
好了,测试ok了~ 看下sendcloud里面统计的数据 ~
本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1364713,如需转载请自行联系原作者