2019独角兽企业重金招聘Python工程师标准>>>

Java发邮件的几种方式

  • JavaMail
  • Commons Email
  • Spring Mail

JavaMail是Java提供的发邮件API

Commons Email是Apache Commons下的发邮件API

Spring Mail 是Spring提供的发邮件API

所需jar包

JavaMail

<dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><version>1.5.5</version></dependency>

1 2 3 4 5

Commons Email

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-email</artifactId><version>1.4</version></dependency>

1 2 3 4 5

Spring Mail

<dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.2.4.RELEASE</version>
</dependency>

1 2 3 4 5

以Spring Mail发邮件为例

Spring配置文件如下

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> <!-- 加载mail.properties配置文件 --> <context:property-placeholder location="classpath:mail.properties" file-encoding="utf-8" ignore-unresolvable="true"/> <!-- mailSender配置 --> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="${mail.smtp.host}" /> <property name="username" value="${mail.smtp.username}" /> <property name="password" value="${mail.smtp.password}" /> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">${mail.smtp.auth}</prop> <prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop> </props> </property> </bean> </beans>

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

mail.properties配置文件如下

#------------------------------------------------------------ # 邮件服务的配置 #------------------------------------------------------------ #服务器 mail.smtp.host=smtp.xxx.com #是否需要验证密码 mail.smtp.auth=true #超时时间 mail.smtp.timeout=50000 #------------------------------------------------------------ # 对用户名和密码都进行了加密 #------------------------------------------------------------ #登陆用户名 mail.smtp.username=qBFXEAFr500QuCYz1D9/nw== #密码 mail.smtp.password=oqfyI44bbowwVRY0dSKX6yuDKF3s6J9K #发件人 mail.smtp.from=abcd@xxx.com #收件人 mail.smtp.to=ghi@xxx.com,jkl@xxx.com #抄送 #mail.smtp.cc=abc@xxx.com,def@xxx.com

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

发邮件类

package com.test.mail; public interface MailSender { public void sendMail();
}

1 2 3 4 5

实现类

package com.test.mail.impl; import javax.mail.internet.MimeMessage; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Component; import com.test.mail.MailSender; import com.test.util.PropertiesUtil; /*** 采用Spring的JavaMailSender发邮件* * @author gaowei.cheng 2015年12月23日*/ @Component public class SpringMail implements MailSender { private static Logger log = Logger.getLogger(SpringMail.class); //注入一个mailSender @Autowired JavaMailSenderImpl mailSender; public void sendMail() { //读取配置文件中的收件人 PropertiesUtil.readProperties("mail.properties");String[] to = PropertiesUtil.getProperty("mail.smtp.to").split(",");// 收件人 String[] cc = PropertiesUtil.getProperty("mail.smtp.cc").split(",");// 收件人 MimeMessage mailMessage = mailSender.createMimeMessage();log.info("发送邮件给" + PropertiesUtil.getProperty("mail.smtp.to")); try {MimeMessageHelper helper = new MimeMessageHelper(mailMessage, true, "utf-8");helper.setFrom(propUtil.getProperty("mail.smtp.from"));// 设置发件人 helper.setTo(to);// 设置收件人 helper.setCc(cc);// 设置抄送 helper.setSubject("SpringMail测试");// 设置主题 helper.setText("这是一封来自SpringMail的测试邮件");// 邮件体 mailSender.send(mailMessage);// 发送邮件 log.info("邮件发送成功...");} catch (Exception e) {log.error("邮件发送发生异常");log.error(e.getMessage());log.info("进行重发"); try {Thread.sleep(1000 * 1000); this.sendMail();} catch (InterruptedException e1) {log.info("重发邮件发生异常");log.error(e.getMessage());e1.printStackTrace();}}}
}

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

如果是自己公司内部的邮件服务器,这个程序是没有任何问题的。
但当我们使用QQ邮箱尽心登陆,然后发邮箱时会报错,错误信息如下

503 Error

Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 530 Error: A secure connection is requiered(such as ssl). More information at http://service.mail.qq.com/cgi-bin/help?id=28

这是因为腾讯需要认证,才用平时的QQ邮箱用户名和密码已经不能登陆了。

解决办法

进入报错时,腾讯给的网址http://service.mail.qq.com/cgi-bin/help?id=28
就会进入客户端设置页面

什么是客户端?
答:在腾讯看来,所有不是通过腾讯页面或者客户端登陆的都属于客户端。

所以现在问题已经很清晰了,在我们用程序发送电子邮件的时候,我们的密码已经不能用了,需要采用腾讯的授权码登陆

如何获取授权码?
答:跟着腾序的帮助中心一步一步来!

授权码的获取

什么是授权码?

授权码是QQ邮箱推出的,用于登录第三方客户端的专用密码。
适用于登录以下服务:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务。

通过以上可以看出,我们的程序登陆,发邮件采用的是SMTP协议,所以就必须采用授权码登陆了。

如何获取?

登陆qq邮箱

1、进入设置

2、进入账户

3、下拉到这里

点击开启

按照操作一步一步开启

开启完成之后就会得到一个授权码

所有程序登陆都次啊用授权码登陆

而且mailSender也要进行相应的修改

<!-- mailSender配置,qq需要SSL --> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="${mail.smtp.host}" /> <property name="port" value="${mail.smtp.port}" /> <property name="username" value="${mail.smtp.username}" /> <property name="password" value="${mail.smtp.password}" /> <property name="javaMailProperties"> <props> <prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop> <prop key="mail.smtp.auth">${mail.smtp.auth}</prop> <prop key="mail.smtp.starttls.enable">${mail.smtp.starttls.enable}</prop> <prop key="mail.smtp.socketFactory.port">${mail.smtp.port}</prop> <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> <prop key="mail.smtp.socketFactory.fallback">false</prop> </props> </property> </bean>

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

