首先进入自己的QQ邮箱,在设置中修改账户信息

然后来至底部 

点击开启,再用手机发送对应信息到指定号码,然后点击我已发送 

获取授权码 
 
注意提示:

到这里,相信你已经开通了SMTP服务,这样就可以在java code发送邮件了


接下来的是Spring 中使用邮件服务

首先是配置信息使用的是587端口,刚开始用465端口我纠结了好久(使用465端口的错误详情),用不了,你可以尝试,默认的25端口应该也是不适合的

    <!-- 邮件服务 -->
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.qq.com"/>
<property name="port" value="587"/>//或许你可以用465端口,默认的25不适合
<property name="protocol" value="smtp"/>
<property name="username" value="785427346@qq.com"/>
<property name="password" value="xxxxxxxxxxxx"/>//这里的是你通过短信后,获取的授权码
<property name="defaultEncoding" value="UTF-8"/>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.timeout">25000</prop>
</props>
</property> </bean> <!-- this is a template message that we can pre-load with default state -->
<bean id="templateMessage" class="org.springframework.mail.SimpleMailMessage">
<property name="from" value="785427346@qq.com"/>
<property name="subject" value="尝试发邮件"/>
</bean> <bean id="orderManager" class="cn.cherish.common.SimpleOrderManager">
<property name="mailSender" ref="mailSender"/>
<property name="templateMessage" ref="templateMessage"/>
</bean>
 

用maven引入的jar包

    <!-- 邮件 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
 

下面只是一个工具类作简单例子,请勿见怪

