JavaMail实现邮件发送功能

最近的项目要使用javamail进行邮件发送,写这篇博客总结下

发送简单的邮件

在进行邮件发送之前要引入javamail的Maven依赖

dependency>
			<groupId>javamail</groupId>
			<artifactId>mail</artifactId>
			<version>1.3.2</version>
		</dependency>

编写测试代码

//设置网易云邮箱账号
	public static String emailAccout = "发送方的邮箱账号@163.com";
	
	//设置网易云smtp授权码
	public static String emailPassword = "发送方的授权码";
	
	//设置163邮箱的smtp服务器地址
	//邮件协议有smtp pop3 imap4 一般的发送邮件使用smtp协议,要先等于网易邮箱打开smtp、pop3/imap4协议授权
	public static String emailSmptHost = "smtp.163.com";
	//发送简单的邮件 content为邮件内容 To接收方
	public static void setMail(String content,String To){
		//设置邮件属性
		Properties pro = new Properties();
		//配置邮件传输协议
		pro.setProperty("mail.transport.protocol", "smtp");
		//设置发件人的smtpd地址
		pro.setProperty("mail.smtp.host", emailSmptHost);
		//设置需要进行认证
		pro.setProperty("mail.smtp.auth", "true");
		//创建会话对象,用户和邮件服务器交互
		Session session = Session.getInstance(pro);
		//设置为Debug模式 可以看到执行情况
		sesssion.setDebug(true);
		Transport transport = null;
		try {
			//创建一封邮件
			MimeMessage message = new MimeMessage(session);
			//设置发件人
			message.setFrom(new InternetAddress(emailAccout));
			//设置收件人 可以通过addRecipient添加多个收件人
			message.setRecipient(RecipientType.TO, new InternetAddress(To));
			//设置内容
			message.setContent(content,"text/html;charset=utf-8");
			//设置主题
			message.setSubject("测试邮件");
			//获取邮件传输对象
			 transport = session.getTransport();
			//设置账号密码进行链接
			transport.connect(emailSmptHost,emailAccout,emailPassword);
			//发送邮件,发送到全部地址
			transport.sendMessage(message, message.getAllRecipients());
			
		} catch (Exception e) {
			
			 // TODO Auto-generated catch block
			 e.printStackTrace();
			 
		}
	}

测试发送

		setMail("测试","你要发送的邮箱@163.com");

结果
在这里插入图片描述

发送复杂的邮件 带图片与附件

public static void complexMail(String contend,String to) throws AddressException, MessagingException, UnsupportedEncodingException{
		Properties pro = new Properties();
		pro.setProperty("mail.transport.protocol", "smtp");
		pro.setProperty("mail.smtp.host",emailSmptHost);
		pro.setProperty("mail.smtp.auth", "true");
		Session session = Session.getInstance(pro);
/*		session.setDebug(true);
*/		MimeMessage message = new MimeMessage(session);
		message.setFrom(new InternetAddress(emailAccout));
		message.setRecipient(RecipientType.TO, new InternetAddress(to));
		message.setSubject("测试");
		//创建图片"节点"
		MimeBodyPart image = new MimeBodyPart();
		//读取本地文件 
		DataHandler dh = new DataHandler(new FileDataSource("D://44//1.jpg"));
		//将图片数据添加到节点
		image.setDataHandler(dh);
		//为图片节点设置唯一编号
		image.setContentID("image_tail");
		//创建文本"节点"
		MimeBodyPart text = new MimeBodyPart();
		//将整合图片包含到邮件内容中
		text.setContent("这是一张图片<br/><img src='cid:image_tail'/>", "text/html;charset=UTF-8");
		//设置文本和图片的节点关系,变成混合节点
		MimeMultipart text_image = new MimeMultipart();
		text_image.addBodyPart(text);
		text_image.addBodyPart(image);
		text_image.setSubType("related");
		//将文件+图片封装成普通的节点
		MimeBodyPart tIm = new MimeBodyPart();
		tIm.setContent(text_image);
		//创建附件
		MimeBodyPart attachment = new MimeBodyPart();
		//读取本地文件
		DataHandler dh2 = new DataHandler(new FileDataSource("D://44//shop.sql"));
		attachment.setDataHandler(dh2);
		//设置附件名字
		attachment.setFileName(MimeUtility.encodeText(dh2.getName()));
		//设置文本加图片加附件 最大的节点
		MimeMultipart mm = new MimeMultipart();
		mm.addBodyPart(tIm);
		mm.addBodyPart(attachment);
		mm.setSubType("mixed");
		//将节点添加到正文
		message.setContent(mm);

		Transport transport = session.getTransport();
		transport.connect(emailSmptHost, emailAccout, emailPassword);
		transport.sendMessage(message, message.getAllRecipients());
	}

结果
在这里插入图片描述

注意
图片大小可调,在img可以设置宽度与高度

总结

javamail发送邮件先创建properties对象设置邮件属性,通过session构建与邮件服务器进行交互,再创建一封邮件对象MineMail,设置邮件内容与发件人,通过session构建邮件传输对象transport 进行连接邮件服务器与发送邮件

猜你喜欢

转载自blog.csdn.net/weixin_42392859/article/details/85272934