Mime协议发送邮件

在myeclipse中的java程序如果要想发送一个邮件的话就必须导入mail.jar与activation.jar。但是在javaee中的13中技术就集成了这两个jar包。所以不用导入。

public class JavaMailDemo1 {
	//使用 javamail  通过 mime 协议发送邮件
	public static void main(String[] args) throws Exception {
		// 编写配置
		Properties props = new Properties();
		//指定传输协议
		props.setProperty("mail.transport.protocol", "smtp");
		//指定主机名
		props.setProperty("mail.host", "localhost");
		// 创建与邮件服务器的对话
		Session session = Session.getInstance(props);
		// 创建  message 代表一封电子邮件  MimeMessage叫做mime消息
		MimeMessage message = new MimeMessage(session);
		// 设置邮件头
		message.setFrom(new InternetAddress("[email protected]"));
		//setRecipient为发送方法,类型一共有三种为枚举类型,有TO(直接发送)、CC(抄送)、BCC(密抄)
message.setRecipient(Message.RecipientType.TO,
 new InternetAddress("[email protected]"));
		//设置主题
		message.setSubject("这是一封电子邮件");
		// 封装邮件体,列举了四种形式
		纯文本的
		// MimeMultipart multipart = createTextMail();
		文本加图片的
		// MimeMultipart multipart = createTextImageMail();
		文本加附件的
		// MimeMultipart multipart = createTextAttachMail();
		文本加图片加附件的
		MimeMultipart multipart = createTextImageAttachMail();
		message.setContent(multipart);	
		// 发送邮件   通过session会话来获取Transport的对象
		Transport transport = session.getTransport();
		//输入用户名与密码
		transport.connect("zhangsan", "123456");
		transport.send(message);
		//关闭对象
		transport.close();
	}

	// 纯文本的邮件
	private static MimeMultipart createTextMail() throws MessagingException {
		// 创建BodyPart
		MimeBodyPart bodyPart = new MimeBodyPart();
		//发送内容,设置编码放乱码
		bodyPart.setContent("hello", "text/html;charset=utf-8");
		// 将 BodyPart 存入 Multipart,此处不用描述关系,默认就为正文跟文本的关系mixed
		MimeMultipart multipart = new MimeMultipart();
		multipart.addBodyPart(bodyPart);
		return multipart;
	}
	
	// 文本加图片的邮件
	private static MimeMultipart createTextImageMail() throws MessagingException {
		// 创建一个BodyPart封装文本信息
		MimeBodyPart text = new MimeBodyPart();
		//将图片直接写到内容中,记住要给图片添加一个ID,src中加入cid:指定是哪个图片
		text.setContent("aaaaaaaaaaaaaaaaaaa

bbbbbbbbbbbbbbbbbb", "text/html"); // 创建一个BodyPart封装图片信息 MimeBodyPart image = new MimeBodyPart(); // 类加载文件 获得url URL url = JavaMailDemo1.class.getClassLoader().getResource("a.jpg"); //javamail没法吧图片转成mime类型的 image/jpeg,对于图片要用到数据处理器,创建 DataHandler 对象数据处理器 DataHandler dh = new DataHandler(url); // 将 DataHandler 设置给 BodyPart image.setDataHandler(dh); // 为图片制定内容id image.setContentID("myimg"); // 将上面的两个BodyPart存入一个Multipart MimeMultipart multipart = new MimeMultipart(); multipart.addBodyPart(text); multipart.addBodyPart(image); // 描述关系为引用关系 multipart.setSubType("related"); // 返回 Multipart return multipart; } // 文本加附件 private static MimeMultipart createTextAttachMail() throws MessagingException { // 创建一个BodyPart封装文本信息 MimeBodyPart text = new MimeBodyPart(); text.setContent("aaaaaaaaaa", "text/html;charset=utf-8"); // 创建一个BodyPart封装附件信息 MimeBodyPart attach = new MimeBodyPart(); //获取到附件路径 String path = JavaMailDemo1.class.getClassLoader().getResource("a.mp3").getPath(); File file = new File(path); //这个是创建DataHandler的另一种方法,需要传入DataSource的接口实现类FileDataSource,需要一个文件对象 DataHandler dh = new DataHandler(new FileDataSource(file)); attach.setDataHandler(dh); // 作为附件的文件 最终会显示文件名 attach.setFileName(file.getName()); // 将上面的两个BodyPart存入一个Multipart MimeMultipart multipart = new MimeMultipart(); multipart.addBodyPart(text); multipart.addBodyPart(attach); // 描述关系 multipart.setSubType("mixed"); return multipart; } // 文本加图片加附件(最复杂的) private static MimeMultipart createTextImageAttachMail() throws Exception { // 创建一个BodyPart封装文本信息 MimeBodyPart text = new MimeBodyPart(); text.setContent("这是一封邮件,有个美女,还有附件哦

bbbbbbbbbbbbbbbbbb", "text/html;charset=utf-8"); // 创建一个BodyPart封装图片信息 MimeBodyPart image = new MimeBodyPart(); // 类加载文件 获得url URL url = JavaMailDemo1.class.getClassLoader().getResource("一个美女.jpg"); // 创建 DataHandler 对象 数据处理器 DataHandler dh = new DataHandler(url); // 将 DataHandler 设置给 BodyPart image.setDataHandler(dh); // 为图片制定内容id image.setContentID("myimg"); // 创建一个BodyPart封装附件信息 MimeBodyPart attach = new MimeBodyPart(); String path = JavaMailDemo1.class.getClassLoader().getResource("一首歌.mp3").getPath(); // 由于是url 中文会进行url编码 path中中文会出现 %... 的形式 path = URLDecoder.decode(path, "utf-8"); File file = new File(path); dh = new DataHandler(new FileDataSource(file)); attach.setDataHandler(dh); // 作为附件的文件 最终会显示文件名,文件名为中文的时候就要用到MimeUtility的encodeText方法,否则就乱码 了 String filename = MimeUtility.encodeText(file.getName()); attach.setFileName(filename); // 将上面的三个BodyPart存入一个Multipart // 先将前两个组合 描述关系 MimeMultipart multipart1 = new MimeMultipart(); multipart1.addBodyPart(text); multipart1.addBodyPart(image); multipart1.setSubType("related"); // 将 组合的 MimeMultipart1 封装为一个bodypart,再与另一个进行组合 MimeBodyPart textImage = new MimeBodyPart(); //设置图片和文本的内容 textImage.setContent(multipart1); // 将组合的 和 attach 加入一个 multipart MimeMultipart multipart2 = new MimeMultipart(); multipart2.addBodyPart(textImage); multipart2.addBodyPart(attach); return multipart2; } }


你可能感兴趣的:(个人javaweb学习笔记)