2009-07-13 6 views
8

प्राप्त करें, मैं जावा मेल लाइब्रेरी का उपयोग करके एक दृष्टिकोण में iCal भेजने की कोशिश कर रहा हूं, मैंने पहले से ही Question पढ़ा है, और मेरे पास पहले से ही कुछ नमूना कोड हैजावा मेल का उपयोग करके iCal मीटिंग अनुरोध कैसे भेजें, और प्रतिक्रिया

public class SendMeetingRequest { 

String host = "" ; 
String port = "" ; 
String sender = "" ; 

public static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd'T'HHmm'00'") ; 
public static SimpleDateFormat dateParser = new SimpleDateFormat("dd-MM-yyyy HH:mm") ; 

public static void main(String[] args) throws Exception { 
    SendMeetingRequest sender = new SendMeetingRequest() ; 

    sender.sendInvitation(“LogicaCMG Inschrijf Site” 
         , new String[] { “robert<dot>willems<dot>of<dot>brilman<at>logicacmg<dot>com” 
             } 
         , “Outlook Meeting Request Using JavaMail” 
         , dateParser.parse(“28-08-2006 18:00″) 
         , dateParser.parse(“28-08-2006 21:00″) 
         , “LIS-42″ 
         , “Bar op scheveningen” 
         , “<font color=\”Red\”>Aanwezigheid verplicht!</font><br>We gaan lekker een biertje drinken met z’n allen.” 
         ) ; 
} 


void sendInvitation(String organizer 
        , String[] to 
        , String subject 
        , Date start 
        , Date end 
        , String invitationId 
        , String location 
        , String description 
        ) throws Exception { 

    try { 
     Properties prop = new Properties(); 
     prop.put(”mail.smtp.port”, port); 
     prop.put(”mail.smtp.host”, host); 

     Session session = Session.getDefaultInstance(prop); 
     session.setDebug(true); 

     // Define message 
     MimeMessage message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(sender)); 

     // Set TO 
     if(to != null && (to.length > 0)) { 
      InternetAddress[] address = new InternetAddress[ to.length ] ; 

      for(int i = 0; i < to.length; i++) { 
       address[ i ] = new InternetAddress(to[ i ]) ; 
      } 

      message.setRecipients(Message.RecipientType.TO, address) ; 
     } 

     // Set subject 
     message.setSubject(subject); 

     // Create iCalendar message 
     StringBuffer messageText = new StringBuffer(); 
     messageText.append("BEGIN:VCALENDAR\n" + 
          "PRODID:-//Microsoft Corporation//Outlook 9.0 MIMEDIR//EN\n" + 
          "VERSION:2.0\n" + 
          "METHOD:REQUEST\n" + 
           "BEGIN:VEVENT\n" + 
           "ORGANIZER:MAILTO:") ; 
     messageText.append(organizer) ; 
     messageText.append("\n" + 
          "DTSTART:"); 
     messageText.append(dateFormat.format(start)) ; 
     messageText.append("\n" + 
          "DTEND:") ; 
     messageText.append(dateFormat.format(end)) ; 
     messageText.append("\n" + 
          "LOCATION:") ; 
     messageText.append(location) ; 
     messageText.append("\n" + 
          "UID:") ; 
     messageText.append(invitationId) ; 
     messageText.append("\n" + 
          "DTSTAMP:") ; 
     messageText.append(dateFormat.format(new java.util.Date())) ; 
     messageText.append("\n" + 
          "DESCRIPTION;ALTREP=\"CID:<eventDescriptionHTML>\”") ; 
     messageText.append(“\n” + 
            ”BEGIN:VALARM\n” + 
            ”TRIGGER:-PT15M\n” + 
            ”ACTION:DISPLAY\n” + 
            ”DESCRIPTION:Reminder\n” + 
            ”END:VALARM\n” + 
           ”END:VEVENT\n” + 
          ”END:VCALENDAR” 
          ) ; 

     Multipart mp = new MimeMultipart(); 

     MimeBodyPart meetingPart = new MimeBodyPart() ; 
     meetingPart.setDataHandler(new DataHandler(new StringDataSource(messageText.toString(), “text/calendar”, “meetingRequest”))) ; 
     mp.addBodyPart(meetingPart) ; 

     MimeBodyPart descriptionPart = new MimeBodyPart() ; 
     descriptionPart.setDataHandler(new DataHandler(new StringDataSource(description, “text/html”, “eventDescription”))) ; 
     descriptionPart.setContentID(“<eventDescriptionHTML>”) ; 
     mp.addBodyPart(descriptionPart) ; 

     message.setContent(mp) ; 

     // send message 
     Transport.send(message); 

    } catch (MessagingException me) { 
     me.printStackTrace(); 

    } catch (Exception ex) { 
     ex.printStackTrace(); 

    } 
} 

