JavaMail相关使用攻略

JavaMail是Java官方提供给开发者用来处理邮件的API,该api中提供了POP3、SMTP、IMAP4的支持。

你可以通过官网获取该jar包JavaMail API (oracle.com)

在我们的项目中使用的话,首先我们需要创建Session,它类似于HTTP会话我们收发邮件都是基于这个会话。

Session session = JavaEmailUtils.createSeaaion();

其中JavaEmailUtils是自己封装的一个用来创建会话的类;

JavaEmailUtils代码如下:

package com.zjb.demo.email;

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;

public final class JavaEmailUtils {
	private JavaEmailUtils() {}
	
	public static Session createSeaaion() {
		//SRMP服务器连接信息
		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加密
		
		//使用getInstance()这个静态工厂方法获得自定义的Session
        //参数1 stmp服务器连接参数
        //参数2 授权账户密码对象
		Session session = Session.getInstance(props,new Authenticator() {

			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				String userName = "13093939936@163.com";//邮件发送方的账户
				String passWord = "QMYUOQNOWYIJGUOQ";//账号授权密码
				
				return new PasswordAuthentication(userName, passWord);
			}
			
		});
		return session;
	}
}

 其中在创建Session的时候我们需要使用Pprperties对象添加我们需要的使用邮箱的服务器主机名、服务器的端口号、是否需要用户认证、TLS加密等需使用的共享信息。

			Session session = JavaEmailUtils.createSeaaion();
			
			MimeMessage msg = new MimeMessage(session);
			msg.setSubject("触不可及");
			msg.setFrom(new InternetAddress("13093939936@163.com"));
			msg.setRecipient(RecipientType.TO, new InternetAddress("17789102307@163.com"));
			msg.setRecipients(RecipientType.CC, new InternetAddress[] {new InternetAddress("1423161910@qq.com")});

创建完Session对象之后,就可以构造发送信息体了,在这里官方为开发者提供了Message类型来帮助开发者完成这项工作。由于Message是一个抽象类,大多数情况下,我们使用javax.mail.internet.MimeMessage这个子类,该类是使用MIME类型、MIME信息头的邮箱信息。信息头只能使用US-ASCII字符,而非ASCII字符将通过编码转换为ASCII的方式使用。
为了建立一个MimeMessage对象,我们必须将Session对象作为MimeMessage构造方法的参数传入。

在建立了MimeMessage对象后,我们需要设置它的各个part,对于MimeMessage类来说,这些part就是MimePart接口。

如果我们所使用的MimeMessage中信息内容是文本的话,我们便可以直接使用setText()方法来方便的设置文本内容:

msg.Text("hello");

使用setSubject()方法对邮件设置邮件主题:

msg.setSubject("title");

我们通过msg的setFrom()和setReplyTo()两种方法设置邮件的发信人:
msg.setFrom(address);

msg.setReplyTo(address);

通过setRecipient方法可以设置收件方(第一个参数为收件人类型,第二个参数是收件人对象)

使用附件
附件作为与邮件相关的资源经常以文本、表格、图片等格式出现,如流行的邮件客户端一样,我们可以用JavaMail API从邮件中获取附件或是发送带有附件的邮件。

发送带有附件的邮件
发送带有附件的邮件的过程有些类似转发邮件,我们需要建立一个完整邮件的各个邮件体部分,在第一个部分(即我们的邮件内容文字)后,增加一个具有DataHandler的附件而不是在转发邮件时那样复制第一个部分的DataHandler。

发送HTML邮件
假如我们需要发送一个HTML文件作为邮件内容,并使邮件客户端在读取邮件时获取相关的图片或者文字的话,只要设置邮件内容为html代码,并设置内容类型为text/html即可:

在邮件中包含图片
如果我们在邮件中使用HTML作为内容,那么最好将HTML中使用的图片作为邮件的一部分,这样无论是否在线都会正确的显示HTML中的图片。处理方法就是将HTML中用到的图片作为邮件附件并使用特殊的cid URL作为图片的引用,这个cid就是对图片附件的Content-ID头的引用。
处理内嵌图片就像向邮件中添加附件一样,不同之处在于我们必须通过设置图片附件所在的邮件体部分的header中Content-ID为一个随机字符串,并在HTML中img的src标记中设置为该字符串。这样就完成了图片附件与HTML的关联。

			BodyPart textPart = new MimeBodyPart();
			StringBuilder text = new StringBuilder();
			text.append("<h3>云深不知处</h3>");
			text.append("<p>你好帅啊</p>");
			text.append("<img src=\"cid:ysbzc\"/>");
			textPart.setContent(text.toString(),"text/html;charset=utf-8");

最后将两个邮件体放入到Multipart中,设置邮件内容为这个容器Multipart,发送邮件。

			Multipart multipart = new MimeMultipart();
			multipart.addBodyPart(textPart);
			multipart.addBodyPart(FilePart);
			msg.setContent(multipart);

Transport
在发送信息时,Transport类将被用到。这个类实现了发送信息的协议(通称为SMTP),此类是一个抽象类,我们可以使用这个类的静态方法send()来发送消息:
Transport.send(message);

注意:如果需要在发送邮件过程中监控mail命令的话,可以在发送前设置debug标志:
session.setDebug(true)。

            Transport.send(msg);
            session.setDebug(true);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿究院张天师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值