1. 公司的邮件发送平台(用户登录注册,营销推广,人力资源等),今天有反应一封测试中的新模板邮件发送失败。
2. 现有流程是: java将待发送信息写入linux 下mysql db--->c读取table,通过smtp协议connect多台smtp服务器(后台可设定管理)发送邮件。并发模式为:多进程(不同业务),多线程(同一业务的用户邮箱列表分发投递到多台sendmail服务器)。
序列号 | CPU | RAM | HDD | 带宽 | 售价(美元) | 免费试用 |
---|---|---|---|---|---|---|
香港服务器1 | E5-2620 | 32G | 1T HDD | 50M/无限流量 | $196.00 | 立即申请 |
香港服务器2 | E5-2650 | 32G | 1T HDD | 50M/无限流量 | $256.00 | 立即申请 |
香港服务器3 | E5-2680 | 32G | 1T HDD | 50M/无限流量 | $316.00 | 立即申请 |
香港服务器4 | E5-2690 | 32G | 1T HDD | 50M/无限流量 | $336.00 | 立即申请 |
香港服务器5 | E5-2697 | 32G | 1T HDD | 50M/无限流量 | $376.00 | 立即申请 |
香港服务器6 | E5-2620*2 | 32G | 1T HDD | 50M/无限流量 | $376.00 | 立即申请 |
香港服务器7 | E5-2650*2 | 32G | 1T HDD | 50M/无限流量 | $436.00 | 立即申请 |
香港服务器8 | E5-2680*2 | 32G | 1T HDD | 50M/无限流量 | $476.00 | 立即申请 |
香港服务器9 | E5-2690*2 | 32G | 1T HDD | 50M/无限流量 | $556.00 | 立即申请 |
香港服务器10 | E5-2697*2 | 32G | 1T HDD | 50M/无限流量 | $596.00 | 立即申请 |
香港服务器11 | E5-2680v4*2 | 32G | 1T HDD | 50M/无限流量 | $696.00 | 立即申请 |
香港服务器12 | E5-2698v4*2 | 32G | 1T HDD | 50M/无限流量 | $796.00 | 立即申请 |
3. c组调试获取err log "get data=552 5.6.0 Headers too large (32768 max)"。 查找资料是因为sendmail对邮件的档头header,默认有32768Bype的限制。
4.vi /etc/mail/sendmail.cf, modify MaxHeadersLength=9999999, restart sendmail
5. ok,问题解决
-------------------后记------------------------------------
## 邮件群发平台存在一个待优化的问题就是:
目前待发送的邮箱列表是在初始加载时均分(nTotalTasks / nSmtpSrvCnts)到各台服务器发送,但实际情况是各台快慢差别很大。(早干完活的就在那"看戏",最后就剩一个苦逼的在跑,任务一直没有结束)
优化方案:
1. 将task量的分配最小化。1个线程连1台smtp服务器,1次取1条mail, 线程间用pthread_mutex_lock/unlock()避免取到同条任务,flag标记取走状态。
2. 最慢的那台"苦逼"的原因,除了服务器性能和网络状况,主要是因为按序分配给他的大部分邮箱号是不存在或无法到达的(如恶意批量注册),邮箱域名的dns解析超时(30s),所以贼慢。 解决办法是优化sendmail配置参数同时线程设定socket timeout。
## 后期可考虑新增的功能:
1. 支持抄送和小容量的附件发送。
2. 将系统监控报警/通知的邮件发送整合到此平台下。
## 不晓得各邮件运营商反垃圾邮件的算法规则。(业务部门反馈,我也没办法,谁让他们整天乱发)
1. 控制发送量的大小、频率,时常更换smtp服务器IP可能有点效果。
2. 提示用户点击信任此发件人