最近需要做一个邮件相关的功能,考虑到自建邮件服务器维护起来比较麻烦,于是选择第三方邮件服务。邮件发送服务的对比可以看这篇文章。

最后我选择了:

  • sendCloud
  • mailgun

sendCloud向QQ用户发送,mailgun则负责其他用户。这就需要我同时为这两种服务编写相应的接口。但是它们的文档里给出的示例代码又各不相同,有的还不够优雅,比如sendcloud的java示例。两者依赖的库又不相同,比如mailgun依赖

  • jersey-client.jar (version ~ 1.17 - 1.18.1)
  • jersey-core.jar (version ~ 1.17 - 1.18.1)
  • jersey-multipart.jar (version ~ 1.17 - 1.18.1)

sendCloud则依赖HttpClient。有没有一种既能简化代码又能实现功能的方案呢,然后我发现了Jodd。

Jodd介绍:

Jodd is set of Java micro frameworks, tools and utilities, under 1.5 MB.
Designed with common sense to make things simple, but not simpler.
Get things done! Build your Beautiful Ideas! Kickstart your Startup!
And enjoy the coding.

很喜欢Jodd的理念:

Think Lightweight, Be Awesome, Get Things Done!


下面开始正题:需要用到的依赖如下:

  <properties><jodd.version>3.6.5</jodd.version></properties><dependency><groupId>org.jodd</groupId><artifactId>jodd-http</artifactId><version>${jodd.version}</version></dependency><dependency><groupId>org.jodd</groupId><artifactId>jodd-mail</artifactId><version>${jodd.version}</version></dependency>

Talk is cheap,贴出代码。以下仅仅给出简单的发送功能,起抛砖引玉的作用,其他功能详见官网文档。

mailgun:

import jodd.http.HttpRequest;
import jodd.mail.Email;
import jodd.mail.SendMailSession;
import jodd.mail.SmtpServer;import java.util.HashMap;
import java.util.Map;public class MailGun {private String SMTP_HOST = "smtp.mailgun.org";private String SMTP_USER="YOUR_USER";private String SMTP_PASS = "YOUR_PASSWORD";private String HTTP_URL="https://api.mailgun.net/v3/YOUR_DOMAIN/messages";private String HTTP_API="YOUR_API";/*** 使用SMTP触发发送* @param from 发件人* @param to 收件人* @param subject 主题* @param text 内容*/public void sendBySMTP(String from,String to,String subject,String text){SmtpServer smtpServer = SmtpServer.create(SMTP_HOST).authenticateWith(SMTP_USER, SMTP_PASS);SendMailSession session = smtpServer.createSession();session.open();Email email = Email.create().from(from).to(to).subject(subject).addHtml(text);session.sendMail(email);session.close();}/*** 使用HTTP方式发送* @param from 发件人* @param to 收件人* @param subject 主题* @param text 内容*/public void sendByHTTP(String from,String to,String subject,String text){Map<String, Object> formData = new HashMap<String, Object>();formData.put("from", from);formData.put("to", to);formData.put("subject", subject);formData.put("text", text);HttpRequest.post(HTTP_URL).basicAuthentication("api",HTTP_API).form(formData).send();}
}

sendCloud:

import jodd.http.HttpRequest;
import jodd.mail.Email;
import jodd.mail.SendMailSession;
import jodd.mail.SmtpServer;import java.util.HashMap;
import java.util.Map;public class SendCloud {private String HTTP_URL ="http://sendcloud.sohu.com/webapi/mail.send.json";private String HTTP_API_USER ="YOUR_API_USER";private String HTTP_API_KEY = "YOUR_API_KEY";private String FROM = "YPUR_DOMAIN_EMAIL";private String SMTP_HOST = "smtpcloud.sohu.com";private String SMTP_USER="YOUR_USER";private String SMTP_PASS = "YOUR_PASS";public void sendBySMTP(String to, String subject, String text){SmtpServer smtpServer = SmtpServer.create(SMTP_HOST).authenticateWith(SMTP_USER, SMTP_PASS);SendMailSession session = smtpServer.createSession();session.open();Email email = Email.create().from(FROM).to(to).subject(subject).addHtml(text);session.sendMail(email);session.close();}public void sendByHTTP(String to, String subject, String text){Map<String, Object> formData = new HashMap<String, Object>();formData.put("api_user", HTTP_API_USER);formData.put("api_key", HTTP_API_KEY);formData.put("from", FROM);formData.put("to", to);formData.put("subject", subject);formData.put("html", text);HttpRequest.post(HTTP_URL).form(formData).send();}
}