private static class StringDataSource implements DataSource { 
    private String contents ; 
    private String mimetype ; 
    private String name ; 


    public StringDataSource(String contents 
          , String mimetype 
          , String name 
          ) { 
     this.contents = contents ; 
     this.mimetype = mimetype ; 
     this.name = name ; 
    } 

    public String getContentType() { 
     return(mimetype) ; 
    } 

    public String getName() { 
     return(name) ; 
    } 

    public InputStream getInputStream() { 
     return(new StringBufferInputStream(contents)) ; 
    } 

    public OutputStream getOutputStream() { 
     throw new IllegalAccessError(“This datasource cannot be written to”) ; 
    } 
} } 

लेकिन अपने दृष्टिकोण 2007 और Outlook 2003 के अनुलग्नक के रूप भेजा जा रहा है, और यहां तक ​​कि अगर मैं देख सकते हैं और स्वीकार करने के लिए लगाव क्लिक करें, मैं जवाब है, जो करने के लिए आवेदन का उद्देश्य है प्राप्त नहीं होता है दृष्टिकोण की तरह एक समान कार्यक्षमता है।

क्या कोई ऐसी प्रक्रिया है जिसके बारे में मुझे पता होना चाहिए, या यह आमंत्रण आईडी है जो चीज़ को किसी न किसी तरह बनाती है?

उत्तर

18

तो मैं समस्या यहाँ हल है, और मैं क्या मिला है:

1 - आप जावा मेल एपीआई 1.4.2 को अद्यतन करने के लिए सब कुछ ठीक काम करता है बनाने के लिए है

2 - पाठ/कैलेंडर निम्नलिखित की तरह अपने संदेश का हिस्सा लिखें:

package com.xx.xx; 

import java.util.Properties; 

import javax.mail.*; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeBodyPart; 
import javax.mail.internet.MimeMessage; 
import javax.mail.internet.MimeMultipart; 
import javax.mail.util.ByteArrayDataSource; 

public class Email { 

    public Email() { 
    } 