package cn.cherish.common;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Properties; import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage; import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper; /**
* 项目名称:springmvc_hibernate
* 类名称:MailUtil
* 类描述:
* 创建人:Cherish
* 联系方式:785427346@qq.com
* 创建时间:2016年4月22日 下午3:51:48
* @version 1.0
*/
public class MailUtil { private static final String HOST = "smtp.qq.com";
private static final String SMTP = "smtp";
private static final String USERNAME = "785427346@qq.com";
private static final String PASSWORD = "xxxxxxxxxx";
private static final int PORT = 587;//587/465
private static final String DEFAULTENCODING = "UTF-8"; private static JavaMailSenderImpl senderImpl = new JavaMailSenderImpl(); private static Properties prop = new Properties(); static{
// 设定mail server
senderImpl.setHost(HOST);
senderImpl.setProtocol(SMTP);
senderImpl.setUsername(USERNAME);
senderImpl.setPassword(PASSWORD);
senderImpl.setPort(PORT);
senderImpl.setDefaultEncoding(DEFAULTENCODING); // 设定properties
prop.put("mail.smtp.auth", "true");
prop.put("mail.smtp.timeout", "25000");
//设置调试模式可以在控制台查看发送过程
prop.put("mail.debug", "true"); senderImpl.setJavaMailProperties(prop);
} public static void main(String args[]) {
// 设置收件人,寄件人 用数组发送多个邮件
// String[] array = new String[] {"88888@qq.com","666666@qq.com","999999999@qq.com",USERNAME};
String[] array = new String[] {USERNAME};
String subject = "Cherish内嵌图片、音乐的邮件"; // StringBuffer sb = new StringBuffer();
// try {
// URL url = new URL("http://www.imooc.com/");//http://android-studio.org/
//
// URLConnection conn = url.openConnection();
// InputStream is = conn.getInputStream();
//
// BufferedReader reader = new BufferedReader(new InputStreamReader(is));
//
// String string = null;
// while ((string = reader.readLine()) != null) {
// sb.append(string);
// }
//
// //System.out.println(sb.toString());
//
// } catch (Exception e) {
// e.printStackTrace();
// }
//
// boolean result = htmlMail(array, subject, sb.toString()); String filePath = "E:/javaxmail.png";
String html = "<html><head>"+
"</head><body>"+
"<audio src='http://m10.music.126.net/20160422225433/25b43b999bcdaf3425b9194514340596/ymusic/8c94/b9af/69e3/7ebe35b8e00154120822550b21b0c9c5.mp3' autoplay='autoplay' controls='controls' loop='-1'>爱你</audio>"+
"<h1>Hello,Nice to meet you!</h1>"+
"<span style='color:red;font-size:36px;'>并摸了一把你的小奶</span>"+
"<img src='cid:javaxmail.png'>"+
"</body></html>";
boolean result = inlineFileMail(array, subject, html, filePath); if (result) {
System.out.println("发送邮件成功。。。。");
} } /**
* 发送简单邮件
* @param to 收件人邮箱
* @param subject 主题
* @param content 内容
* @return
*/
public static boolean singleMail(String to, String subject, String content){
String[] array = new String[] {to};
return singleMail(array, subject, content);
} /**
* 发送简单文本邮件
* @param to 收件人邮箱数组
* @param subject 主题
* @param content 内容
* @return
*/
public static boolean singleMail(String[] to, String subject, String content){
boolean result = true; SimpleMailMessage mailMessage = new SimpleMailMessage();
// 设置收件人,寄件人 用数组发送多个邮件
mailMessage.setTo(to);
mailMessage.setFrom(USERNAME);
mailMessage.setSubject(subject);
mailMessage.setText(content);
// 发送邮件
try {
senderImpl.send(mailMessage);
} catch (MailException e) {
e.printStackTrace();
result = false;
}
return result;
} /**
* 发送html邮件
* @param to 收件人
* @param subject 主题
* @param html html代码
* @return
*/
public static boolean htmlMail(String[] to, String subject, String html){
boolean result = true; MimeMessage mailMessage = senderImpl.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage); try {
// 设置收件人,寄件人 用数组发送多个邮件
messageHelper.setTo(to);
messageHelper.setFrom(USERNAME);
messageHelper.setSubject(subject);
// true 表示启动HTML格式的邮件
messageHelper.setText(html, true); // 发送邮件
senderImpl.send(mailMessage);
} catch (MessagingException e) {
result = false;
e.printStackTrace();
}
return result;
} /**
* 发送内嵌图片的邮件 (cid:资源名)
* @param to 收件人邮箱
* @param subject 主题
* @param html html代码
* @param imgPath 图片路径
* @return
*/
public static boolean inlineFileMail(String[] to, String subject, String html, String filePath){
boolean result = true; MimeMessage mailMessage = senderImpl.createMimeMessage();
try {
//设置true开启嵌入图片的功能
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true);
// 设置收件人,寄件人 用数组发送多个邮件
messageHelper.setTo(to);
messageHelper.setFrom(USERNAME);
messageHelper.setSubject(subject);
// true 表示启动HTML格式的邮件
messageHelper.setText(html, true); FileSystemResource file = new FileSystemResource(new File(filePath));
messageHelper.addInline(file.getFilename(), file); // 发送邮件
senderImpl.send(mailMessage);
} catch (MessagingException e) {
result = false;
e.printStackTrace();
}
return result;
} /**
* 发送带附件的邮件
* @param to
* @param subject
* @param html
* @param filePath
* @return
*/
public static boolean attachedFileMail(String[] to, String subject, String html, String filePath){
boolean result = true; MimeMessage mailMessage = senderImpl.createMimeMessage(); try {
// multipart模式 为true时发送附件 可以设置html格式
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true,"utf-8");
// 设置收件人,寄件人 用数组发送多个邮件
messageHelper.setTo(to);
messageHelper.setFrom(USERNAME);
messageHelper.setSubject(subject);
// true 表示启动HTML格式的邮件
messageHelper.setText(html, true); FileSystemResource file = new FileSystemResource(new File(filePath));
// 这里的方法调用和插入图片是不同的。
messageHelper.addAttachment(file.getFilename(), file); // 发送邮件
senderImpl.send(mailMessage);
} catch (MessagingException e) {
result = false;
e.printStackTrace();
}
return result;
}

温馨提示:

<img src='cid:javaxmail.png'>
这是内嵌图片的方式 javaxmail.png 要和 messageHelper.addInline(file.getFilename(), file); 这里的 file.getFilename() 相一致就可以

现在只差一步了,那就是Ctrl + F11,有不当之处敬请提出,共同进步 

**

使用javax.mail发邮件代码

**

