JavaMail发送不同格式邮件相关案例

一、发送邮件

发送邮件分为三步骤:1,创建Session会话 2,创建邮件对象 3,发送

邮件发送首先需要准备好登录信息,SMTP服务器连接信息,并创建Session会话。为便于重复使用,将其封装成一个工具类。

将SMTP服务器连接信息封装成Properties对象,使用props.put()添加相关信息。

public final class JavaMailutils {
private  JavaMailutils() {//将构造方法设置为私有,意味着无法从除自身之外的任何类访问它
	
}
public static Session createSession() {
	    //邮箱账号信息
		String userName="aaa@163.com";//邮箱发送账号
		String password=" ";//账号授权密码
		//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加密
		
		//创建Sessio会话
		Session session=Session.getInstance(props,new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(userName,password);
				
			}
		});
		session.setDebug(true);//设置debug模式方便调试
		return session;
		
}
}

1.发送普通邮件

在创建好session对象后,创建一个邮件message对象,并设置邮件相关内容然后调用Transport.send(message)即可成功发送。

//测试正文内容邮件
public class Demo02 {
public static void main(String[] args) {
	
	try {
		//1.创建Session会话
		Session session=JavaMailutils.createSession();		
		//2.创建邮件对象
		MimeMessage message=new MimeMessage(session);
		message.setSubject("这是一封测试邮件");//设置邮件标题
		message.setText("邮件内容");//设置邮件内容
		message.setFrom(new InternetAddress("aaa@163.com"));//发件人
        //收件人
		message.setRecipient(RecipientType.TO, new InternetAddress("bbb@qq.com"));
		//3.发送
		Transport.send(message);
	} catch (MessagingException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}	
}
}

2、发送可抄送邮件

想要发送可抄送邮件,需要调用message.addRecipients()方法设置抄送人地址。抄送邮件可发送给多人,收件人地址以数组形式接收。

message.addRecipients(RecipientType.CC,
new InternetAddress[] {new InternetAddress("sss@qq.com")});//抄送

3、发送HTML标签邮件

部份邮件正文内容包含html标签,发送html标签邮件需要在设置正文内容时写入标签以及相关参数

message.setText("<b>太阳</b>当空照","utf-8","html");

二、发送附件邮件

发送附件邮件时不能再直接调用setText方法,而是通过调用setContent方法,将正文+附件组装成multipart对象进行发送。

//包含附件邮件
public class Demo04 {
public static void main(String[] args) {
	try {
		//创建session会话
		Session session=JavaMailutils.createSession();
		
		//创建邮件对象
		MimeMessage message=new MimeMessage(session);
		message.setFrom(new InternetAddress("aaa@163.com"));//发件人
		message.setRecipient(RecipientType.TO, new             
           InternetAddress("bbb@qq.com"));//收件人
		message.addRecipients(RecipientType.CC,new InternetAddress[] {new 
           InternetAddress("sss@qq.com")});//抄送
		message.setSubject("包含附件邮件");//邮件标题
		
		//邮件既包含正文又包括附件
		//正文
		BodyPart textPart=new MimeBodyPart();
		textPart.setContent("附件邮件","text/html;charset=utf-8");
		//附件
		BodyPart filePart=new MimeBodyPart();
		filePart.setFileName("叮当猫");//附件文件显示名称
		filePart.setDataHandler(new DataHandler(
				new ByteArrayDataSource(
						Files.readAllBytes(Paths.get("D:\\y\\test\\3.jpg"))
						,"application/octet-stream")));
		//将正文+附件组装成multipart对象
		Multipart multipart=new MimeMultipart();
		multipart.addBodyPart(textPart);
		multipart.addBodyPart(filePart);
		//将multipart对象放入邮件
		message.setContent(multipart);
		//3.发送邮件
		Transport.send(message);
	} catch (AddressException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (MessagingException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}	
}
}

附件邮件包含正文和附件两部分,可用BodyPart对象分别设置。setContent()决定添加的内容。

setFileName()方法可设置附件显示名称,setDataHandler()设置附件数据,参数一是文件输入流,参数二是附件类型。二进制文件使用application/octet-stream。然后将正文+附件组装成multipart对象,调用message.setContent(multipart)将multipart对象放入邮件,最后调用Transport.send(message)发送。

三、发送正文嵌套图片邮件

//正文嵌套图片
public class Demo05 {
public static void main(String[] args) {
	try {
		//创建session会话
		Session session=JavaMailutils.createSession();
		
		//创建邮件对象
		MimeMessage message=new MimeMessage(session);
		message.setFrom(new InternetAddress("aaa@163.com"));//发件人
		message.setRecipient(RecipientType.TO, new InternetAddress("bbb@qq.com"));//收件人
		message.addRecipients(RecipientType.CC,new InternetAddress[] {new InternetAddress("sss@qq.com")});//抄送
		message.setSubject("正文嵌套图片邮件");//邮件标题
		
		//邮件既包含正文又包括附件
		//正文
		BodyPart textPart=new MimeBodyPart();
		StringBuilder contentText=new StringBuilder();
		contentText.append("<h3>叮当猫</h3>");
		contentText.append("<p>小叮当的故事</p>");
		contentText.append("<img src=\"cid:xdd\"/>");
		textPart.setContent(contentText.toString(),"text/html;charset=utf-8");
		
		//附件
		BodyPart imagePart=new MimeBodyPart();
		imagePart.setDataHandler(new DataHandler(
				new ByteArrayDataSource(
						Files.readAllBytes(Paths.get("D:\\y\\test\\3.jpg"))
						,"application/octet-stream")));
		imagePart.setHeader("content-ID", "xdd");//图片的内容ID
				
		//将正文+附件组装成multipart对象
		Multipart multipart=new MimeMultipart();
		multipart.addBodyPart(textPart);
		multipart.addBodyPart(imagePart);
		//将multipart对象放入邮件
		message.setContent(multipart);
		//3.发送邮件
		Transport.send(message);
	} catch (AddressException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (MessagingException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}
}

发送正文嵌套图片的邮件与发送附件邮件不同的是,正文部分需要使用StringBuilder将正文文本和图片进行拼接,然后调用setContent()方法添加进正文。图片依然使用附件形式,但要调用 imagePart.setHeader("content-ID", "xdd")添加图片ID便于在正文中使用contentText.append("<img src=\"cid:xdd\"/>")将图片添加进正文。然后同样调用Transport.send(message)发送邮件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值