首页 > 解决方案 > 如何在邮件中附加邀请?

问题描述

我已经在 Microsoft 授权服务器上注册了我的应用程序并完成了该过程,直到我获得文档中给出的访问令牌。我真正期待的只是创建事件并将其发送到用户邮件的步骤。

我有我的应用程序的访问令牌。我知道但不知道它们是否正确的步骤: 创建日历 创建事件 将事件插入日历并将该日历添加到邮件。

在获取访问令牌之前,代码与文档中给出的代码相同。

我希望收到邀请,以便用户可以对其执行操作。

我需要在java(Spring boot)中发送带有邀请的邮件。 在此处输入图像描述

  public class Graph 
{
     private static IGraphServiceClient graphClient = null;
        private static SimpleAuthProvoider authProvider = null;

        private static void ensureGraphClient(String accessToken) {
            if (graphClient == null) {
                // Create the auth provider
                authProvider = new SimpleAuthProvoider(accessToken);

                // Create default logger to only log errors
                DefaultLogger logger = new DefaultLogger();
                logger.setLoggingLevel(LoggerLevel.ERROR);

                // Build a Graph client
                graphClient = GraphServiceClient.builder()
                    .authenticationProvider(authProvider)
                    .logger(logger)
                    .buildClient();
            }
        }
       // @GetMapping(value="/getUserDetails")
        public static String getUser(String accessToken) {
            ensureGraphClient(accessToken);

            // GET /me to get authenticated user
            User me = graphClient
                .me()
                .buildRequest()
                .get();
            System.out.println("This is an user "+me.userPrincipalName);
            return "here we are getting user information";
        }
}

以同样的方式,我也可以获取用户的日历并创建一个事件,但我想通过邮件发送带有该事件的日历,以便用户可以添加自己。

标签: springspring-bootmicrosoft-graph-apioffice365apioutlook-restapi

解决方案


还查看了iCalendar 规范。了解各种属性。

public static String getCalendarInvite(MailDTO mailDTO) {
    // DTSTART,DTEND field needs a format yyyyMMddT000000 for a full day event,
    // where 000000 defines full day event

    //here DateFormatter of JodaTime Lib is used for date formatting.
    String DTSTART = DateUtils.formatDatesForICSCalendar(mailDTO.getEventStartDate());
    String DTEND = DateUtils.formatDatesForICSCalendar(mailDTO.getEventEndDate());

    // generating random number,so that UID of calendar object will always be
    // different.
    UUID uuid = UUID.randomUUID();
    String randomUUIDString = uuid.toString();

    StringBuffer sb = new StringBuffer();
    StringBuffer buffer = sb.append("BEGIN:VCALENDAR\n"
            + "PRODID:-//Microsoft Corporation//Outlook 15.0 MIMEDIR//EN\\n" + "VERSION:2.0\n" + "METHOD:REQUEST\n"
            + "BEGIN:VEVENT\n" + "ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE:MAILTO:"
            + mailDTO.getAttendeeMail() + "\n" + "ORGANIZER:MAILTO:" + mail.getOrganizerMail()
            + "\n" + "DTSTART;TZID=Asia/Calcutta:" + DTSTART + "\n" + "DTEND;TZID=Asia/Calcutta:" + DTEND + "\n"
            + "LOCATION:" + mairDTO.getLocation() + "\n" + "TRANSP:OPAQUE\n" + "SEQUENCE:0\n" + "UID:"
            + randomUUIDString + "\n" + "DTSTAMP:20180922T120102Z\n" + "CATEGORIES:Interview\n" + "DESCRIPTION:"
            + mailDTO.getDescription() + "\n\n" + "SUMMARY:" + mailDTO.getSummary() + "\n"
            + "PRIORITY:5\n" + "CLASS:PUBLIC\n" + "BEGIN:VALARM\n" + "TRIGGER:PT1440M\n" + "ACTION:DISPLAY\n"
            + "DESCRIPTION:Reminder\n" + "END:VALARM\n" + "END:VEVENT\n" + "END:VCALENDAR");

    String calendarInvite = buffer.toString();
    return calendarInvite;
}

推荐阅读