使用javaMail发送邮件

一个电子邮件系统由三部分构成 用户代理(UA),邮件服务器,smtp和pop3协议。用户代理是用户和电子邮件系统的接口,往往是运行在PC中的一个程序。具有让用户撰写(编写邮件),显示(屏幕显示),处理(发送和接收邮件),通信的功能。现在我们使用javaMail.jar发送邮件。

电子邮件把邮件发送到收件人所使用的邮件服务器上,并放在收件人的信箱中,收件人方便时候通过邮件服务器对邮件读取。

SMTP:简单邮件传输协议,规定了两个相互通信的SMTP进程之间的应该如何交换信息,SMTP不使用中间的邮件服务器(不管发送方和接收方相距多远,也不管经过多少路由器,tcp连接都是建立在两个服务器之间的,如果其中的一个服务器出现故障,那么不能交给其他的邮件服务器,只能够等待一段时间是否能够建立tcp连接))

邮件读取协议:POP3和IMAP协议,这两个协议是用户代理从邮件服务器上读取邮件所使用的协议


import java.io.File;
import java.net.URL;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.activation.URLDataSource;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
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.MimeMultipart;

public class MyAuthenticator extends Authenticator{
	//用于验证邮箱的账号和密码
	private String username = "135xx@qq.com";
	private String password = "xxxx";

	public void getConn() throws Exception {
		try {
			Properties prop = new Properties();
			// 邮件服务器的地址
			prop.put("mail.smtp.host", "com.it.cn");
			// 邮件服务器的端口号
			prop.put("mail.smtp.port", "25");
			// 邮箱服务器所使用的协议
			prop.put("mail.smtp.protocol", "smtp");
			/*建立连接时候是否验证,進行验证的方式有两种
			 * 1、通过继承Authenticator类实现getPasswordAuthentication方法验证
			 * 2、也可以通过transport.connect("mail.smtp.host",username,password);
			 */
			prop.put("mail.smtp.auth", "true");
			// 与邮箱服务器建立会话的对象session
			//与邮箱建立连接的验证的方式之一
			Session session = Session.getDefaultInstance(prop,new MyAuthenticator());
			// Session session = Session.getInstance(prop,null);
			// 邮件传输对象
			Transport transport = session.getTransport();
			//与邮箱建立连接的验证的方式之二
			transport.connect("mail.smtp.host",username,password);
			/*
			 *  1、邮件对象,代表一封邮件实体,Message是接口,MimeMesage是其实现类, 
			 *  2、并将session对象作为参数传入
			 */
			Message msg = new MimeMessage(session);
			// 设置主题
			msg.setSubject("主题");
			/*
			 * 设置文本的四种方式
			 * 1、 msg.setText("设置文本方式1"); 
			 * 2、msg.setContent("设置文本方式2","text/html");
			 *  本文采用第三種文本 设置方式,另外两种方式见下文
			
			/*
			 * 每一个邮件又若干个部分构成,每一个部分称为邮件体部分----BodyPart
			 * 这些BodyPart被放在同一的容器中Multipart中,其中BodyPart
			 * 和Multipart都是接口,其实现类分别是MimeBodyPart、MimeMultipart
			 */
			Multipart multiPart = new MimeMultipart();
			MimeBodyPart bodypart = new MimeBodyPart();
			bodypart.setText("设置文本方式3");
			// bodypart.setContent("设置文本方式4", "text/html");
			multiPart.addBodyPart(bodypart);
			/*
			 * 发送邮件的时候添加附件,附件可以是文本,声音,表格,图片等
			 * 附件数据的来源有两种,附件本身数据来源,通过url作为数据来源
			 * 然后交个数据处理器处理。
			 */
			//将附件本身作为数据的来源
			BodyPart bodyPart1 = new MimeBodyPart();
			File file = new File("E:\\excel\\mgexcel\\test1.xlsx");
			DataSource source = new FileDataSource(file);
			bodyPart1.setDataHandler(new DataHandler(source));
			multiPart.addBodyPart(bodyPart1);
			//将url作为附件数据的来源
			URL url = new URL("");
			source = new URLDataSource(url);
			BodyPart bodyPart2 = new MimeBodyPart();
			multiPart.addBodyPart(bodyPart2);
			//将multipart容器,即邮件信息体放到邮件中
			bodyPart2.setContent(multiPart);
			/*添加发件人和多个收件人
			 * 邮箱账号由InternetAddress封装
			 * 多个账号使用InternetAddress.parse("aa@qq.com,bb@qq.com")
			 * 返回InternetAddress数组
			 */		
			msg.setFrom();//发件人
			/*
			 *收件人 类型有三种,RecipientType.TO,RecipientType.CC
			 *RecipientType.BCC
			 *分别对应收件人,抄送,密送
			 */
			msg.addRecipients(RecipientType.TO, InternetAddress.parse("aa@qq.com,bb@qq.com"));
			/*邮件发送三種方式,当使用下面两种发送方式,既可以使用transport.Connect("mail.smtp.host","username","password")
			 * 验证也可以使用通过继承Authenticator类来通过验证
			*1、transport.send(msg,msg.getAllRecipients());
			*2、transport.sendMessage(msg, msg.getAllRecipients());*/
			//当实现如下的发送方式,那么验证方式使用继承Authenticator类来通过验证
			Transport.send(msg);
		} catch (Exception e) {
			// transport.

		}
	}
	@Override
    public PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(username,password);
		}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值