springmail-simple-mail用法

版权声明:www.hsboy.cn [email protected] https://blog.csdn.net/oHongShu1/article/details/88641285

使用帮助

基于Spring Mail的简单的邮件发送API,有详细的配置介绍
项目地址:https://github.com/hongshuboy/springmail-simple-mail

maven spring spring mail simple mail

特点优势

  • 极简邮件发送:两行代码发送邮件
  • 高效:保证使用简单的同时,重视效率,在你不需要关注源码的情况下,自动选择最好的方式
  • Spring:基于Spring,完全支持Spring,又可以脱离Spring使用
  • 高送达率:默认双发送器,失败重发,尽可能保证送达到目的地

版本更新

版本号 关键词 更新时间 主要更新内容
1.0.0 RELEASE 2019年2月22日 RELEASE版发布,功能测试稳定
1.0.1 单例模式 2019年3月16日 目录1.1,默认使用单例模式,在使用方式不变的情况下,提高了响应速度

快速开始(5分钟上手使用)

  • 在这里,你可以快速完成邮件的发送,只需要一点点必须的设置

  • 熟悉项目结构:这是一个maven工程,如果你不会使用maven,可以使用1.Jar包的方式

1.设置发件箱的域名和密码

如果你不想使用配置文件,只想使用编码方式快速开始,可以略过这一部分,确保开启你的邮箱的POP3/SMTP/IMAP之后,直接看下面的1.1不使用properties(最简单的方式)1.2使用properties

src\main\resources\mail.properties

​ 1. 参照现有的配置,修改这个文件,填入你的发件箱,建议你163和QQ邮箱都配置上,这样,如果发送失败,程序会自动切换发送器重发,保证成功率,而且切换过程用户没有察觉。

​ 2. 如果你只配置了一个发送器,无需修改代码,系统会只用这一个发送器进行发送(但是需要删除一个spring配置,注意下文A部分)。

开启你的邮箱的POP3/SMTP/IMAP

​ 要使用java mail,请先在邮箱设置中开启POP3/SMTP/IMAP,配置的密码不是你的登录密码,以163邮箱为例,同样在设置中选择客户端授权密码,获取一份授权密码,放在配置文件 (src\main\resources\mail.properties)mail.password位置。

A:如果你只在其中配置了一个邮箱

​ 只想用一个发送器?那请把 src\main\resources\spring-mailx.xml文件中不用的发送器删除,注意删除整个<bean>标签

下载依赖Jar包

  • 将本项目使用Maven打包或者到releases下载Jar

简单的配置之后终于可以开始测试了

可以使用两种方式快速上手使用

1.0 不使用Spring容器的两种方式

注意: 如果你不使用Spring容器,使用1.11.2的方式,那么你需要 额外 将/dependencies下的所有Jar包添加到项目中

1.1 不使用Spring容器、不使用配置文件(最简单的方式)

  • 这是最简单的方式,直接可以创建mimeMail

  • 这样只需要在需要的时候用初始化的MimeMail send方法发送邮件即可

  • 注意:1.11.2都只能添加一种发送器,但是遇到错误会重试一次。相比2.使用Spring容器(推荐)的方式(两个发送器),稳定性稍差。

  • 1.0.1版本更新后,此方式默认使用单例模式加载,在使用方式不变的情况下,提高了响应速度

/**
	 * 	下面是一个简单的例子,测试发送。<strong>这是最简单的方式</strong> - 不使用spring容器如何发送邮件 -
	 * 	弊端:1.发送速度慢,需要几秒钟的时间加载资源 2.这种方式默认只拥有一个发送器,容错率不高
	 * 
	 * @throws IOException
	 * @throws MailAddressException 自定义异常,邮件地址不正确
	 */
	@Test
	public void testSendSimple() throws MailAddressException {
		MimeMail mimeMail = MimeMail.Builder.initMailSender("smtp.163.com", "smtp",465, "[email protected]","你的客户端授权码", false);
		List<String> to = new ArrayList<String>();// 收件人集合
		to.add("[email protected]");
        //密集发送时,163会报554 DT:SPM异常
		mimeMail.sendMail(to, "你有新的消息", "请到网站内查看"+new Date());
	}

