最近,在使用搜狐Sendcloud发邮件。
    Sendcloud提供http格式的webapi,方便地发送邮件,当然是要付费的。

很早之前,http工具一直用Httpclient,后来觉得jodd更简单,就倾向于jodd的一些工具库了。

使用jodd遇到一个问题:
  当邮件内容比较大时,比如1万多字符的时候,发送邮件失败。
Sendcloud服务器所在的Nginx,提示

414 Request-URI Too Large


“ <html>

<head><title>414 Request-URI Too Large</title></head>

<body bgcolor="white">

<center><h1>414 Request-URI Too Large</h1></center>

<hr><center>nginx</center>

</body>

</html> ”

提交工单,与客服和技术支持,交流了几个小时,终于解决了问题。

第1种方法:使用官方给的Apache Httpclient的例子,发送邮件。
第2种方法:原来用Jodd,使用方式有问题。

Map<String, String> queryMap = new HashMap<String, String>();queryMap.put("api_user", API_USER);queryMap.put("api_key", API_KEY);queryMap.put("from", FROM);queryMap.put("to", to);queryMap.put("subject", subject);queryMap.put("html", html.substring(0,html.length()));HttpResponse response = HttpRequest.post(URL)// .contentType(contentType).query(queryMap).send();String body = response.bodyText();

这个地方用的是“post” ,但是参数仍然放在了url后面,当数据量过大时,就有问题了。
正确的做法是:  HttpResponse response = HttpRequest.post(URL)// .contentType(contentType)

.form(queryMap).send();
用form方法替代query方法。

有2个疑惑:
1.用post发送,为啥会把参数放在url后面?或者说,url后面接参数,还是post发送么?
2. jodd官方,有这句话:
     Query parameters may be specified in the URL line (but then they have to be correctly encoded).
    为啥是“可能”?

以下是一些代码

Apache发送:

