• Java发送mail并更新日历信息及jar包冲突问题


    java.lang.NoSuchMethodError: com.sun.mail.util.TraceInputStream.<init>(Ljava/io/InputStream;Lcom/sun/mail/util/MailLogger;)V

    ---------------------------------------------更改上面出错---------------------------------------------------------------

    <dependency>
          <!--<groupId>javax.mail</groupId>-->
          <!--<artifactId>mailapi</artifactId>-->
          <!--<version>1.4.3</version>-->
          <groupId>javax.mail</groupId>
          <artifactId>javax.mail-api</artifactId>
          <version>1.6.2</version>
    </dependency>

    ---------------------------------------------------------------------------------------------------------------------------

    public class TTTT {
    
        public static void main(String[] args) {
            sendMeetingInvitationEmail();
        }
    
        private static Properties props;
        private static Session session;
    
        public static void sendMeetingInvitationEmail() {
            try {
                props = new Properties();
                //发件人
                String fromEmail = props.getProperty("fromEmail", "*********");
                //收件人(面试官)
                String toEmail = props.getProperty("toEmail", "*********");
                props.put("mail.smtp.port", "587");
                props.put("mail.smtp.host", "smtp.office365.com");
                //当前smtp host设为可信任 否则抛出javax.mail.MessagingException: Could not                   convert socket to TLS
                props.put("mail.smtp.ssl.trust", "smtp.office365.com");
                props.put("mail.transport.protocol", "smtp");
                props.put("mail.smtp.auth", "true");
                props.put("mail.smtp.starttls.enable", "true");
                props.put("mail.smtp.ssl", "true");
                //开启debug调试,控制台会打印相关信息
                props.put("mail.debug", "true");
                Authenticator authenticator = new Authenticator() {
                    @Override
                    protected PasswordAuthentication getPasswordAuthentication() {
                        //发件人邮箱账号
                        String userId = props.getProperty("userId", "*********");
                        //发件人邮箱密码(qq、163等邮箱用的是授权码,outlook是密码)
                        String password = props.getProperty("password", "*********");
                        return new PasswordAuthentication(userId, password);
                    }
                };
                session = Session.getInstance(props, authenticator);
                MimeMessage message = new MimeMessage(session);
                message.setFrom(new InternetAddress(fromEmail));
                message.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmail));
                //标题
                message.setSubject("LTC日历测试");
                //面试开始时间
                String startTime = getUtc("2022-07-06 14:00");
                //面试结束时间
                String endTime = getUtc("2022-07-06 15:00");
                StringBuffer buffer = new StringBuffer();
                buffer.append("BEGIN:VCALENDAR\n"
                        + "PRODID:-//Microsoft Corporation//Outlook 9.0 MIMEDIR//EN\n"
                        + "VERSION:2.0\n"
                        + "METHOD:REQUEST\n"
                        + "BEGIN:VEVENT\n"
                        //参会者
                        + "ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE:MAILTO:你和应聘者\n"
                        //组织者
                        //+ "ORGANIZER:MAILTO:张三\n"
                        + "DTSTART:" + startTime + "\n"
                        + "DTEND:" + endTime + "\n"
                        //面试地点
                        + "LOCATION:会议室01\n"
                        //如果id相同的话,outlook会认为是同一个会议请求,所以使用uuid。
                        + "UID:" + UUID.randomUUID().toString() + "\n"
                        + "CATEGORIES:\n"
                        //会议描述
                        //+ "DESCRIPTION:Stay Hungry.<br>Stay Foolish.\n\n"
                        + "SUMMARY:测试邀请\n" + "PRIORITY:5\n"
                        + "CLASS:PUBLIC\n" + "BEGIN:VALARM\n"
                        //提前10分钟提醒
                        + "TRIGGER:-PT10M\n" + "ACTION:DISPLAY\n"
                        + "DESCRIPTION:Reminder\n" + "END:VALARM\n"
                        + "END:VEVENT\n" + "END:VCALENDAR");
                BodyPart messageBodyPart = new MimeBodyPart();
                messageBodyPart.setDataHandler(new DataHandler(new ByteArrayDataSource(buffer.toString(),
                        "text/calendar;method=REQUEST;charset=\"UTF-8\"")));
                MimeMultipart multipart = new MimeMultipart();
                MimeBodyPart mimeBodyPart = new MimeBodyPart();
                //String emailText = getHtmlContent(sendEmailApi.getTemplateContent(tempValue),tempMap);
                //文本类型正文
                mimeBodyPart.setText("尊敬的张三:\r您好!\r特邀您...");
                //html类型正文
                //mimeBodyPart.setContent(emailText,"text/html;charset=UTF-8");
                //添加正文
                multipart.addBodyPart(mimeBodyPart);
                //添加日历
                multipart.addBodyPart(messageBodyPart);
                message.setContent(multipart);
                message.setSentDate(new Date());
                message.saveChanges();
                Transport.send(message);
            } catch (MessagingException me) {
                me.printStackTrace();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    
        /**
         * 转utc时间
         */
        private static String getUtc(String str) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            long millionSeconds = 0;
            try {
                millionSeconds = sdf.parse(str).getTime();
            } catch (Exception e1) {
                e1.printStackTrace();
            }
            //utc时间差8小时
            long currentTime = millionSeconds - 8 * 60 * 60 * 1000;
            Date date = new Date(currentTime);
            //格式化日期
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String nowTime = "";
            nowTime = df.format(date);
            //转换utc时间
            String utcTime = nowTime.replace("-", "").replace(" ", "T").replace(":", "");
            return utcTime;
        }
    
    }

  • 相关阅读:
    Flutter混合栈管理
    第四章:Python中的字典(下)
    15.编写自动化测试(下)
    【网络】HTTPS讲解(侧重于加密、秘钥、证书的讲解)
    数据仓库与数据库的区别
    2023CSP游寄
    C++模板与STL(三):容器与算法
    【知识地图】开发测试全栈 (未完待续)
    W5500+树莓派RP2040入门教程之MQTT篇(十二)
    Golang反射修改变量值
  • 原文地址:https://blog.csdn.net/qq_40390762/article/details/125613517