package cn.cherish.utils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import java.util.Properties; import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility; /**
* 项目名称:springmvc_hibernate
* 类名称:EmailUtil
* 类描述:发送邮件工具类
* 创建人:Cherish
* 联系方式:785427346@qq.com
* 创建时间:2016年4月23日 上午9:48:21
* @version 1.0
*/
public class EmailUtil { // properties配置文件地址
//private static final String PROPERTIES_PATH = "standard_data.properties"; private static Session session;
private static Properties props = new Properties();
private static final String HOST = "smtp.qq.com";
private static int PORT = 587;
private static final String isAUTH = "true";
private static final String FROM = "785427346@qq.com"; private static final String USERNAME = "785427346@qq.com";
private static final String PASSWORD = "xxxxxxxxxxxxxxxx"; private static final String TIMEOUT = "25000";
private static final String DEBUG = "true"; // 初始化session
static {
props.put("mail.smtp.host", HOST);
props.put("mail.smtp.port", PORT);
props.put("mail.smtp.auth", isAUTH);
props.put("fromer", FROM);
props.put("username", USERNAME);
props.put("password", PASSWORD);
props.put("mail.smtp.timeout", TIMEOUT);
props.put("mail.debug", DEBUG); session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(USERNAME, PASSWORD);
}
});
} public static void main(String[] args) {
try {
String html = "<html><head>"+
"</head><body>"+
"<audio src='http://219.128.78.22/m10.music.126.net/20160423105749/3cee5688a7dc87d28a265fd992ecb0a2/ymusic/8c94/b9af/69e3/7ebe35b8e00154120822550b21b0c9c5.mp3?wshc_tag=1&wsts_tag=571aded1&wsid_tag=b73f773e&wsiphost=ipdbm' autoplay='autoplay' controls='controls' loop='-1'>爱你</audio>"+
"<video controls='controls'>"+
"<source src='http://v2.mukewang.com/45ad4643-87d7-444b-a3b9-fbf32de63811/H.mp4?auth_key=1461379796-0-0-e86cefa71cef963875fd68f8a419dd8a' type='video/mp4' />"+
"Your browser does not support the video tag."+
"</video>"+
"<h1>Hello,nice to fuck you!</h1>"+
"<span style='color:red;font-size:36px;'>并抓了一把你的小鸡鸡</span>"+
"</body></html>"; //sendEmail("785427346@qq.com", "yeah", html, true); sendFileEmail("785427346@qq.com", "yeah", html, new File("E:/xiaoming.zip"));
} catch (Exception e) {
e.printStackTrace();
}
} /**
*
* @Title sendEmail
* @Description 通过isHtml判断发送的邮件的内容
* @param to 邮件接收者
* @param content 邮件内容
* @param isHtml 是否发送html
* @throws MessagingException
* @throws IOException
* @throws FileNotFoundException
* @throws EmailException
*/
public static void sendEmail(String to, String title, String content, boolean isHtml)
throws FileNotFoundException, IOException, MessagingException {
String fromer = props.getProperty("fromer");
if (isHtml) {
sendHtmlEmail(fromer, to, title, content);
} else {
sendTextEmail(fromer, to, title, content);
}
} // 发送纯文字邮件
public static void sendTextEmail(String from, String to, String subject, String content)
throws FileNotFoundException, IOException, MessagingException { Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipient(RecipientType.TO, new InternetAddress(to));
message.setSubject(subject);
message.setText(content);
message.setSentDate(new Date());
Transport.send(message);
} // 发送有HTML格式邮件
public static void sendHtmlEmail(String from, String to, String subject, String htmlConent)
throws FileNotFoundException, IOException, MessagingException { Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipient(RecipientType.TO, new InternetAddress(to));
message.setSubject(subject);
message.setSentDate(new Date()); Multipart multi = new MimeMultipart();
BodyPart html = new MimeBodyPart();
html.setContent(htmlConent, "text/html; charset=utf-8");
multi.addBodyPart(html);
message.setContent(multi);
Transport.send(message);
} // 发送带附件的邮件
public static void sendFileEmail(String to, String subject, String htmlConent, File attachment)
throws FileNotFoundException, IOException, MessagingException { Message message = new MimeMessage(session);
String fromer = props.getProperty("fromer");
message.setFrom(new InternetAddress(fromer));
message.setRecipient(RecipientType.TO, new InternetAddress(to));
message.setSubject(subject);
message.setSentDate(new Date());
// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipart multipart = new MimeMultipart();
// 添加邮件正文
BodyPart contentPart = new MimeBodyPart();
contentPart.setContent(htmlConent, "text/html;charset=UTF-8");
multipart.addBodyPart(contentPart);
// 添加附件的内容
if (attachment != null) {
BodyPart attachmentBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(attachment);
attachmentBodyPart.setDataHandler(new DataHandler(source)); // 网上流传的解决文件名乱码的方法,其实用MimeUtility.encodeWord就可以很方便的搞定
// 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
// sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
// messageBodyPart.setFileName("=?GBK?B?" +
// enc.encode(attachment.getName().getBytes()) + "?=");
// MimeUtility.encodeWord可以避免文件名乱码
attachmentBodyPart.setFileName(MimeUtility.encodeWord(attachment.getName()));
multipart.addBodyPart(attachmentBodyPart);
} message.setContent(multipart);
Transport.send(message);
} }