public static void send(String to, String subject, String html) {if (!check()) {return;}String url = URL;HttpClient httpclient = new DefaultHttpClient();HttpPost httpost = new HttpPost(url);List nvps = new ArrayList();nvps.add(new BasicNameValuePair("api_user", API_USER));nvps.add(new BasicNameValuePair("api_key", API_KEY));nvps.add(new BasicNameValuePair("from", FROM));nvps.add(new BasicNameValuePair("to", to));nvps.add(new BasicNameValuePair("subject", subject));nvps.add(new BasicNameValuePair("html", html));try {httpost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));HttpResponse response = httpclient.execute(httpost);if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { // 正常返回HttpEntity entity = response.getEntity();System.out.println(EntityUtils.toString(entity));} else {System.err.println("error");}} catch (Exception e) {e.printStackTrace();}}

Jodd发送:

public static void send(String to, String subject, String html) {if (!check()) {return;}Map<String, Object> queryMap = new HashMap<String, Object>();queryMap.put("api_user", API_USER);queryMap.put("api_key", API_KEY);queryMap.put("from", FROM);queryMap.put("to", to);queryMap.put("subject", subject);queryMap.put("html", html.substring(0,html.length()));HttpResponse response = HttpRequest.post(URL)// .contentType(contentType).form(queryMap).send();String body = response.bodyText();try {JSONObject jsonObject = JSONObject.parseObject(body);MailMessage msg = JSONObject.toJavaObject(jsonObject,MailMessage.class);String sendInfo = "to=" + to + ",subject=" + subject;if (msg.getMessage().equals(MailMessage.ERROR)) {logger.error("sendcloud,send mail failed:" + msg + ",sendInfo:"+ sendInfo);} else if (msg.getMessage().equals(MailMessage.SUCCESS)) {logger.info("sendcloud,send mail ok,sendInfo:" + sendInfo);}} catch (Exception e) {logger.error("send mail failed",e);logger.info(body);}// System.out.println(response);}

jodd资料: http://jodd.org/doc/http.html

转载于:https://my.oschina.net/FansUnion/blog/409768

使用搜狐Sendcloud的Webapi发送邮件:Jodd和Apache Httpclient相关推荐

  1. 登录搜狐邮箱并发送邮件的3中方法

    登录搜狐邮箱并发送邮件的3中方法写自定义目录标题 用于设置剪切板内容 键盘按键映射字典 键盘键按下 键盘键抬起 登录搜狐邮箱并发送邮件的3中方法 (1)传统的通过send_keys (2)显示等待-- ...

  2. 近期活动盘点:第一届“数据故事计划”、 第三届搜狐校园算法大赛

    想知道近期有什么最新活动?大数点为你整理的近期活动信息在此: 第一届 "数据故事计划" "大数据故事计划"旨在收集各类有关大数据的故事,然后进行比赛及相关的宣传 ...

  3. 163,搜狐,新浪哪个邮箱安全?

    用Wireshark对163,搜狐,新浪普通邮箱用户发送邮件做了一下抓包,分析如下,无图无真相,请看 (163邮箱) (sohu邮箱) (sina邮箱) 当然也许我有遗漏的地方,希望大家能帮我补全,就 ...

  4. 搜狐、美团、小米都在用的Apache Doris有什么好? | BDTC 2019

    [导读]12 月 5-7 日,由中国计算机学会主办,CCF 大数据专家委员会承办,CSDN.中科天玑协办的中国大数据技术大会(BDTC 2019)在北京长城饭店隆重举行.100+ 顶尖技术专家.100 ...

  5. html搜狐热搜列表仿写,GRE高分范文不能看过就算 学会仿写才能带来真正提高

    可以说所有的写作都是从模仿开始.GRE作文同样不例外.通过参考他人的好文章,学习别人的写法,最后写出自己的文章是非常实用的作文学习方式.不过,模仿也需要讲究方法,单纯模仿并不会让大家有太多的收获.掌握 ...

  6. 20天拿到美团快手小米搜狐跟谁学offer

    最近看了看外面的机会,特此汇总下,希望对读者有帮助. 战况 贝壳:一轮技术面,自挂东南枝. 脉脉:两轮技术面,自挂东南枝. 跟谁学:三轮技术面 + 一轮 HR 面. 搜狐:三轮技术面 + 一轮 HR ...

  7. 报名 | 搜狐×清华:第三届内容识别算法大赛,比武招新两不误!

    2019年4月8日,第三届搜狐校园算法大赛正式开赛,同期面向参赛选手开放竞赛结果提交.本次比赛联合了清华大学等机构共同组织,面向全球范围内的全日制学生. [组织方]搜狐.清华大学 [奖金]¥75000 ...

  8. 游戏运维的最佳实践:搜狐畅游自动化运维之旅

    本文讲的是游戏运维的最佳实践:搜狐畅游自动化运维之旅[编者的话]本文作者见证了畅游游戏自动化运维平台的从无到有,通过在其中踩过的坑.解过的结,他向大家来阐述游戏运维的进阶之路.本文主要围绕畅游游戏管理 ...

  9. 剑指Offer——当当+搜狐+好未来笔试题+知识点总结

    剑指Offer--当当+搜狐+好未来笔试题+知识点总结 情景回想 时间:2016.9.21 15:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:当当笔试.搜狐笔试.好未来笔试 3 ...

  10. [转]国内各大互联网公司相关技术站点2.0版 (集合腾讯、阿里、百度、搜狐、新浪、360等共49个)...

    利用闲暇时间整理了一份国内各大互联网公司的相关技术站点,希望能够对大家有所帮助,也欢迎各位帮忙补充. 腾讯系列(13)  阿里系列(18)  百度系列(3)  搜狐系列(3)  新浪系列(2)  36 ...

最新文章

  1. radio切换控制div显示_React 项目实践——搭建一个温度控制 App
  2. 查看java运行时参数_查看JVM运行时参数
  3. 中科院发布了目标追踪数据集,1万多条视频,150万个边界框 | 快来下载
  4. 你能相信这些逼真的油画是前端小姐姐只用HTML+CSS画出来的吗?精细到毛发,让美术设计也惊叹丨GitHub热榜...
  5. Network In Network论文笔记
  6. 笔记本cpu温度高怎么办_夏天面团温度高怎么办?几个技巧让面温立马降下来
  7. 啦啦外卖php版本,微信外卖源码,微信啦啦外卖plus跑腿版 v5.0.7开源版
  8. 西安三星电子笔试面试
  9. ClientToScreen 和ScreenToClient
  10. JDK和CGLIB动态代理的区别
  11. 今日芯声 | 每天徒步7公里找信号?印度不愧是开挂民族
  12. 聊聊几个阿里 P8、P9 程序员的故事
  13. 网络安全专家教你设置史上最安全的WiFi密码
  14. 按摩店用的收银系统多少钱一套
  15. 腾讯云主机部署hexo博客
  16. 发票信息提取系统解决方案(纸质发票、电子发票)
  17. element导航菜单添加搜索功能
  18. 企业微信小程序获取手机号?
  19. 跨平台数据库桌面管理工具
  20. 风哥MySQL数据库视频培训教程大合集(网盘下载.共10套)

热门文章

  1. 《简约至上:交互式设计四策略》读书感悟
  2. CPAN下载安装pm包方法
  3. AVC编码中的规格 :High、Baseline、Main什么意思?还有High@L3.0、High@L4.0、High@L5.1等
  4. 德国电信超90万用户遭遇网络中断 起因是一次失败的路由器劫持
  5. 干货 | 拆解一个 Elasticsearch Nested 类型复杂查询问题
  6. python中%是什么意思_在python中%是什么意思
  7. 从“七宗罪”角度,看互联网产品与人性的深沉纠缠
  8. 一元三次方程求根公式详细逐步推导
  9. 华硕路由域名访问_动态域名是什么?
  10. [教程] PSP 5.00M33-6升级图文教程