使用Jodd简化邮件服务的开发相关推荐

  1. Dapr是如何简化微服务的开发和部署

    基于微服务设计模式的现代应用程序面临着一系列挑战.微服务需要有一个强大的服务发现机制来实现动态连接.它们需要松散耦合,实现自主性和独立缩放.微服务需要支持多种语言,其中每个服务都是以最合适的语言.框架 ...

  2. 微软开源 Tye 项目,可简化微服务开发

    微软近期开源了一款开发人员工具 Tye,能够用于简化微服务以及分布式应用程序的开发.测试以及部署过程.项目地址:https://github.com/dotnet/tye. 该项目负责人 Amiee  ...

  3. Dapr微服务应用开发系列5:发布订阅构建块

    题记:这篇介绍发布订阅构建块,这是对事件驱动架构设计的一种实现落地. 注:对于"Building Blocks"这个词组的翻译,我之前使用了"构件块",现在和官 ...

  4. Postfix邮件服务搭建

    最近发现邮件发送服务还是挺重要的.可能对于每天只有一百来封的邮件发送需求的个人博主来说,一个免费的邮箱提供的免费SMTP邮件发送服务就可以满足了,但是对于一些大型的网站.论坛和平台,每天的邮件发送量可 ...

  5. 56 Node.js服务端开发入门

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.服务器端基本概念 1.1 网站的组成 网站应用程序主要分为两大部分:客户端和服务器端. ...

  6. 第13章 Kotlin 集成 SpringBoot 服务端开发(1)

    第13章 Kotlin 集成 SpringBoot 服务端开发 本章介绍Kotlin服务端开发的相关内容.首先,我们简单介绍一下Spring Boot服务端开发框架,快速给出一个 Restful He ...

  7. SpringBoot服务整合(整合邮件服务、定时调度、Actuator监控)

    在进行项目开发的时候经常会遇见以下的几个问题:需要进行邮件发送.定时的任务调度.系统的监控处理,实际上这些操 作都可以通过 SpringBoot 进行整合操作.2.1.SpringBoot 整合邮件服 ...

  8. SpringBoot系列九:SpringBoot服务整合(整合邮件服务、定时调度、Actuator监控)

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 服务整合 2.背景 在进行项目开发的时候经常会遇见以下的几个问题:需要进行邮件发送.定时的任务调 ...

  9. Spring简化Java开发_第1章—Spring之旅—简化Spring的java开发

    简化Spring的java开发 1.1简介 区别于EJB的特性 简化javaBean,为了降低java开发的复杂性,Spring采取了以下4种关键策略: 基于POJO的轻量级和最小入侵性编程 通过依赖 ...

最新文章

  1. 【ACM】杭电OJ 2005
  2. scala 访问修饰符_Scala中的访问修饰符
  3. 【Java】Java数据库访问体系重点总结
  4. java传感器编程_JSensorReader 无线传感器网络环境,直接从节点读取 采集数据的java程序 Script 249万源代码下载- www.pudn.com...
  5. Python 杠上 Java、C/C++,赢面有几成?
  6. 计算机做表格软件有哪些内容,制作表格软件,详细教您excel怎么制作表格
  7. iOS 五种传值方式
  8. 角谱 matlab,关于角谱法实现数字全息 - 程序语言 - MATLAB/Mathematica - 小木虫论坛-学术科研互动平台...
  9. 计算机网络技术自主招生考试题,清华等17所高校2017年自主招生笔试真题
  10. angr源码分析——cle.Loader类
  11. python开源电子书_Python 开源电子书资源
  12. WebView网页视频统一全屏播放及横竖屏切换
  13. html文件内容重叠,html – CSS:页脚重叠内容,其他故障
  14. go学习笔记接口部分
  15. 如何让电脑运行速度变快
  16. bootsqm.dat是什么文件 bootsqm.dat可以删除吗
  17. WK2124 (SPI扩展4路UART端口传输)
  18. C# 仿360悬浮球开发demo程序
  19. Java基础汇总(十四)——LinkedList,Queue
  20. 2021年网络通信与信息安全国际学术会议(ICNCIS2021)

热门文章

  1. + ,- (加号,减号) 是数字类型吗?(sql server 2000中)
  2. SpringCloud使用Sofa-lookout监控(基于Eureka)
  3. 在linux下安装配置svn独立服务器
  4. 关于网络上的各种mysql性能测试结论
  5. 当一个解决方案下面有多个项目时,如果设置启动项?
  6. chrome打不开12306
  7. 红帽企业集群和存储管理之DRBD+Heartbeat+NFS实现详解
  8. profile asp.net technology membership
  9. 如何破解Red Hat Enterprise 4的root密码(救援有密码)
  10. 【Runtime Error】打开Matlib7.0运行程序报错的解决办法