java邮件发送,带附件(javax.mail.jar)——解决部署到Linux服务器中端口问题及文件名过长(乱码)问题

配置文件:

mail.smtp.host=smtp.163.com   #发件箱的服务器
mail.smtp.auth=true
[email protected] #邮箱地址
mail.sender.password=xxxxxx #邮箱授权码(开启stmp和pop服务后获取授权码)
mail.smtp.port=465 #使用ssl加密端口(25端口不加密,可能服务器使用不了,一下为使用ssl加密的配置)
mail.smtp.socketFactory.port=465 
mail.smtp.socketFactory.fallback=false
mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

//读取配置文件
    Properties props = new Properties();
    InputStream in = this.getClass().getClassLoader().getResourceAsStream("sendEmail.properties");
    props.load(in);
    String mailHost = props.getProperty("mail.smtp.host");
    String sender_uname = props.getProperty("mail.sender.username");
    String sender_upwd = props.getProperty("mail.sender.password");

Transport transport;
    // 1.创建一个程序与邮件服务器会话对象 Session
    Session session = Session.getInstance(props);
    //解决文件名称过长出现乱码问题
    System.getProperties().setProperty("mail.mime.splitlongparameters", "false");
    // 2.创建一个Message,它相当于是邮件内容
    MimeMessage message = new MimeMessage(session);
    message.setFrom(new InternetAddress(sender_uname));// 设置发送者
    message.setSubject("今日入职新人名单");// 设置主题
    // 设置发送方式与接收者
    message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(entEmails.get(entName)));
    // 3.创建multipart对象,并添加邮件的各个部分内容,包括文本内容和附件
    Multipart multipart = new MimeMultipart();
    // 添加邮件正文
    BodyPart contentPart = new MimeBodyPart();
    contentPart.setContent("老师您好,现将我公司今日入职新人名单以附件形式发送给您,劳烦您对此部分人员进行信息维护,谢谢", "text/html;charset=UTF-8");
    multipart.addBodyPart(contentPart);
    // 添加附件
    BodyPart attachmentBodyPart = new MimeBodyPart();
    DataSource source = new FileDataSource(new File("D:\GitWorkSpace\file.text"));
    attachmentBodyPart.setDataHandler(new DataHandler(source));

   //  和System.getProperties().setProperty("mail.mime.splitlongparameters", "false")一起使用解决文件名过长造成的乱码问题
    attachmentBodyPart.setFileName(MimeUtility.encodeText(file.getName()));
    multipart.addBodyPart(attachmentBodyPart);
    message.setContent(multipart); // 将multipart对象放到message中
    message.saveChanges();// 保存邮件
    transport = session.getTransport("smtp");
    transport.connect(mailHost, sender_uname, sender_upwd);// smtp验证,就是你用来发邮件的邮箱用户名密码
    transport.sendMessage(message, message.getAllRecipients());// 发送
    logger.info(entName+"——邮件信息已发送完毕");
    file.delete();//文件发送后删除,如果不需要刻意去掉
    transport.close();
    in.close();

你可能感兴趣的:(学习碎片)