javaMail发送/接收邮件

//利用javaMail实现发送邮件
//四大核心类:
1,Message类:是创建和解析邮件的核心AP端I。通常使用他的子类,MineMessage类。客户端发送邮件时,首先使用创建邮件的
javaMail创建出封装了邮件数据的Message对象,然后把这个对象传递给邮件发送API(Transport类)发送,客户端接受邮件时,邮
件接受API把接受到的邮件数据封装到Message类的实例中,客户程序在使用邮件解析API从这个对象中解析收到的邮件数据。
2,Transport类:是发送邮件的核心API类,他的实例对象代表了某个邮件协议的邮件发送对象,例如:SMTP协议,客户端程序创
建好,Message对象后,只需要使用邮件发送API得到Transport对象,然后把Message对象传递给Transport对象,并调用他的发送方
法,就可以把邮件发送给指定的SMTP服务器。
3,Store类:是接受邮件的核心API类,他的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议,客户端接收邮
件时,只需要使用邮件接收API得到Store对象,然后调用Store对象的接收方法。就可以从指定的POP3服务器获得邮件数据,并把这
些邮件数据封装到表示邮件的Message对象中。
4,Session类:用于定义整个应用程序的所需的环境信息,以及收集客户端与邮件服务器建立网络连接会话信息,例如邮件服务器的
主机名,端口号,采用的邮件发送和接收协议等。Session对象根据这些信息构件用于邮件收发的Transport和Store对象,以及客户端
创建Message对象时提供信息支持。

//邮件发送问题
1,发件人的邮箱和密码:有的邮箱设置了独立的密码,还有的必须用授权码登陆(qq邮箱)
2,发件人的SMTP服务器地址:一般是smtp.xxx.com,比如163邮箱,smtp.163.com;qq邮箱是,smtp.qq.com
3,有可能所有的信息都是正确的,但是还是接收不到邮件,有可能是收件箱拒收你发的邮件,解决方式:去垃圾箱找找,或者重复发送
邮件,或者更换收件箱。

//使用javaMail发送简单的纯文本邮件SendMailText

public class SendMailText{
//发/收件人地址
public static String senderAddress="[email protected]";
public static String recipientAddress="[email protected]";
//发件人账户名和密码
public static String senderAccount="xxx";
public static String senderPassword="xxx";
    public static void main(String[] args) throws Exception{
	//连接邮件服务器的参数配置
	Properties props = new Properties();
	//设置用户认证方式
	props.setProperty("mail.smtp.auth","true");
	//设置传输协议
	props.setProperty("mail.transport.protocol","smtp");
	//设置发件人的SMTP服务器地址
	props.setProperty("mail.stmp.host","smtp.163.com");
	//创建定义整个应用程序所需的环境信息的session对象
	Session session =Session.getInstance(props);
	//设置调试信息在控制台打印
	session.setDebug(true);
	//创建邮件Message实例对象
	Message msg = getMineMessage(session);
	//根据Session对象获取邮件传输对象Transport
	Transport transport = session.getTransport();
	//设置发件人的账户和密码
	transport.connect(senderAccount,senderPassword);
	//发送邮件,并发送到所有收件人地址 ,Message.getAllRecipients()获取到创建邮件对象时添加的所有收件/抄送/密送人
	transport.sendMessage(msg,msg.getAllRecipients());
	//如果只想发送给指定的人  //transport.sendMessage(msg,new Addreess[]{new InternetAddress("[email protected]")});
	//关闭邮件连接
	transport.close();
}
/**//获得创建一封纯文本邮件的实例
*@param session
*@return
*@throws MessagingException
*@throws AddressException
*/
public static MimeMessage getMineMessage(Session session) throws Exception{
	//创建一封邮件的实例对象
	MimeMessage msg =new MineMessage(session);
	//设置发件人地址
	msg.setFrom(new InternetAddress(senderAddress));
	//设置收件人地址(可以增加多个收件人,抄送,密送)
	/**
	这一行代码写多行
	MineMessage.RecipientType.TO:发送
	MimeMessage.RecipiientType.CC:抄送
	MimeMessage.RecipiientType.BCC:密送	
	*/
	msg.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(recipientAddress));
	//设置邮件主题
	msg.setSubject("邮件主题","UTF-8");
	//设置邮件正文
	msg.setContext("简单的纯"文本邮件","text/html;charset=UTF-8");
	//设置邮件发送时间,默认立即发送。
	msg.setSendDate(new Date());

	return msg;
	}
}

//利用javaMail发送带有图片和附件邮件SendTextPic

