【七日打卡】JavaMail的使用-03初始化设置及基本邮件的发送

304 阅读3分钟

初始化设置

在发送邮件之前我们先要获取到自己将要使用的邮件服务器的相关信息,将其设置到配置文件当中去。 这里假设我们使用的163的邮箱服务器,登录邮箱点击设置会有一个POP3/SMTP/IMAP的选项 点开后将

IMAP/SMTP服务或者POP3/SMTP服务开启。

 	Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.163.com");
        props.put("mail.smtp.auth", "true");
        Session session = Session.getDefaultInstance(props);

这里的配置主要有两个 host 是代表邮件服务地址,按照上图给出的地址和你要进行的邮件服务进行选择,这里我们要发送邮件所以选择smtp的 auth 是代表开始发送服务器需要验证信息,否则互联网中会充斥着大量的垃圾邮件信息。 然后我们通过这些配置在程序中创建出一个session对象,我们与邮件服务器的通信就靠这个session对象来实现的。 当创建完对象我们就可以开始发送邮件了,一封简单的邮件包含的内容有5个部分

  1. 发件人
  2. 收件人/抄送人/密送人
  3. 邮件主题
  4. 邮件正文
  5. 发送时间

JavaMail提供了相应的API给我们设置,我们只需要调用即可。 回想昨天的内容,在发送邮件之前我们首先要创建出一个邮件正文容器,在JavaMail中它是MimeMessage,参数是我们刚才获得的session对象。然后就是向里面填充这几种内容,首先是发件人,MimeMessage对象中有setFrom()的方法,接收的参数是一个 InternetAddress()的对象,这个对象中的几个参数的意思分别是address:邮件地址,strict:是否开启RFC882的严格校验,这个默认是为true的,需要设置为false关闭,因为现在部分的邮件是不遵循RFC882的规范的,这样的邮箱会导致你的程序报错。person:代表名称,即你发送过去,收件人在你邮箱前看到的内容,charset:编码方式。 对于收件人,抄送人,密送人,均使用addRecipients()方法,通过传入其中的枚举类型来区分,是那种类型。 邮件主题是通过setSubject()来实现的 因为现在发送的是最普通的邮件类型,所以正文的只需要创建出一个Multipart对象setContent()然后将其添加到容器内就可以 至于时间同样使用setSendDate()就可以了。 将邮件内容封装完毕了,再通过Session对象获取传输对象transport,然后将自己的认证信息传入,即邮件服务器地址,邮箱,密码; 最后直接调用transport的sendMessage方法即可。代码如下:

            MimeMessage message = new MimeMessage(session);
            message.setFrom(from);//设置发件人
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));//设置收件人
            message.setSubject(title);//主题
            multipart = new MimeMultipart();//设置附件
            contentPart = new MimeBodyPart();
            contentPart.setContent(text, "text/html;charset=utf-8");
            multipart.addBodyPart(contentPart);
            message.setContent(multipart);//添加正文
            message.setSendDate(new Date());
            transport = session.getTransport("smtp");
            transport.connect("smtp.163.com", user, password);
            transport.sendMessage(message, message.getAllRecipients());