使用Javax.mail发送简单邮件到QQ邮箱的流程:

1、 Properties对象封装会话所需的信息
2、根据Properties对象封装的信息创建Session对象

Session session = Session.getInstance(Properties properties);

3、 根据session对象创建邮件MimeMessage

MimeMessage message = createMimeMessage(Session session ,……);

4、 根据session对象与smtp服务器创建连接

Transport transport = session.getTransport();
transport.connect(“发件人邮箱”,“发件人邮箱授权码”);

5、 发送邮件

transport.sendMail(message,message.getAllRecepient);

6、 关闭连接

tranpsort.close()

JavaMailSender 如何初始化username password javax.mail_java


JavaMailSender 如何初始化username password javax.mail_服务器_02

【遇到问题】:

JavaMailSender 如何初始化username password javax.mail_封装_03

【原因】:

缺少activation.jar

Properties属性:

属性名

属性类型

说明

mail.stmp.host

String

SMTP服务器地址,如smtp.sina.com.cn

mail.stmp.port

int

SMTP服务器端口号,默认为25

mail.stmp.auth

boolean

SMTP服务器是否需要用户认证,默认为false

mail.stmp.user

StringSMTP

默认的登陆用户名

mail.stmp.from

String

默认的邮件发送源地址

mail.stmp.socketFactory.class

String

socket工厂类类名,通过设置该属性可以覆盖提供者默认的实现,必须实现javax.net.SocketFactory接口

mail.stmp.socketFactory.port

int

指定socket工厂类所用的端口号,如果没有规定,则使用默认的端口号

mail.smtp.socketFactory.fallback

boolean

设置为true时,当使用指定的socket类创建socket失败后,将使用java.net.Socket创建socket,默认为true

package Samples;

import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class Demo01 {


	public static void sendEmail() throws Exception {
		
		//1、 Properties对象封装会话所需的信息
		Properties props = new Properties();
		props.setProperty("mail.transport.protocol", "smtp");//使用协议 smtp
		props.setProperty("mail.smtp.host", "smtp.qq.com");// qq的smtp服务器地址
		props.setProperty("mail.smtp.port", "465");	//协议端口号
		props.setProperty("mail.smtp.auth", "true");// 需要授权
		
		//是否需要SSL安全认证 qq是要求需要的
		props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
		props.setProperty("mail.smtp.socketFactory.fallback", "false");	//	没有经过SSL认证的邮件不接收
		props.setProperty("mail.smtp.socketFactory.port", "465");  //SSL 认证端口与smtp一样就可以了
		
		
		//2、根据Properties对象封装的信息创建Session对象
		Session  session = Session.getInstance(props);
		
		//3、 根据session创建邮件MimeMessage
		MimeMessage message = creatMimeMessage(session,"发件人邮箱地址","收件人邮箱地址","UTF-8");
		
		//4、通过session建立与stmp服务器的连接
		Transport transport = session.getTransport();
		
		//connect(String host,String user,String password) host:发件人邮箱地址; user:用户名;  password:邮箱授权码
		transport.connect("发件人邮箱地址","发件人QQ邮箱授权码");
		
		//5、发送邮件
		transport.sendMessage(message, message.getAllRecipients());
		//6、关闭连接
		transport.close();
	}
	public static MimeMessage creatMimeMessage(Session session,String send, String recipient, String charset) throws Exception {
		//简单邮件:{发件人(from)、收件人(to)、标题(subject)、正文(content)、日期()date}   {图片、附件}
	
		MimeMessage message = new MimeMessage(session);
		//InternetAddress(String address,String personal, String charset)  其中address:邮件地址  ;personal:标识 ; charset:编码
		Address from = new InternetAddress(send,"我是发件人",charset);
		Address to = new InternetAddress(recipient,"我是收件人",charset);
		message.setFrom(from);
		
		//收件人类型:普通收件人(TO)、抄送(CC)、密送(BCC) 
		message.setRecipient(MimeMessage.RecipientType.TO,to);
		
		message.setSubject("这是主题",charset);		//	邮件主题
		message.setContent("这是正文……","text/html;charset=utf-8");	//正文内容
		message.setSentDate(new Date());		//发件日期
		
		return message;
		
	}


	
	public static void main(String[] args) throws Exception {
		sendEmail();
		
	}
}

注意:
1、 邮件是网页显示的,content的编码格式为"text/html;charset=utf-8",因此:message.setContent(“这是正文……”,“text/html;charset=utf-8”);

2 、javax.mail包的Address类为抽象类,所以使用其子类InternetAddress:

JavaMailSender 如何初始化username password javax.mail_javamail_04


3、addRecipient(Message.RecipientType, Address)

Message.RecipientType表示/收件人类型,为枚举类型。有以下三种

:普通收件人(MimeMessage.RecipientType…TO)、抄送(MimeMessage.RecipientType…CC)、密送(MimeMessage.RecipientType…BCC)