JavaMail发送邮件
来源:互联网 发布:网络法制知识竞赛答题 编辑:程序博客网 时间:2024/05/22 07:46
一、Java Mail API简介
Java Mail API是SUN为Java开发者提供的公用的Mail API框架,他支持各种电子邮件通信协议,如IMAP,POP3,和SMTP,为Java应用程序提供了电子邮件处理的公共接口。 Java Mail API的最主要的类包括以下6种。
Java Mail API是SUN为Java开发者提供的公用的Mail API框架,他支持各种电子邮件通信协议,如IMAP,POP3,和SMTP,为Java应用程序提供了电子邮件处理的公共接口。 Java Mail API的最主要的类包括以下6种。
1、 javax.mail.Session
Session类是定义了一个基本会话,是Java Mail API最高层入口类。所有其他类都是经由这个Session才得以生效。Session对象从java.util.Properties对象中获取信息,如邮件发送服务器、接收邮件协议、发送邮件协议、用户名、密码及整个应用程序中共享的其他信息。
2、 javax.mail.Store
Store类是访问接收服务器上邮件帐户的入口,通过Store类的getFolder()方法,可以访问特定的邮件夹。
3、 javax.mail.Folder
Folder类表示了邮件夹,用于分级组织邮件,通过Folder类可以访问邮件夹中的邮件。
Store类是访问接收服务器上邮件帐户的入口,通过Store类的getFolder()方法,可以访问特定的邮件夹。
3、 javax.mail.Folder
Folder类表示了邮件夹,用于分级组织邮件,通过Folder类可以访问邮件夹中的邮件。
4、 javax.mail.Message
Message代表了电子邮件。Message类封装的邮件信息,提供了访问和设置邮件内容的方法。邮件中包含如下内容:
地址信息,包括发件人地址,收件人地址列表,抄送地址列表和广播地址列表
地址信息,包括发件人地址,收件人地址列表,抄送地址列表和广播地址列表
邮件标题
邮件发送和接收****期
邮件发送和接收****期
邮件具体内容
Message是个抽象类,常用的子类为javax.mail.internet.MimeMessage。MimeMessage能支持MIME类型电子邮件信息。
Message是个抽象类,常用的子类为javax.mail.internet.MimeMessage。MimeMessage能支持MIME类型电子邮件信息。
5、 javax.mail.Address
Address代表了邮件地址,与Message一样,也是抽象类。常用的子类为javax.mail.internet.InternetAddress类。
6、 javax.mail.Transport
Transport类根据指定的邮件发送协议(通常是SMTP),通过指定的邮件发送服务器来发送邮件。Transport类是抽象类,他提供了一个静态方法send(Message)来发送邮件。
Transport类根据指定的邮件发送协议(通常是SMTP),通过指定的邮件发送服务器来发送邮件。Transport类是抽象类,他提供了一个静态方法send(Message)来发送邮件。
二、JavaMail Demo
1、发送邮件所需的基本信息分装成一个类
public class SendMailInfo{
//发送邮件的服务器的IP和端口
private String mailServerHost;
private String mailServerPort;
//邮件发送者的地址
private String fromAddress;
//邮件接受者的地址
private String toAddress;
//登陆邮件发送服务器的用户名和密码
private String userName;
private String password;
//是否需要验证身份验证
private boolean validate = false;
//邮件主题
private String theme;
//邮件内容
private String content;
//邮件附件文件名
private String[] attachFileNames;
/**
* @create date:2014年9月14日 下午5:01:00
* @description:获得邮件发送会话的属性
* @return
*/
public Properties getProperties(){
Properties pro = new Properties();
pro.put( "mail.smtp.host", this. mailServerHost);
pro.put( "mail.smtp.port", this. mailServerPort);
pro.put( "mail.smtp.auth", validate ? "true" : "false");
return pro;
}
/**
* @create date:2014年9月14日 下午5:00:40
* @description:判断是否需要验证
* @return
*/
public boolean isValidate(){
return validate;
}
}
2、登陆邮件服务器时验证
public class MyAuthenticator extends Authenticator{
private String userName = null;
private String password = null;
public MyAuthenticator() {
super();
}
public MyAuthenticator(String userName, String password) {
super();
this. userName = userName;
this. password = password;
}
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication( userName, password);
}
}
3、简单邮件发送类
public class MailSender {
/**
* @create date:2014年9月14日 下午5:15:45
* @description:以文本格式发送邮件
* @param mailInfo
* @return
*/
public boolean sendTextMail(SendMailInfo mailInfo){
//判断是否需要身份验证
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
//如果需要身份验证,则创建一个密码验证
if ( mailInfo.isValidate()) {
authenticator = new MyAuthenticator(mailInfo.getUserName(),mailInfo .getPassword());
}
// 根据会话属性和密码验证器构造一个发送邮件的会话
Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
try {
//根据session创建一个消息
Message mailMessage = new MimeMessage(sendMailSession);
//创建邮件发送者的地址
Address from = new InternetAddress(mailInfo.getFromAddress());
//设置消息的发送者
mailMessage. setFrom(from);
//创建邮件的接受者地址,并设置到邮件消息中
Address to = new InternetAddress(mailInfo.getToAddress());
mailMessage. setRecipient(Message.RecipientType. TO, to);
//设置邮件消息的主题
mailMessage. setSubject(mailInfo.getTheme());
//设置邮件消息发送的时间
mailMessage. setSentDate(new Date(System.currentTimeMillis()));
//设置邮件消息的主要内容
String mailContent = mailInfo.getContent();
mailMessage. setText(mailContent);
//发送邮件
Transport. send(mailMessage);
return true;
} catch ( Exception e) {
e.printStackTrace();
}
return false;
}
4、测试方法
public void test1(){
MailSender mailSender = new MailSender();
// 这个类主要是设置邮件
SendMailInfo mailInfo = new SendMailInfo();
mailInfo.setMailServerHost( "smtp.qq.com");
mailInfo.setMailServerPort( "25");
mailInfo.setValidate( true);
mailInfo.setUserName( "***@qq.com");
mailInfo.setPassword( "****"); // 您的邮箱密码
mailInfo.setFromAddress( "****@qq.com");
mailInfo.setToAddress( "****@qq.com");
mailInfo.setTheme( "设置邮箱标题" );
mailInfo.setContent( "设置邮箱内容" );
System. out.println( mailInfo);
// 这个类主要来发送邮件
mailSender.sendTextMail( mailInfo); // 发送文体格式
}
三、Spring发送邮件
1、Spring Mail API
1)MailMessage接口:一个邮件信息个公共接口,允许用户设置邮件信息集的值,不用了解底层信息是简单的文本信息还是复杂的扩展类型。具有两个实现类SimpleMaiMessage和MimeMessageHelper。
2)SimpleMailMessage类:一个简单邮件的模型,包含from、to、subject、text、cc等
3)MimeMailMessage:实现MailMessage的MIME消息
4)MimeMassageHelper:填充MimeMaiMessage的助手类
5)MailSender:定义了发送邮件的策略,实现类JavaMailSenderImpl
6)JavaMailSender:继承MailSender接口,有JavaMailSenderImpl实现类,支持MIME消息参数和回调,通常使用与MimeMessageHelper类方便创建JavaMail mimemessage,包括附件等。
7)MessagePreparatory:JavaMail MIME消息的回调接口
8)InternetAddressEditor:直接填充一个InternetAddress属性。
注:
(1):MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型
2、Spring Mail Demo
1)mail.properties
mail.host= smtp.qq.com
mail.port= 25
mail.username= ****@qq.com
mail.password= ****
mail.from= ****@qq.com
2)spring.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:p= "http://www.springframework.org/schema/p"
xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 加载Properties文件 -->
<bean id = "configurer"
class= "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
<property name = "locations">
<list >
<value >classpath:mail.properties </value >
</list >
</property >
</bean >
<bean id = "mailMessage" class= "org.springframework.mail.SimpleMailMessage" >
<property name = "from">
<value >${mail.from} </value >
</property >
<!-- 查看SimpleMailMessage源码还可以注入标题,内容等 -->
</bean >
<!-- 申明JavaMailSenderImpl对象 -->
<bean id = "mailSender" class= "org.springframework.mail.javamail.JavaMailSenderImpl" >
<property name = "defaultEncoding" value= "UTF-8" />
<property name = "host" value= "${mail.host}" />
<property name = "port" value= "${mail.port}"/>
<property name = "username" value= "${mail.username}" />
<property name = "password" value= "${mail.password}" />
<property name = "javaMailProperties">
<props >
<!-- 设置认证开关 -->
<prop key = "mail.smtp.auth"> true</ prop>
<!-- 启动调试开关 -->
<prop key = "mail.debug"> true</ prop>
<!-- 设置发送延时 -->
<prop key = "mail.smtp.timeout"> 0</ prop>
</props >
</property >
</bean >
</ beans>
3)send Mail
public class SendMailTest {
public static void main(String[] args) throws MessagingException {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"spring.xml");
JavaMailSenderImpl sender = (JavaMailSenderImpl) ctx
.getBean( "mailSender");
MimeMessage mailMessage = sender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage ,
true);
messageHelper.setFrom( "****@qq.com" );
messageHelper.setTo( "*****@qq.com" );
messageHelper.setSubject( "测试邮件中嵌套图片!!" );
// true 表示启动HTML格式的邮件
messageHelper.setText(
"<html><head></head><body><h1>hello!!spring image html mail</h1>"
+ "<a href=http://www.baidu.com>baidu</a>"
+ "<img src=cid:image/></body></html>", true);
FileSystemResource img = new FileSystemResource( new File("aa.png" ));
messageHelper.addInline( "image", img); // 跟cid 一致
sender.send( mailMessage);
System. out.println( "邮件发送成功..." );
}
}
0 0
- javamail发送邮件
- 用javamail 发送邮件
- javamail发送邮件--sendmail
- JAVAMAIL发送邮件方法
- JavaMail发送邮件
- JavaMail发送邮件
- JavaMail发送邮件例子
- 用javamail发送邮件
- 用Javamail发送邮件
- JavaMail直接发送邮件
- JavaMail发送邮件
- JavaMail 发送验证邮件
- 使用JavaMail发送邮件
- javaMail发送邮件实例
- 用javamail 发送邮件
- JavaMail 实现邮件发送
- javamail邮件发送问题
- javamail发送邮件
- Maven创建web项目具体步骤【转】
- 【可怕的代价!中国发展二十年,河流消逝2万8!】美大西洋月刊披露:中国经济大发展的20年里,环境极度恶化!空气、食品、土地、河流全部遭到严重污染破坏!令人恐怖的是,
- loadView, viewDidLoad, viewDidUnLoad,分别是在什么时候被调用的.
- 基本unrar用法
- Leetcode Trapping Rain Water
- JavaMail发送邮件
- 黑马程序员--dom4j操作XML
- 堆排序
- winsnmp项目总结
- SE10与SE09有何区别?
- SQL Server附加数据库出错:无法打开物理文件,操作系统错误5
- 贝护佳孕妇客户端,笔记
- vs2013运行c语言出现:无法查找或打开 PDB 文件
- 【内核研究】理解Context