其他配置信息如下

#端口号,QQ邮箱需要使用SSL,端口号465或587 mail.smtp.port=465 #STARTTLS是对纯文本通信协议的扩展。它提供一种方式将纯文本连接升级为加密连接(TLS或SSL) mail.smtp.starttls.enable=true
mail.smtp.password=你的授权码

1 2 3 4 5

这样就可以登陆QQ邮箱发邮件了!

关于发邮件,改天再详细的写出来。

参考文献

http://wangcheng.iteye.com/blog/603908

http://blog.csdn.net/is_zhoufeng/article/details/12004073

转载于:https://my.oschina.net/sky2008/blog/611028

Java发邮件-QQ服务器认证相关推荐

  1. java 发邮件 qq有些_java qq邮件群发送邮件

    Java发送邮件,可以使用com.sun.mail包下面的javax.mail实现,发送.抄送.暗送,这些功能都有相应的API,功能非常的强大,通过SMTP服务进行邮件发送,市面上的邮箱很多种类,如: ...

  2. java 发邮件 qq有些_Java 发送QQ邮件

    1. 开启SMTP服务 1.1 在QQ邮箱的 设置->账户 里开启 SMTP 服务 1.2 QQ邮箱不能直接用QQ密码,而是使用 授权码 ,点击 生成授权码 2. 编写代码 2.1 添加依赖的j ...

  3. 简易的java发邮件客户端

    主要是想熟悉一下jigloo插件的使用,所以做了一个发邮件的小程序,其实调用的都是人家的东西,我们自己只做了最简单的傻瓜操作,每思及此,感觉要学的东西还很多. 本人很懒,搞swing那套东西很不给力, ...

  4. java发邮件的代码

    通过java发送邮件的代码 转载请注明出处:java发邮件的代码 package com.zuidaima.util.mail;import java.util.Properties;import j ...

  5. Java Mail---SMTP协议-Java发邮件(带附件)演示过程

    转载请注明出处: http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] JavaMail-API简介: 邮件客户端的主要任务是向邮件服务器发送邮件,以及接 ...

  6. Java发邮件(详解+源代码)

    Java发送邮件 一.邮件概述 (1)收发邮件 发邮件大家都会吧!发邮件是从客户端把邮件发送到邮件服务器,收邮件是把邮件服务器的邮件下载到客户端. 我们在163.126.QQ等网站注册的Email账户 ...

  7. 使用java发邮件,附jar包

    本人小白,很多都是转载资料,只是学习研究一下! 需要用到发邮件的朋友可以看一下,我们需要用到三个包,分别是commos- email.jar,javax.activation-1.1.0.jar,ma ...

  8. Java(83)Java发邮件简单工具类

    1.Maven引用 <!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api --><dependency& ...

  9. java发邮件_使用MATLAB自动发邮件

    MATLAB作为工程师的得力助手,常被我们誉为万能助手."MATLAB啥都能做,除了生孩子"这种话语常挂在我们嘴边.今天小编就偷偷告诉大家一个使用MATLAB自动发邮件的方法. 在 ...

最新文章

  1. windows10下,from skimage import morphology 报错的解决办法
  2. 【 C 】字符串查找基础笔记
  3. MySQL-InnoDB究竟如何巧妙实现,4种事务的隔离级别
  4. 5新标签中超链接_一环路新标签——“市井生活圈” 正在更新中......
  5. 计算机复试通知学校,提醒:部分学校复试通知已经出了!教育部关于21考研复试的规定!...
  6. 几个SpringCloud常见面试题及答案
  7. Java基础之深入认识hashCode和equals
  8. ubuntu16.04命令行模式和图形界面互相切换
  9. oracle怎样停止到数据,oracle启动和停止
  10. SQLite实现在线电子词典
  11. 龙举直播电商api开发
  12. android studio 截图方法,Android studio 2.0 的安装的全程截图,手把手教学,亲自实践。...
  13. 使用CME2配置Copley驱动器,带Maxon电机
  14. 一种去除U盘写保护的可行方法(dd 命令解决)
  15. vulfocus——maccms远程命令执行(CVE-2017-17733)
  16. matlab画黎曼函数,[2018年最新整理]matlab画复数函数图象和黎曼面.docx
  17. 桌面计算机图标双击打不开了,双击打不开图标怎么办 双击打不开图标解决方法【详解】...
  18. 一个简单的(基于redisson的)分布式同步工具类封装
  19. Centos7/RedHat7安装NVIDIA显卡驱动
  20. 听说Python成为世界性语言了? Python是怎么构建世界?字符串在哪里?(三)

热门文章

  1. c++11-template template Parameter
  2. 计算机hub体系部件,原来如此!USB Hub接口为啥都是4个7个或10个?
  3. Liferay门户与CAS实现SSO单点登录
  4. JavaScript学习备忘
  5. 上周热点回顾(7.10-7.16)
  6. Unity内置的三套消息发送机制的应用实例
  7. SpiderMonkey
  8. Ruby on Rails 實戰聖經阅读(三)
  9. 防止Entity Framework重复插入关联对象
  10. [转帖]迎战AMD 7nm 64核EPYC 英特尔至强也玩起了胶水以及性价比