使用spring框架中的组件发送邮件的更多相关文章

  1. Spring框架中一个有用的小组件:Spring Retry

    1.概述 Spring Retry 是Spring框架中的一个组件, 它提供了自动重新调用失败操作的能力.这在错误可能是暂时发生的(如瞬时网络故障)的情况下很有帮助. 在本文中,我们将看到使用Spri ...

  2. 细说shiro之五:在spring框架中集成shiro

    官网:https://shiro.apache.org/ 1. 下载在Maven项目中的依赖配置如下: <!-- shiro配置 --> <dependency> <gr ...

  3. Spring框架中IoC(控制反转)的原理(转)

    原文链接:Spring框架中IoC(控制反转)的原理 一.IoC的基础知识以及原理: 1.IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作, ...

  4. 再析在spring框架中解决多数据源的问题

    在前面我写了<如何在spring框架中解决多数据源的问题>,通过设计模式中的Decorator模式在spring框架中解决多数据源的问题,得到了许多网友的关注.在与网友探讨该问题的过程中, ...

  5. Spring框架中 配置c3p0连接池 完成对数据库的访问

    开发准备: 1.导入jar包: ioc基本jar jdbcTemplate基本jar c3p0基本jar 别忘了mysql数据库驱动jar 原始程序代码:不使用配置文件方式(IOC)生成访问数据库对象 ...

  6. Spring框架中ModelAndView、Model、ModelMap区别

    原文地址:http://www.cnblogs.com/google4y/p/3421017.html SPRING框架中ModelAndView.Model.ModelMap区别   注意:如果方法 ...

  7. Spring框架中的定时器 使用和配置

    Spring框架中的定时器 如何使用和配置 转载自:<Spring框架中的定时器 如何使用和配置>https://www.cnblogs.com/longqingyang/p/554543 ...

  8. 【Spring】8、Spring框架中的单例Beans是线程安全的么

    看到这样一个问题:spring框架中的单例Beans是线程安全的么? Spring框架并没有对单例bean进行任何多线程的封装处理.关于单例bean的线程安全和并发问题需要开发者自行去搞定.但实际上, ...

  9. Spring5源码解析-Spring框架中的单例和原型bean

    Spring5源码解析-Spring框架中的单例和原型bean 最近一直有问我单例和原型bean的一些原理性问题,这里就开一篇来说说的 通过Spring中的依赖注入极大方便了我们的开发.在xml通过& ...

随机推荐

  1. oracle数据库备份、还原 (如何将Oracle 11g备份的dat文件导入到10g数据库里面)

    如何将Oracle 11g备份的dat文件导入到10g数据库里面 解决方法:      导出的时候后面加上目标数据库的版本号   导出: 在SQL plus下执行:create or replace  ...

  2. docker镜像文件导入与导出

    工作中经常需要拉取一些国外的镜像,但是网络限制等原因在公司拉取很慢,所以我习惯用亚马逊服务器拉取镜像,导出后下载到本地再导入开发环境 1. 查看镜像id sudo docker images REPO ...

  3. Ubuntu16.04 install android-studio-ide-162.4069837-linux

    本文讲解如何在Ununtu 16.04上安装jdk.Android Sdk.Anroid Studio.Genymotion.AndroidStudio与Genymotion绑定. 由于第一次装了双系 ...

  4. Python系列之文件操作、冒泡算法、装饰器、及递归

    文件处理 python对文件进行读写操作的方法与具体步骤,包括打开文件.读取内容.写入文件.文件中的内容定位.及关闭文件释放资源等 open().file(),这个两函数提供了初始化输入\输出(I\O ...

  5. zabbix灵活使用userparameters

    userparameters介绍 官网文献:https://www.zabbix.com/documentation/2.0/manual/config/items/userparameters 当我 ...

  6. Rx 入门指引 (一)

    自学 Rx 快有一个周了, 它非常适合处理复杂的异步场景.结合自己所学,决定写系列教程. 我认为, Rx 中强大的地方在于两处 管道思想,通过管道,我们订阅了数据的来源,并在数据源更新时响应 . 强大 ...

  7. SqlServer和Oracle中一些常用的sql语句3 行列转换

    --217, SQL SERVER SELECT Cust_Name , MAX(CASE WHEN Order_Date ='2009-08-01' THEN AR END) "2009- ...

  8. SELECT与SET对变量赋值

    SQL Server 中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT. 对于这两种方式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们并没有注意,其实这两 ...

  9. Codeforces A. Trip For Meal

    A. Trip For Meal time limit per test 1 second memory limit per test 512 megabytes input standard inp ...

  10. 从零开始搭建框架SSM+Redis+Mysql(二)之MAVEN项目搭建

    从零开始搭建框架SSM+Redis+Mysql(二)之MAVEN项目搭建 废话不说,直接撸步骤!!! 1.创建主项目:ncc-parent 选择maven创建项目,注意在创建项目中,packing选择 ...