今天和朋友聊起了邮件的发送,他那边有个业务是定期给大量的用户发新事物邮件,经常会有被拒的情况,还有就是他们的报警有点多,搞得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的方法
# -*- coding:utf- 8 -*- 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()) |
好了~ 咱们再来测试sendcloud的webapi调用方式 !
提交带附件的邮件,必须使用 POST 方式提交,并且参数使用 multipart/form-data, 可以使用Requests,MultipartPostHandler, urllib2_file,poster 进行附件的发送。
用户名:xcga_wise 文章数:23 评论数:14
访问量:4132:670:590:3 注册日期:2008-12-20
更多博文请关注:没有伞的孩子必须努力奔跑 (www.xuchanggang.cn)
在实际的工作中,我们可能经常会遇到数据库宕机,数据丢失的情况,下面,我将演示一个模拟环境
[root @client103 ~] # mysql -uroot -pkongzhong mysql> use test; mysql> insert into a select * from a; #注: 这里不演示建表,默认大家都懂 [root @client103 ~] # innobackupex --user=root --password=kongzhong --defaults-file=/etc/my.cnf --port=3306 /tmp/backup/ >/tmp/backup/innoback.log 2>&1 mysql> insert into a select * from a; [root @client103 ~] # innobackupex --user=root --password=kongzhong --defaults-file=/etc/my.cnf --port=3306 --incremental --incremental-basedir=/tmp/backup/2014-02-27_13-24-51/ /tmp/backup/ mysql> insert into a select * from a; # 此时大家记录一下现在的总行数(一会还原需要核对数据的) # 1.将数据目录的下的二进制日志,复制到 /tmp/backup,一会需要重演日志(此步非常重要,复制操作默认大家会了) # 2.删除数据目录下的所有文件,此时数据库就崩溃了(如果关闭数据库,是关不了,记得杀掉进程,kill -9 ....) |
[root @client103 ~] # innobackupex --apply-log /tmp/backup/2014-02-27_13-24-51/ [root @client103 ~] # innobackupex --apply-log /tmp/backup/2014-02-27_13-24-51/ --incremental-dir=/tmp/backup/2014-02-27_13-32-44/ # 应用完日志,利用全备恢复数据 [root @client103 ~] # innobackupex --copy-back /tmp/backup/2014-02-27_13-24-51/ # 修改数据目录权限为mysql:mysql [root @client103 ~] # chown mysq:mysql /var/lib/mysql -R [root @client103 ~] # /etc/init.d/mysql start # 登陆数据库,查看数据行数,发现数值与崩溃前是不一致的,所以需要利用日志恢复 [root @client103 ~] # mysql -uroot -pkongzhong mysql> use test; mysql> select count(*) from a; # 查看最后一次增备完成时的日志文件名和pos号(备份时自动记录的) [root @client103 ~] # cat /tmp/backup/2014-02-27_13-32-44/xtrabackup_binlog_info mysql-103-bin.000005 3694 # 所以,我们使用二进制执行恢复时,起始点为3694 [root @client103 ~] # mysqlbinlog --start-pos=3694 /tmp/backup/mysql-103-bin.000005 mysql -uroot -pkongzhong # 此时在登陆数据库查看数据是否相符,请自行测试 mysql> use test; mysql> select count(*) from a; |
本文出自 "没有伞的孩子必须努力奔跑" 博客,请务必保留此出处http://634871.blog.51cto.com/624871/1364676
没有评论:
发表评论