前言:我目前总结的使用java发送邮件的方式有两种,分别是在spring框架xml配置文件使用bean标签,另一种方法是把发送功能封装成一个对象,废话不多说上代码, 边看代码边讲解,希望对需要的人能有帮助。
一、使用xml配置文件发送邮件
第一步:新建一个xml文件起名为emailSender.xml (名称是随意的,后面的代码和名称对应上就可以)
emailSender.xml 内容如下
<?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:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:context="http://www.springframework.org/schema/context" xmlns:lang="http://www.springframework.org/schema/lang" xmlns:security="http://www.springframework.org/schema/security" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.1.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd"> <!-- ******************************************************************** --> <!-- Spring 3.0 configuration --> <!-- ******************************************************************** --> <mvc:annotation-driven/> <!-- Allows for mapping the DispatcherServlet to "/" by forwarding static resource requests to the container's default Servlet --> <mvc:default-servlet-handler/> <!-- 配置邮箱发射器 --> <bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host"> <value>smtp.qq.com</value> </property> <property name="port"> <!-- Error using port 465, so use port 587 --> <value>587</value> </property> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">true</prop> <prop key="mail.smtp.timeout">80000</prop> <!-- <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> <prop key="mail.smtp.socketFactory.port">465</prop> --> </props> </property> <property name="username"> <value>这里填写发送邮箱号</value> </property> <property name="password"> <value>这里填写密码(qq邮箱填写授权码)</value> </property> </bean> </beans>
第二步:写java代码(可以发送html邮件哦,只需要修改一处代码就OK啦!!!)
import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class SendEmailController { @RequestMapping(value = "/sendEmail", method = RequestMethod.POST) @ResponseBody public void sendEmail(){ try { System.out.println("read to send"); //引入mailSender.xml配置文件 ApplicationContext ctx = new ClassPathXmlApplicationContext("mailSender.xml"); //从配置文件中创建java邮件发射器 JavaMailSender sender = (JavaMailSender)ctx.getBean("javaMailSender"); //创建发送消息对象 MimeMessage msg = sender.createMimeMessage(); //创建发送消息帮助对象,utf-8编码 MimeMessageHelper helper = new MimeMessageHelper(msg,true,"utf-8"); //设置发送人邮箱 helper.setFrom("xxxxxx@qq.com"); //设置收件人邮箱 helper.setTo("xxxxxx@163.com"); //设置邮箱主题 helper.setSubject("测试邮件"); //设置邮箱内容--纯文本格式 helper.setText("tets this is a spring mvc email");
//我想发送一封html邮件,把 helper.setText("") 修改成 msg.setContent("邮件内容", "text/html;charset = utf-8"); System.out.println("Is sending..."); //发送邮件 sender.send(msg); System.out.println("email send ok"); } catch (MessagingException e) { System.out.println("send fail"); e.printStackTrace(); } } }
二、第二种方法:直接使用java代码配置
package com.ccpit.p4.dispatch.web; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMessage.RecipientType; public class sendMail { public static void main(String[] args) throws MessagingException{ // 创建Properties 类用于记录邮箱的一些属性 final Properties props = new Properties(); // 表示SMTP发送邮件,必须进行身份验证 props.put("mail.smtp.auth", "true"); //此处填写SMTP服务器 props.put("mail.smtp.host", "smtp.qq.com"); //端口号,QQ邮箱给出了两个端口,但是另一个我一直使用不了,所以就给出这一个587 props.put("mail.smtp.port", "587"); // 此处填写你的账号 props.put("mail.user", "xxxxxx@qq.com"); // 此处的密码就是前面说的16位STMP口令 props.put("mail.password", "xxxxxx"); // 构建授权信息,用于进行SMTP进行身份验证 Authenticator authenticator = new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { // 用户名、密码 String userName = props.getProperty("mail.user"); String password = props.getProperty("mail.password"); return new PasswordAuthentication(userName, password); } }; // 使用环境属性和授权信息,创建邮件会话 Session mailSession = Session.getInstance(props, authenticator); // 创建邮件消息 MimeMessage message = new MimeMessage(mailSession); // 设置发件人 InternetAddress form = new InternetAddress( props.getProperty("mail.user")); try { message.setFrom(form); } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 设置收件人的邮箱 InternetAddress to = new InternetAddress("xxxxxx@163.com"); message.setRecipient(RecipientType.TO, to); // 设置邮件标题 message.setSubject("测试邮件"); // 设置邮件的内容体 message.setContent("这是一封测试邮件", "text/html;charset=UTF-8"); // 最后当然就是发送邮件啦 Transport.send(message); } }