JavaMail(三):发送邮件

本文介绍了一个使用Java发送带有多个附件及复杂内容邮件的示例。通过MIME协议构造包含文本、图片和附件的复合邮件,并展示了如何设置邮件服务器认证信息以成功发送邮件。

 

package com.levelcoder.demo;

import java.io.IOException;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
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 Demo3 {

	public static void main(String[] args) throws MessagingException, IOException {
		Properties props = new Properties();
		props.setProperty("mail.smtp.auth", "true");//发送邮件是否需要认证 true 需要认证 false 不需要认证
		props.setProperty("mail.transport.protocol", "smtp");//配置邮件协议
		props.setProperty("mail.host", "smtp.126.com");//指定smtp服务器
		props.setProperty("mail.port", "25");//指定服务器端口
		Session session = Session.getInstance(props,
			new Authenticator() {//创建一个Authenticator子类对象
			 //实现	Authenticator 子类
			 protected PasswordAuthentication getPasswordAuthentication(){
				 //	userName 用户名, password 密码 使用的是策略设计模式
				 return new PasswordAuthentication("邮箱地址", "密码");
			 	}
			}	 
		 );//验证信息返回
		 session.setDebug(true);
		
		MimeMessage message = new MimeMessage(session);
		message.setFrom(new InternetAddress("\""+MimeUtility.encodeText("想展示的名称")+"\"<对应发件人邮件地址>"));
		message.setSubject("测试附件邮件发送");//邮件主题
		
		//"\""+MimeUtility.encodeText("想展示的名称")+"\"<JavaZhangYong@126.com>") 在邮件发送人中 友好展示,展示出发件人信息,不展示邮件信息
		message.setReplyTo(new Address[]{new InternetAddress("\""+MimeUtility.encodeText("想展示的名称")+"\"<对应邮件回复邮件地址>")});//设置邮件回复人信息	
		
		
		MimeMultipart mimeMultipart = new MimeMultipart("mixed");//混合的
		message.setContent(mimeMultipart);
		MimeBodyPart content = new MimeBodyPart();//文本
		MimeBodyPart attch1 = new MimeBodyPart();//附件一
		MimeBodyPart attch2 = new MimeBodyPart();//附件二
		mimeMultipart.addBodyPart(attch1);
		mimeMultipart.addBodyPart(attch2);
		mimeMultipart.addBodyPart(content);
		
		//第一个附件
		DataSource ds = new FileDataSource("F:\\资源\\Spring REST.pdf");//传输文件名地址
		DataHandler dataHandler = new DataHandler(ds);
		attch1.setDataHandler(dataHandler);//把数据进行封装
		attch1.setFileName(MimeUtility.encodeText("中文附件测试"));//设置附件文件名,可提供下载;  MimeUtility.encodeText可提供在文件中的中文转换
		//第二个附件
		DataSource ds2 = new FileDataSource("F:\\资源\\phone\\PhoneNumberParser.java");//传输文件名地址
		DataHandler dataHandler2 = new DataHandler(ds2);
		attch2.setDataHandler(dataHandler2);//把数据进行封装
		attch2.setFileName("PhoneNumberParser.java");//设置附件文件名,可提供下载;
		
		//正文内容
		MimeMultipart bodyMultipart = new MimeMultipart("related");//related 依赖
		MimeBodyPart htmlBodyPart = new MimeBodyPart();//文本
		MimeBodyPart picBodyPart = new MimeBodyPart();//文本
		content.setContent(bodyMultipart);
		bodyMultipart.addBodyPart(htmlBodyPart);//对正文增加HTML文本信息
		bodyMultipart.addBodyPart(picBodyPart);//对正文增加图片信息
		
		//拼装图片信息
		DataSource picds = new FileDataSource("F:\\1496804644.png");//传输文件名地址
		DataHandler picdh = new DataHandler(picds);
		picBodyPart.setDataHandler(picdh);//把数据进行封装
		
		//拼装HTML文本信息
		htmlBodyPart.setContent("<span>你好测试复杂邮件</span>", "text/html;charset=utf-8");
		
		//生成复杂文本
		message.saveChanges();
//		//写入文件
//		OutputStream os = new FileOutputStream("");
//		message.writeTo(os);
//		os.close();
		//发送邮件 InternetAddress.parse("收件人地址").可以把 String类型地址转换为邮件发送时所需要的数组类型
		message.setRecipients(RecipientType.TO, InternetAddress.parse("收件人地址"));//收件人类型type, 收件人地址:address
		Transport.send(message);
	}
}

 

看看效果

112756_8mB1_2296021.png

112819_6c8c_2296021.png

转载于:https://my.oschina.net/LevelCoder/blog/917628

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值