Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

系统邮件实战技巧

1,776 views

Published on

  • Be the first to comment

系统邮件实战技巧

  1. 1. 系统邮件实战技巧 麦包包:蝎子
  2. 2. 系统邮件的应用场景 <ul><li>注册验证 </li></ul><ul><li>取回密码 </li></ul><ul><li>活动通知 </li></ul><ul><li>系统提醒 </li></ul><ul><li>EDM 营销 </li></ul><ul><li>其他应用 </li></ul>
  3. 3. 我们曾经遇到的问题 <ul><li>邮件成功发送了,但是没有到达 </li></ul><ul><ul><li>部分邮箱到达不了 </li></ul></ul><ul><ul><li>部分邮件延迟到达 </li></ul></ul><ul><ul><li>部分邮件被拒收 </li></ul></ul><ul><li>邮件成功到达了,但是进垃圾箱 </li></ul><ul><li>邮件一直发送失败 </li></ul><ul><ul><li>硬弹 </li></ul></ul><ul><ul><li>软弹(邮箱帐号、邮件内容、 IP 临锁等) </li></ul></ul>
  4. 4. 如何发送系统邮件 <ul><li>基于 SMTP 方式 </li></ul><ul><li>通信过程分析 </li></ul><ul><li>基于 Socket 实现方式 </li></ul>
  5. 5. 基于 SMTP 方式 <ul><li>参考 RFC821 规范 </li></ul><ul><li>SMTP 命令不区分大小写,但参数区分大小写 </li></ul><ul><li>常用的 SMTP 命令 </li></ul><ul><ul><li>HELO <domain> <CRLF> 。向服务器标识用户身份发送者能欺骗,说谎,但一般情况下服务器都能检测到。 </li></ul></ul><ul><ul><li>MAIL FROM: <reverse-path> <CRLF> 。 <reverse-path> 为发送者地址,此命令用来初始化邮件传输,即用来对所有的状态和缓冲区进行初始化。 </li></ul></ul><ul><ul><li>RCPT TO : <forward-path> <CRLF> 。  <forward-path> 用来标志邮件接收者的地址,常用在 MAIL FROM 后,可以有多个 RCPT TO 。 </li></ul></ul><ul><ul><li>DATA <CRLF> 。将之后的数据作为数据发送,以 <CRLF>.<CRLF> 标志数据的结尾。 </li></ul></ul><ul><ul><li>REST <CRLF> 。重置会话,当前传输被取消。 </li></ul></ul><ul><ul><li>NOOP <CRLF> 。要求服务器返回 OK 应答,一般用作测试。 </li></ul></ul><ul><ul><li>QUIT <CRLF> 。结束会话 </li></ul></ul>
  6. 6. 通信过程分析 <ul><li>Send: Try to connect smtp.qiye.163.com, Port 25 </li></ul><ul><li>Return: 220 qiye.163.com Anti-spam GT for Coremail System (163-hosting[20090619]) </li></ul><ul><li>Return: Connected to mail host smtp.qiye.163.com </li></ul><ul><li>Send: HELO abc.com </li></ul><ul><li>Return: 250 OK </li></ul><ul><li>Send: AUTH LOGIN // 请求认证 </li></ul><ul><li>Return: 334 dXNlcm5hbWU6 // 服务器的响应——经过 base64 编码了的“ Username” </li></ul><ul><li>Send: bm8tamVwbHlAbWJha2Jhby5jb20= </li></ul><ul><li>Return: 334 UGFzc3dvcmQ6 // 经过 BASE64 编码了的 &quot;Password:&quot; </li></ul><ul><li>Send: SkR1TWo3c0xabW5kcmJDUA== </li></ul><ul><li>Return: 235 Authentication successful </li></ul><ul><li>Send: MAIL FROM: <no-reply@abc.com> </li></ul><ul><li>Return: 250 Mail OK </li></ul><ul><li>Send: RCPT TO: <abc@163.com> </li></ul><ul><li>Return: 250 Mail OK </li></ul><ul><li>Send: DATA </li></ul><ul><li>Return: 354 End data with <CR><LF>.<CR><LF> </li></ul><ul><li>Send: 邮件头和邮件内容 </li></ul><ul><li>Send: . </li></ul><ul><li>Return: 250 Mail OK queued as smtp3,PdOowKBbJAKbs4FMk5IEAA--.2984S2 1283568539 </li></ul><ul><li>Send: QUIT </li></ul><ul><li>Return: 221 Bye </li></ul>
  7. 7. 基于 Socket 实现方式 <ul><li>打开连接 </li></ul><ul><ul><li>fsockopen(‘smtp.163.com’, 25, errno, errdesc, timeout) </li></ul></ul><ul><ul><li>fsockopen(‘ssl://smtp.gmail.com’, 587, errno, errdesc, timeout) </li></ul></ul><ul><li>发送数据 </li></ul><ul><ul><li>fputs </li></ul></ul><ul><li>接收数据 </li></ul><ul><ul><li>fgets (220, 250, 334, 235, 354, 221 有效的返回状态 ) </li></ul></ul><ul><li>关闭连接 </li></ul><ul><ul><li>fclose </li></ul></ul><ul><li>Debug 跟踪 </li></ul>
  8. 8. 系统邮件的平台要求 <ul><li>稳定的邮件系统 </li></ul><ul><li>安全可靠的服务器资源 </li></ul><ul><ul><li>高可用性、高负载性 </li></ul></ul><ul><ul><li>防入侵、防攻击、防病毒等 </li></ul></ul><ul><ul><li>可靠的备份方案 </li></ul></ul><ul><li>运营商的互联互通问题 </li></ul><ul><li>国际国内的邮商及管理机构的协调能力 </li></ul>
  9. 9. 系统邮件发送流程分析
  10. 10. 存在的问题 <ul><li>页面响应时间 </li></ul><ul><li>应用流程耦合度 </li></ul><ul><li>高并发,发送频率不可控 </li></ul><ul><li>WEB 服务器负载 </li></ul><ul><li>DB 服务器负载 </li></ul><ul><li>状态监控不方便 </li></ul><ul><li>IP 限制 </li></ul>
  11. 11. 系统邮件发送流程改进
  12. 12. 改进后的优点 <ul><li>应用分离,互不影响 </li></ul><ul><li>独立的应用服务管理 </li></ul><ul><li>发送频度可控 </li></ul><ul><li>发送状态可控 </li></ul><ul><li>监控方便 </li></ul><ul><li>IP 轮询可调配 </li></ul>
  13. 13. 发送邮件需要注意的问题 <ul><li>域名解析 </li></ul><ul><ul><li>正向解析: MX TXT </li></ul></ul><ul><ul><li>反向解析: PTR </li></ul></ul><ul><li>邮件标题 </li></ul><ul><ul><li>字数少于 35 </li></ul></ul><ul><ul><li>广告邮件需要带( AD ) </li></ul></ul><ul><ul><li>违禁文字 </li></ul></ul><ul><li>邮件正文 </li></ul><ul><li>发送频度 </li></ul>
  14. 14. 邮件正文需要注意的问题 <ul><li>邮件头 </li></ul><ul><ul><li>From: =?utf-8?B?6bqm5YyF5YyF?= <no-reply@abc.com> </li></ul></ul><ul><ul><li>To: =?utf-8?B?6bqm5YyF5YyF?= <abc@163.com> </li></ul></ul><ul><ul><li>Subject: =?utf-8?B?W+m6puWMheWMhV3ms6jlhozpqozor4Hpgq7ku7bvvIjor7fli7/lm57lpI3mraTpgq7ku7bvvIk=?= </li></ul></ul><ul><li>文本邮件 </li></ul><ul><ul><li>换行最好在 68 个字符之后 </li></ul></ul><ul><ul><li>尽可能少出现违禁文字 </li></ul></ul>
  15. 15. 邮件正文需要注意的问题 <ul><li>HTML 邮件 </li></ul><ul><ul><li>文件最好小于 50K </li></ul></ul><ul><ul><li>页面宽度在 500-600PX 间 </li></ul></ul><ul><ul><li>使用 table 来进行布局,尽量少用 rowspan colspan </li></ul></ul><ul><ul><li>不要使用外部 CSS 连接 </li></ul></ul><ul><ul><li>不要使用 JS , iframe , FLASH 等应用 </li></ul></ul><ul><ul><li>不要使用背景图片,表格背景色可用 </li></ul></ul>

×