Java常见应用(四):发送带附件的邮件

在这里插入图片描述

package Samples;

import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
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;
import javax.mail.internet.MimeUtility;

public class Demo2WithAttachement {


	public static void sendEmail() throws Exception {
		
		//1、 Properties对象封装会话所需的信息
		Properties props = new Properties();
		props.setProperty("mail.transport.protocol", "smtp");//使用协议 smtp
		props.setProperty("mail.smtp.host", "smtp.qq.com");// qq的smtp服务器地址
		props.setProperty("mail.smtp.port", "465");	//协议端口号
		props.setProperty("mail.smtp.auth", "true");// 需要授权
		
		//是否需要SSL安全认证 qq是要求需要的
		props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
		props.setProperty("mail.smtp.socketFactory.fallback", "false");	//	没有经过SSL认证的邮件不接收
		props.setProperty("mail.smtp.socketFactory.port", "465");
		
		//2、根据Properties对象封装的信息创建Session对象
		Session  session = Session.getInstance(props);
		session.setDebug(true);	//是否开启调试模式
		
		//3、 根据session创建邮件MimeMessage
		MimeMessage message = creatMimeMessage(session,"发件人邮箱","收件人邮箱","UTF-8");
		
		//4、通过session建立与stmp服务器的连接
		Transport transport = session.getTransport();
		//connect(String host,String user,String password) host:发件人邮箱地址; user:用户名;  password:邮箱授权码
		transport.connect("发件人邮箱","发件人邮箱授权码");
		
		//5、发送邮件
		transport.sendMessage(message, message.getAllRecipients());
		//6、关闭连接
		transport.close();
	}
	public static MimeMessage creatMimeMessage(Session session,String send, String recipient, String charset) throws Exception {
		//简单邮件:{发件人(from)、收件人(to)、标题(subject)、正文(content)、日期()date}   {图片、附件}
	
		MimeMessage message = new MimeMessage(session);
		//InternetAddress(String address,String personal, String charset)  其中address:邮件地址  ;personal:标识 ; charset:编码
		Address from = new InternetAddress(send,"我是发件人",charset);
		Address to = new InternetAddress(recipient,"我是收件人",charset);
		message.setFrom(from);
		
		//创建图片节点
		MimeBodyPart imagePart = new MimeBodyPart();
		DataHandler imageHandler = new DataHandler(new FileDataSource("src/study.jpg")); 
		imagePart.setDataHandler(imageHandler);
		//通过ID唯一标识一张图片
		imagePart.setContentID("mystudyImage");
		
		//创建文本节点:目的是为了加载图片节点
		MimeBodyPart textPart =  new MimeBodyPart();
		//正文部分显示文本和图片
		//setContent(Object o, String type) Object可为html类型;其中type 为网页编码类型
		textPart.setContent("这是正文……;image: <img src='cid:mystudyImage'></img>","text/html;charset=utf-8");
		
		//将文本节点和图片节点组装为复合节点mm_text_image
		MimeMultipart mm_text_image = new MimeMultipart();
		mm_text_image.addBodyPart(textPart);
		mm_text_image.addBodyPart(imagePart);
		//单节点的联系类型 文本节点和图片节点同在正文为related联系
		mm_text_image.setSubType("related");//关联关系
		
		//Mime协议规定:正文中只能出现MimeBodyPart普通节点,不能是复合节点MimeMutilpart
		// MimeMutilpart-- >MimeBodyPart
		MimeBodyPart text_image_bodyPart = new MimeBodyPart();
		text_image_bodyPart.setContent(mm_text_image);
		
		
		//添加附件节点
		MimeBodyPart attachmentPart = new MimeBodyPart();
		DataHandler fileHandler = new DataHandler(new FileDataSource("src/mulan.jpg"));
		attachmentPart.setDataHandler(fileHandler);
		//给附件设置名字 	fileHandler.getName()返回文件名字
		attachmentPart.setFileName(MimeUtility.encodeText(fileHandler.getName()));
		
		//将“正文+图片”节点与“附件”节点组装成复合节点
		MimeMultipart mm = new MimeMultipart();
		mm.addBodyPart(attachmentPart);	
		mm.addBodyPart(text_image_bodyPart);
		//设置二者的关系 混合关系
		mm.setSubType("mixed");
		
		
		
		//收件人类型:普通收件人(TO)、抄送(CC)、密送(BCC) 
		message.setRecipient(MimeMessage.RecipientType.TO,to);
		
		message.setSubject("这是主题",charset);		//	邮件主题
		message.setContent(mm);	//正文内容
		message.setSentDate(new Date());		//发件日期
		message.saveChanges();
		
		return message;
		
		
	}


	
	public static void main(String[] args) throws Exception {
		sendEmail();
		
	}
}

可参考:
JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值