使用JavaMail发送邮件

时间:2021-11-01 18:11:45

JavaMail是java提供的一组API,用来发送和接收邮件。

相关协议:

smtp(简单的邮件传输协议),服务器端口为25,用于发送邮件
pop3(邮局协议第3版),服务器端口为110,用于接收邮件

 

进行发邮件之前,首先需要导包:mail.jar和 activation.jar

使用JavaMail进行发送邮件,共分为三步:

1.获取Session

  获取Session对象后,意味着你与服务器已经建立了连接。

        /**
         * 1.得到session
         */
        Properties props = new Properties();
        props.setProperty("mail.host", "smtp.163.com");  //设置服务器
        props.setProperty("mail.smtp.auth", "true");  //设置需要验证
        
        Authenticator auth = new Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                  return new PasswordAuthentication("用户名", "密码");  //设置用户名和密码
                }
              };
        
        Session session = Session.getInstance(props, auth);

 

2. 创建MimeMessage对象

它表示一个邮件对象,你可以调用它的各种方法来设置发件人、设置收件人、设置主题以及正文。

        /**
         * 2.创建MimeMessage对象
         */
        MimeMessage mig = new MimeMessage(session);
        
        mig.setFrom(new InternetAddress("username@163.com")); //设置发信人
        mig.addRecipients(RecipientType.TO, "receive@163.com");//设置个收信人
        mig.setSubject("主题");  //设置主题
        mig.setContent("正文内容", "text/html;charset=utf-8");

 

3.发送邮件

  TransPort, 它只有一个功能,发邮件。

        /**
         * 3.发送邮件
         */
        Transport.send(mig);

 

上述三步可以发送普通邮件,对于带附件的邮件它就无能为力了。如果想发送带附件的邮件,需要引入MimeMultipart和MimeBodyPart。

MimeMultipart是一个集合,用来装载多个主体部件。MimeBodyPart是主体部件,我们需要创建两个主体部件,一个是文本内容的,另一个是附件的。

第一步和第三步不需要修改,仅需要修改第二步。

        //创建MimeMessage对象
        MimeMessage msg = new MimeMessage(session);
        
        msg.setFrom(new InternetAddress("username@163.com"));  //设置发件人
        msg.addRecipients(RecipientType.TO, "receive@163.com"); //设置收件人
        msg.setSubject("主题");
        // 设置附件
        MimeMultipart list = new MimeMultipart(); //创建多部件
        
        /**
         * 设置正文
         */
        MimeBodyPart part1 = new MimeBodyPart();
        part1.setContent("正文", "text/html;charset=utf-8");
        list.addBodyPart(part1);
        
        /**
         * 设置附件
         */
        MimeBodyPart part2 = new MimeBodyPart();
        part2.attachFile(new File("文件路径")); //添加附件
        part2.setFileName(MimeUtility.encodeText("附件名称") );  //设置附件名称
        list.addBodyPart(part2);
        
        //添加到邮件中
        msg.setContent(list);