Spring mvc之 发邮件(qq.163...)
一、 邮件开发涉及到的一些基本概念
1.1、邮件服务器和电子邮箱
要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在Internet很多提供邮件服务的厂商:sina、sohu、163、qq等等他们都有自己的邮件服务器。
这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。
电子邮箱(E-Mail地址)的获得需要在邮件服务器上进行申请,确切地说,电子邮箱其实就是用户在邮件服务器上申请的一个账户,用户在邮件服务器上申请了一个帐号后,邮件服务器就会为这个账号分配一定的空间,用户从而可以使用这个帐号以及空间发送电子邮件和保存别人发送过来的电子邮件。
1.2、邮件传输协议
1.2.1、SMTP协议
(官方解释)SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。
增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。
用户连接上邮件服务器之后,要想给它发送一封电子邮件,需要遵循一定的通讯规则,SMTP协议就是用来定义这种通讯规则的。因此,我们通常也把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。
1.2.2、POP3协议
(官方解释) POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。
同样,用户若想从邮件服务器管理的电子邮箱当中接收一封电子邮件话,它连上邮件服务器后,也要遵循一定的通讯格式,POP3协议就是用来定义这种通讯格式的。因此,我们通常也把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。
二、开启协议
根据上面的知识点,我们要发送邮件,首先得设置并且开启SMTP/POP3协议,下面分别以163邮箱 和 qq邮箱 为例 ,其实都是大同小异:
163邮箱:
首先进入163邮箱首页,选择--设置
选择---开启 ---- 获取验证码 ---输入验证码
点击 --- 确定 ,勾选协议开启
qq邮箱
(2)验证密保
记住这16位的授权码
以上就是163邮箱 和 qq 邮箱 协议开启 的步骤。不同点是:163 授权码是自己设置 ,qq 是服务端 指定授权码 。
三、使用Smtp协议发送邮件
以qq邮箱为例 ,首先加入jar 包:
"org.springframework:spring-context-support:$springVersion",
"javax.mail:mail:1.4.7"
在spring.xml 中配置:
//加载mail 资源信息 <context:property-placeholder location="classpath:mail.properties"/> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="${qq_host}"/> //这是smtp 服务器地址 stmp.qq.com <property name="username" value="${qq_username}"/> //邮箱账号 2054***@qq.com <property name="password" value="${qq_password}" /> //授权码16位 pckazfsugnqtedib <property name="javaMailProperties"> <props> <prop key="mail.transport.protocol">smtp</prop> <prop key="mail.smtp.auth">true</prop> <prop key="mail.smtp.starttls.enable">true</prop> <prop key="mail.debug">true</prop> </props> </property> </bean>
然后,在service 中写入方法
@Service public class UserService { @Resource private MailSender mailSender ; public void setMailSender(){ SimpleMailMessage mailMessage = new SimpleMailMessage(); mailMessage.setFrom("2054631701@qq.com"); mailMessage.setTo("1484024976@qq.com"); mailMessage.setSubject("好莱坞会员"); mailMessage.setText("你好1484024976用户,在腾讯11周年庆中幸运成为腾讯白金会员"); mailSender.send(mailMessage); } }
在 Controller中调用 此方法:
@Resource private UserService userService; @RequestMapping("/send") public String sendMial(){ userService.setMailSender(); return "success"; }
在jsp 页面中请求Controller:
<form action="/send" method="get"> <input type="submit" value="Send" /> </form>
以上就OK了。谢谢大家的关注,续更。。。。