Java Mail发送邮件理解及相关案例

1.Java Mail发送邮件

        首先,将邮件统一发送给邮件的中转代理,然后由中转代理发送至邮件服务器,等待用户查阅。

        在由用户发送至邮件中转的代理的过程中使用到的是应用层的smtp协议。

在发送邮件前需要准备相关的邮箱和登录信息

QQ邮箱 SMTP服务器:smtp.qq.com  端口号:465、587

163邮箱 SMTP服务器:smtp.163.com 端口号:465

在准备好登录信息后需要导入相关jar包

设置邮件账号信息,登录名及密码(密码使用的是邮箱允许smtp和pop3协议开启时生成的密码)

在连接SMTP服务器时要准备Properties对象传入相关的信息

//邮箱账号信息
		String userName="18392746299@163.com";
		String password="PSLFGBHARLGZSRBT";
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加密

获取Session实例传入实例并传入相关信息及Authenticator对象,返回用户名和密码。

//参数1:smtp服务器连接参数
//参数2:账号和密码的授权认证对象
Session session=Session.getInstance(props,new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(userName, password);
			}

发送邮件:创建Session会话并创建邮件对象,向邮件对象中传入session对象,设置邮件的标题、正文、发件人和收件人,最后发送邮件。

Session session=JavaMailUtils.createSession();
MimeMessage message=new MimeMessage(session);
			message.setSubject("这是一个测试邮件");//设置邮件标题
			message.setText("啦啦啦啦啦!!!");//设置邮件正文
			message.setFrom(new InternetAddress("18392746299@163.com"));//发送人
			message.setRecipient(RecipientType.TO,new InternetAddress("3460888610@qq.com"));//接收人
Transport.send(message);

2. 发送只包含文本信息的邮件

        将发送邮件前的相关准备工作封装成一个JavaMailUtils类

public class JavaMailUtils {
		private JavaMailUtils() {
		}
		public static Session createSession() {
		//邮箱账号信息
		String userName="18392746299@163.com";
		String password="PSLFGBHARLGZSRBT";
		//SMTP服务器连接信息
		Properties props=new Properties();
		props.put("mail.smtp.host", "smtp.163.com");
		props.put("mail.smtp.port", "25");
		props.put("mail.smtp.auth", "true");
		props.put("mail.smtp.starttls.enable","true");
		//参数1:smtp服务器连接参数
		//参数2:账号和密码的授权认证对象
		Session session=Session.getInstance(props,new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(userName, password);
			}
		});
		return session;
		
		
		
		}

调用该类创建Session对象,并创建邮件对象,设置邮件的相关信息。

message.setRecipient();表示收件人

message.setRecipients();表示抄送人

try {
			Session session=JavaMailUtils.createSession();
			//创建邮件对象
			MimeMessage message=new MimeMessage(session);
			message.setSubject("这是一个测试邮件");//设置邮件标题
			message.setText("啦啦啦啦啦!!!");//设置邮件正文
			message.setFrom();//发送人
			message.setRecipient(RecipientType.TO,new InternetAddress("3460888610@qq.com"));//接收人
			//发送
			Transport.send(message);
		} catch (MessagingException e) {
			e.printStackTrace();
		}

3.发送包含附件的邮件

创建MimeBodyPart对象,并向该对象中写入正文的内容,创建另一个对象,向该对象中传入要上传的附件的内容(通过流的方式传入),设置附件的名称。创建MimeMultiPart对象,将正文和附件加入该对象,然后将该对象放入邮箱对象中,发送邮件。

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("F:\\猿究院学习资料\\test\\风景.jpg")),"application/octet-stream")
					));
			//将正文和附件放入Multipart对象
			Multipart multipart=new MimeMultipart();
			multipart.addBodyPart(textPart);
			multipart.addBodyPart(filePart);
			//将Multipart放入邮件
			message.setContent(multipart);
			Transport.send(message);

3.发送正文中包含图片的邮件

与发送包含附件的方式大致相同,不同点在于在正文内容中要田间图片的信息,在图片对象部分要设置Header以便于在正文内容部分加入。

BodyPart textPart=new MimeBodyPart();
			StringBuilder contentText=new StringBuilder();
			contentText.append("aaaaaaa");
			contentText.append("b");
			contentText.append("<img src=\"cid:abc\"/>");
			textPart.setContent(contentText.toString(),"text/html;charset=utf-8");
			//邮件附件
			BodyPart imagePart=new MimeBodyPart();
			imagePart.setDataHandler(
					new DataHandler(
							new ByteArrayDataSource(Files.readAllBytes(Paths.get("F:\\猿究院学习资料\\test\\风景.jpg")),
									"application/octet-stream")));
			imagePart.setHeader("Content-ID", "abc");//图片内容的ID
			//邮件正文+附件
			Multipart multipart=new MimeMultipart();
			multipart.addBodyPart(textPart);
			multipart.addBodyPart(imagePart);
			message.setContent(multipart);
			//发送邮件
			Transport.send(message);

在邮件的正文部分还可以使用html标签,但需要加上以下语句,否则将无法识别。

textPart.setContent(contentText.toString(),"text/html;charset=utf-8");

总结:发送的邮件若只包含正文文字则只需要Message对象,若还包含附件或图片就需要借助MimeBodyPart和MimeMultiPart对象。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值