    /* 
    * @param args 
    */ 
    public static void main(String[] args) { 
     try { 
      Email email = new Email(); 
      email.send(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public void send() throws Exception { 

     try { 
      String from = "[email protected]"; 
      String to = "[email protected]"; 
      Properties prop = new Properties(); 
      prop.put("mail.smtp.host", "mailhost"); 

      Session session = Session.getDefaultInstance(prop, null); 
      // Define message 
      MimeMessage message = new MimeMessage(session); 
      message.addHeaderLine("method=REQUEST"); 
      message.addHeaderLine("charset=UTF-8"); 
      message.addHeaderLine("component=VEVENT"); 

      message.setFrom(new InternetAddress(from)); 
      message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
      message.setSubject("Outlook Meeting Request Using JavaMail"); 

      StringBuffer sb = new StringBuffer(); 

      StringBuffer buffer = sb.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:[email protected]\n" + 
        "ORGANIZER:MAILTO:[email protected]\n" + 
        "DTSTART:20051208T053000Z\n" + 
        "DTEND:20051208T060000Z\n" + 
        "LOCATION:Conference room\n" + 
        "TRANSP:OPAQUE\n" + 
        "SEQUENCE:0\n" + 
        "UID:040000008200E00074C5B7101A82E00800000000002FF466CE3AC5010000000000000000100\n" + 
        " 000004377FE5C37984842BF9440448399EB02\n" + 
        "DTSTAMP:20051206T120102Z\n" + 
        "CATEGORIES:Meeting\n" + 
        "DESCRIPTION:This the description of the meeting.\n\n" + 
        "SUMMARY:Test meeting request\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"); 

      // Create the message part 
      BodyPart messageBodyPart = new MimeBodyPart(); 

      // Fill the message 
      messageBodyPart.setHeader("Content-Class", "urn:content- classes:calendarmessage"); 
      messageBodyPart.setHeader("Content-ID", "calendar_message"); 
      messageBodyPart.setDataHandler(new DataHandler(
        new ByteArrayDataSource(buffer.toString(), "text/calendar")));// very important 

      // Create a Multipart 
      Multipart multipart = new MimeMultipart(); 

      // Add part one 
      multipart.addBodyPart(messageBodyPart); 

      // Put parts in message 
      message.setContent(multipart); 

      // send message 
      Transport.send(message); 
     } catch (MessagingException me) { 
      me.printStackTrace(); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 

3 - अपने चर को बदलें, और आप जाने के लिए अच्छे हैं!

+0

हाय अमृत, मैं अपने अकादमिक के लिए एक ही तरह के प्रोजेक्ट के साथ काम कर रहा हूं, मुझे अलर्ट और मीटिंग के रहने वाले लोगों को उठाने की ज़रूरत है, मैं जावा का उपयोग कर रहा हूं ताकि यह सब मेरा डिजाइन तैयार हो सके लेकिन आईसीएल एपीआई दृष्टिकोण करना मुश्किल है, तो क्या आप कृपया ऐसा करने में मेरी मदद कर सकते हैं! – 09Q71AO534

+0

हाय @ user2561626 यदि आपने यहां कोड का उपयोग किया है तो आपको अलर्ट उठाने में सक्षम होना चाहिए और अनुस्मारक केवल Outlook के लिए ही कार्य कर रहा है, इसलिए इस पर कोई नियंत्रण नहीं है। –

+0

मेरे पास ical4j डाउनलोड किया गया है, क्या मुझे इस कोड को यहां काम करने के लिए, अलर्ट और बचे हुए लोगों को बढ़ाने के लिए, किसी भी तरीके को बदलना चाहिए। – 09Q71AO534

1

कोई संकेत नहीं है कि आप कभी भी पते से किसी वास्तविक पते पर सेट कर रहे हैं, इसलिए आने वाले उत्तर के लिए कहीं भी नहीं है।

कि आपके उत्पादन कोड में समस्या नहीं हो सकता है, लेकिन यह एक समस्या यहाँ की तरह दिखता है ...

+0

वास्तव में मेरे उत्पादन कोड से और उत्तर दें message.setFrom अलावा –

+0

निर्दिष्ट किया जाता है (नई InternetAddress (इस)); से निर्दिष्ट, केवल इस उदाहरण में खाली! –

4

संदेश संदेश बनाने के लिए आप का उपयोग कर सकते हैं (StringBuffer का उपयोग करने के बजाय)।

उदाहरण:

Calendar calendar = new Calendar(); 
PropertyList calendarProperties = calendar.getProperties(); 
calendarProperties.add(Version.VERSION_2_0); 
calendarProperties.add(Method.REQUEST); 
// other properties ... 

VEvent vEvent = new VEvent(/*startDate, endDate*/); 
PropertyList vEventProperties = vEvent.getProperties(); 
vEventProperties.add(Priority.MEDIUM); 
vEventProperties.add(Clazz.PUBLIC); 
// other properties ... 

calendar.getComponents().add(vEvent); 

messageBodyPart.setDataHandler(new DataHandler(new ByteArrayDataSource(calendar.toString(), "text/calendar")));