Java Email——java人的第一封邮件


什么是JavaEail?

JavaEmail是一个用于发送和接收电子邮件的Java API。它可以帮助我们方便地在Java应用程序中实现电子邮件功能,例如发送包含文本或附件的电子邮件、接收电子邮件等,那么它是如何实现的呢?


一、使用JavaEmail的准备工作

  1. 由于JDK核心类库里没有给我们提供相应的类,所有我们需要去官网下载一个JavaMail相关的依赖包(javax.mail-1.6.2.jar);
  2. 准备SMTP登录信息:
    在JavaEmail发送邮件的过程中,必须要遵守的一个协议就是SMTP协议,SMTP协议是一个建立在TCP之上的协议,任何程序发送邮件都必须遵守SMTP协议。
    以网易邮箱举例,打开POP3/SMTP服务,Java Email——java人的第一封邮件_第1张图片
    获取授权密码:
    Java Email——java人的第一封邮件_第2张图片
  3. 创建Seesion会话对象:
    Seesion会话对象提供了与邮件服务器进行通信所需的配置信息,例如SMTP服务器地址、端口号、用户名和密码等。由于每次发送JavaEmail都会用到Session会话对象,所以我们可以将Session对象的创建封装成一个静态方法,从而方便代码的使用以及代码的整洁。
public class JavaMailUtils {
	private JavaMailUtils() {}
	public static Session creatSession() {
		// 设置账号信息
		String userName = "[email protected]";// 邮箱发送账号
		String passWord = "MCJQLIBOEMXSQKCK";// 账号授权密码
		// SMTP服务器链接信息
		Properties props = new Properties();
		props.put("mail.smtp.host", "smtp.163.com");// SMTP主机名
		props.put("mail.smtp.port", "25");// 主机端口号
		props.put("mail.smtp.auth", "true");// 是否需要用户认证
		props.put("mail.smtp.starttls.enable", "true");// 启用TLS加密
		// 创建session会话对象
		// 参数1:smtp服务器链接对象
		// 参数2:账号和密码的授权认证对象
		Session session = Session.getInstance(props, new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(userName, passWord);
			}
		});
		session.setDebug(true);//debug调试模式
		return session;
	}
}

常用邮件服务商的SMTP信息:
1.qq邮箱:SMTP服务器是 smtp.qq.com,端口是465 / 857
2.163邮箱:SMTP服务器是smtp.163.com,端口465
3.Gmail邮箱:SMTP服务器是smtp.gmil.com,端口是465 / 587

二、案例实现

1.发送文本邮件

public static void main(String[] args) {			
		try {
			//1.创建会话对象
			Session session = JavaMailUtils.creatSession();
			//2.创建邮件对象
			MimeMessage message = new MimeMessage(session);
			message.setSubject("晴天");//设置邮件标题
			message.setText("但偏偏,雨渐渐,等不到你的一眼");//设置邮件正文
			message.setFrom(new InternetAddress("[email protected]"));//发件人信息			
			message.setRecipient(RecipientType.TO, new InternetAddress("[email protected]"));//收件人信息			
			//3.发送
			for(int i =0;i<20;i++) {
				Transport.send(message);
				System.out.println("发送成功!");
			}			
		} catch (AddressException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}

2.发送含有附件的邮件(附加抄送)

要在电子邮件中携带附件,我们就不能直接调用message.setText()方法,而是要构造一个Multipart对象:

public static void main(String[] args) throws IOException {
		try {
			Session session = JavaMailUtils.creatSession();//创建会话对象
			MimeMessage message = new MimeMessage(session);创建邮件对象
			message.setFrom(new InternetAddress("[email protected]"));//发件人
			//	RecipientType.CC是抄送发送,即一次可以将邮件发送给多人
			message.setRecipients(RecipientType.CC, new InternetAddress[] {
					new InternetAddress("[email protected]"),
					new InternetAddress("[email protected]"),			
					new InternetAddress("[email protected]")
			});//收件人
			message.setSubject("GGBONDE!");	//邮件标题	
			//正文+附件组装成附件对象
			Multipart  multipart = new MimeMultipart();
			//正文
			BodyPart textPart = new MimeBodyPart();
			textPart.setContent("他不是死猪,他是GGBOND!","text/html;charset=utf-8");
			//将设置好的正文加入邮件对象中
			multipart.addBodyPart(textPart);
			//附件
			BodyPart filePart = new MimeBodyPart();
			filePart.setFileName("GGBody.jpg");//设置发送的文件名
			filePart.setDataHandler(new DataHandler( 
					new ByteArrayDataSource(
							Files.readAllBytes(Paths.get("d:\\test\\bbb\\GG-Bond.jpg")),
							"application/octet-stream")));
			multipart.addBodyPart(filePart);			
			//将附件对象放入邮件中
			message.setContent(multipart);		
			//发送	
			Transport.send(message);		
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
	}

3.发送内嵌图片的HTML邮件

将内嵌图片作为一个附件嵌入邮件,即邮件本身也是Multipart,但需要做一点额外的处理:

public static void main(String[] args) {
		try {
			Session session = JavaMailUtils.creatSession();			
			MimeMessage message =  new MimeMessage(session);
			message.setFrom(new InternetAddress("[email protected]"));	
			message.setRecipients(RecipientType.CC, new InternetAddress[] {
					new InternetAddress("[email protected]"),
					new InternetAddress("[email protected]"),			
					new InternetAddress("[email protected]")
			});
			message.setSubject("GGBONDE!");			
			//正文
			BodyPart textPart = new MimeBodyPart();
			StringBuilder contentText = new StringBuilder();
			contentText.append("

GGBond

"
); contentText.append("

他不是死猪,他是GGBOND!

"
); contentText.append(""); textPart.setContent(contentText.toString(),"text/html;charset=utf-8"); //附件 BodyPart imagePart = new MimeBodyPart(); imagePart.setDataHandler(new DataHandler( new ByteArrayDataSource( Files.readAllBytes(Paths.get("d:\\test\\bbb\\GG-Bond.jpg")), "application/octet-stream"))); //设置当前image为内嵌图片 imagePart.addHeader("Content-ID","ggb"); //正文+附件组装成附件对象 Multipart multipart = new MimeMultipart(); //将设置好的团片加入邮件对象中 multipart.addBodyPart(imagePart); //将设置好的正文加入邮件对象中 multipart.addBodyPart(textPart); //将附件对象放入邮件中 message.setContent(multipart); //发送 Transport.send(message); } ... }

你可能感兴趣的:(java)