public class SendTextPic{
    //发/收件人地址
public static String senderAddress="[email protected]";
public static String recipientAddress="[email protected]";
//发件人账户名和密码
public static String senderAccount="xxx";
public static String senderPassword="xxx";
public static void main(String[] args) throws Exception{
	//1,连接邮件服务器的参数配置
	Properties props = new Properties();
	//设置用户认证
	props.setProperty("mail.smtp.auth",true);
	props.setProperty("mail.rotocoltransport","smtp");
	props.setProperty("mail.smtp.host","smtp.163.com");
	
	Session session = Session.getInstance(props);
	session.setDebug(true);

	Message msg = getMimeMessage(session);
	
	transport.connect(senderAccount,senderPassword);
	transport.sendMessage(msg,msg.getAllRecipients());
	
	transport.close();
}

/**//获得创建带有图片和附件邮件实例
*@param session
*@return
*@throws MessagingException
*@throws AddressException
*/
public static MimeMessage getMineMessage(Session session) throws Exception{
	//创建一封邮件的实例对象
	MimeMessage msg =new MineMessage(session);
	//设置发件人地址
	msg.setFrom(new InternetAddress(senderAddress));
	//设置收件人地址(可以增加多个收件人,抄送,密送)
	/**
	这一行代码写多行
	MineMessage.RecipientType.TO:发送
	MimeMessage.RecipiientType.CC:抄送
	MimeMessage.RecipiientType.BCC:密送	
	*/
	msg.setRecipient(MimeMessage.RecipientType.TO,newInternetAddress(recipientAddress));
	//设置邮件主题
	msg.setSubject("邮件主题","UTF-8");

	//设置邮件正文,下面是邮件正文
	//msg.setContext("简单的纯"文本邮件","text/html;charset=UTF-8");
	//创建图片结点
	MimeBodyPart image = new MimeBodyPart();
	//读取本地文件
	DataHandler dh = new DataHandler(newFileDataSource("src\\mailtext.png"));
    	//将图片数据添加到结点
	image.setDataHandler(dh)
	//为节点设置一个唯一的编号(在文本节点将引用该ID)
	image.setContext(mailTestPic);

	//创建文本节节点
	MimeBodyPart text= new MimeBodyPart();
	//这里添加图片的方式,将整个图片包含到邮件之中内容中,实际上也可以以http连接的形式添加网络图片

	//设置邮件发送时间,默认立即发送。
	msg.setSendDate(new Date());
	text.setContent("这是一张图片<br/><img src='cid:mailTestPic'/","text/html;charset=UTF-8");

	//文本加图片,设置文本和图片"结点"的关系,既是将文本节点和图片节点合成一个混节 
	MimeMutliPart	textImage = new MimeMutliPart();
	textImage.addBodyPart(text);
	textImage.addBodyPart(image);
	//关联关系
	testImage.setSubType("related");

	//将文本图片的混合节点封装成一个普通的结点,最终添加到邮件的Content是由多个BodyPart组成的MutliPart,
	//所以我们需要的是BodyPart。
	MimeBodyPart textImage1 = new MimeBodyPart();
	textImage1.setContent(textImage);

	//创建附件节点
	MimeBodyPart attachment =new MimeBodyPart();
	//读取本地文件
	DataHandler dh1 = new DataHandler(newFileDataSource("src\\maildoc.docx"));
	//将附件添加到节点中
	attachment.setDataHandler(dh1);
	//设置附件的文件名(需要编码)
	attachment.setFileName(MimeUtility.encodeText(dh1,getName()));

	//设置(文本+图片)+附件的关系,既是合成一个更大的结点
	MimeMutlipart mm = new MineMutlipart();
	mm.addBodyPart(textImage1);
	mm.addBodyPart(attachment);//如果附件有多个,可以创建多个
	mm.setSubType("mixed");//混合关系

	//设置整个邮件的关系,将最终的混合结点作为邮件的内容添加到邮件对象中,
	msg.setContent(mm);

	msg.setSendDate(new Data());

	return msg;
	}
}

//接收邮件,store类javaMailSSLReceive

public class javaMailSSLReceive{
public static void main(String[] args){
	Properties props = new Properties();
	Session session =Session.getDefaultInstance(props);
	//第一个参数为接收协议,第二个参数为邮件接收服务器地址,第三个参数为pop3协议的端口,最后两个为用户名和密码
	URLName url = new URLName("pop3","pop.163.com",110,null,"xxx","xxxxx");
	//使用SSL加密传输协议,gmail可以使用SSL协议来保证邮件传输的安全,使用SSL的POP3S的默认端口为995
	Store store=null;
	Floder inbox=null;
	try{
		store =session.getStore(url);
		//使用URLName指定Session邮件所需要的环境
		store.connect();//连接邮件的服务器
		//从邮件服务器中返回邮箱内的信息
		inbox =store.getFolder("INBOX");
		inbox.open(Folder.READ_ONLY);//打开folder
		FetchProfile fp = new FethcProfile();
		fp.add(FetchProfile.item.ENVELOPE);
		Message[] msgs = ibox.getMessages();
		inbox.fetch(msgs,fp);
		//显示邮件信息
		for(int i=0;i<msgs.length;i++){
			String from =msgs[i].getFrom()[0].toString();
			InternetAddress id =new InternetAddress(from);
			System.out.println();
			System.out.println("标题"+msgs[i].getSubject());
			System.out.println("大小"+msgs[i].getSize());
			System.out.println("时间"+msgs[i].getDate());
			System.out.println("发送者"+msgs[i].getPersonal());
			
		}
	}catch(Excption e){}
	inbox.close(false);
	store.close();
	}	
}

猜你喜欢

转载自blog.csdn.net/weixin_42603009/article/details/86761130