​ 之后,如果你在系统中再次需要获取MimeMail对象,只需要再次调用MimeMail.Builder.initMailSender方法,这样会使用单例模式直接拿到第一次初始化的对象,也就是说从第二次使用开始,都会直接获取第一次的MimeMail对象,而不会重新创建。之后的调用,参数填错也不要紧。

第二次调用示例:

		MimeMail mail2 = MimeMail.Builder.initMailSender("hello", "world", 100, "a", "b",true);//这里参数可以随便填了
		System.out.println(mail == mail2);//这里会输出true,因为直接拿了上一次的对象

如果163邮箱报554 DT:SPM异常,请参考下面的文档

163邮箱退信的常见问题

1.2 不使用Spring容器、使用配置文件

  • 这样只需要在需要的时候用初始化的MimeMail send方法发送邮件即可
  • 注意 : 使用这种方式的话,需要配置mail.properties文件中的等号(====)下面的内容,最下面三行内容不要更改
/**
 * 下面是一个简单的例子,测试发送。<strong>这是最简单的方式</strong>
 *  - 不使用spring容器如何发送邮件
 *  	- 弊端:1.发送速度慢,需要几秒钟的时间加载资源
 *  		   2.这种方式默认只拥有一个发送器,容错率不高
 * @throws IOException
 * @throws MailAddressException 自定义异常,邮件地址不正确
 */
@Test
public void testSend() throws IOException, MailAddressException {
	MimeMail mimeMail = MimeMail.Builder.initMailSenderWithProperties();
	List<String> to = new ArrayList<String>();//收件人集合
	to.add("[email protected]");
	mimeMail.sendMail(to, "你有新消息", "请到网站内查看");
}

我们来看一下调用sendMail方法的具体参数是什么意思

	/**
	 * common mail 重载方法,其他方法调用此方法来实现send mail<br/>
	 * <strong>发邮件的所有方法必须调用此方法来发送!!!</strong></br>
	 * 	如果你配置了两个mailSender,将会自动切换发送,若只有一个,请务必将不用的发送器从spring-mailx.xml中删除
	 * 
	 * @param to 收件人地址,List接口形式,支持群发
	 * @param subject 邮件主题
	 * @param Text 邮件内容(邮件的尾巴部分会自动补上),可以去上面的重载方法自行定制尾巴
	 * @return boolean 是否发送成功
	 * @throws MailAddressException
	 */
	public boolean sendMail(List<String> to,String subject,String Text)

​ 如果使用这种方式,建议使用一个静态类来管理,不然每次发送都加载资源速度会有点慢,如果不在乎速度的话当然也可以忽略。

2.使用Spring容器(推荐)

这种方式也简单易用,速度上也比上种有显著提升

  1. 使用git clone项目到本地

  2. 修改src\main\resources下的mail.properties(配置等号上面的内容)(如果你只需要一个发送器,可以只配置一个,并且必须执行第三步

  3. (optional)修改src\main\resources下的spring-mailx.xml(如果你在2中只配置了一个发送器,这里需要删除多余的那个)

  4. (optional)如果你需要发送附件或者在邮件中显示图片,请将附件或者图片放在src\main\resources下,并且修改top\weweb\hawk\mailx\MimeMail.sendMail(List<String> to,String subject,String Text,boolean retry)对应部分的源码(注释的很清楚)

  5. 使用Maven重新打包项目(请跳过Maven Test,或者删除src\test下的java文件)

  6. Jar包导入到需要使用邮件的工程中,在工程的spring.xmlimport中导入simple mail内的spring-mailx.xml配置文件,这样当前项目就可以使用MimeMail发送邮件了,在需要用的地方使用@Autowired注入就可以使用了。

在上层项目的spring.xml中导Mail组件的Spring容器的方法

请直接复制结点,除非必要不要更改

	<!-- 导入邮件组件的spring -->
	<import resource="classpath*:spring-mailx.xml"/>
	<!-- 忽略下面的内容 -->
  	<bean id="xxx" class="xxx.xxxx">
		...
	</bean>

易错注意 :

  • 如果使用上层容器,两个容器内不要同时有<context:property-placeholder location="xx"/>,将这个结点放到顶层spring.xml

如果你觉得对你有帮助,请点个star鼓励作者~

有问题或者建议欢迎在此页留言或者向我发送邮件,一起改进

问题反馈

[email protected]
[email protected]

猜你喜欢

转载自blog.csdn.net/oHongShu1/article/details/88641285
今日推荐