11
votes

Comment envoyer une demande de réunion ICAL à l'aide de Java Mail et recevez la réponse

J'essaie d'envoyer un ical à une Outlook, à l'aide de Java Mail Library, j'ai déjà lu le question , et j'ai déjà un exemple de code xxx

mais son être envoyé comme pièce jointe à l'Outlook 2007 et Outlook 2003, et même si je clique sur la pièce jointe à visualiser et à accepter, je ne reçois pas la réponse, qui est le but de l'application d'avoir une fonctionnalité similaire comme Outlook.

existe-t-il une procédure dont j'ai besoin de savoir, ou est-ce l'identifiant d'invitation qui fait de la chose rugueuse?


0 commentaires

5 Réponses :


1
votes

Il n'y a aucun signe que vous définissez jamais l'adresse de l'adresse à une adresse réelle. Il n'y a donc nulle part que la réponse à venir.

Ce n'est peut-être pas le problème dans votre code , mais cela ressemble à un problème ici ...


2 commentaires

En fait, mon code de production est spécifié et répondant à la réponse.


Outre Message.setfrom (Nouvelle InternetAddress (expéditeur)); spécifié le de, seulement son vide dans cet exemple!



27
votes

J'ai donc résolu le problème, et voici ce que j'ai trouvé:

1 - Vous devez mettre à jour l'API Java Mail 1.4.2 pour que tout fonctionne bien

2 - Écrivez le texte / Calendrier une partie de votre message comme suit: xxx

3 - Remplacez votre variable et vous êtes prêt à partir!


12 commentaires

Bonjour Amr, je travaille avec le même projet de projet pour mon académique, j'ai besoin d'élever les alertes et les restes d'une réunion, j'utilise Java pour développer tout mon design est à la hauteur de la marque, mais l'API ICALL à une perspective Est difficile à faire pourriez-vous m'aider à faire cela!.


Hi @ user2561626 Si vous avez utilisé le code ici, vous devriez être capable d'augmenter l'alerte et le rappel est simplement fonction pour Outlook lui-même, il n'y a donc aucun contrôle sur celui-ci.


J'ai le téléchargé ICAL4J, devrais-je modifier les méthodes qui y sont, pour que ce code soit ici, travaillez ici pour augmenter les alertes et les restes.


J'ai téléchargé le fichier de Ce lien . Je suis nouveau dans l'utilisation de l'API iCal, veuillez m'aider.


Vérifiez les exemples ici: wiki.modularity.net.au/ical4j/ index.php? Titre = Exemples


Merci pour ce soutien.Si tout doute que je vais vous envoyer un texto :-)


Bonjour, Amr Je suis capable d'envoyer l'invitation à la réunion, mais je ne peux pas coder pour l'acceptation, il clique sur! (qu'ils acceptent / rejettent / provisoire). Comment dois-je résoudre ce problème!


L'ICAL4J ne supporte pas cela.


Alors y a-t-il une autre façon de le faire. Amus


La confirmation vient sur le courrier de l'expéditeur, vous devez utiliser l'API du courrier pour lire les mails reçus par l'expéditeur afin d'obtenir les confirmations.


@Amrgawish Merci beaucoup pour votre code, cela m'a sauvé beaucoup de temps. Que Dieu te bénisse.


@ 09Q71AO534 Il appartient au client IMIP de choisir si vous souhaitez offrir ou non la possibilité de "importer" cet événement ou de montrer une action "RSVP" pour cela. Mais, le protocole de l'ITIP / IMIP ne couvre pas le scénario de "inviter l'organisateur" par courrier électronique. Signification, les boutons d'action ne seront pas affichés sur la plupart des clients IMIP, lorsque l'organisateur reçoit la réunion par courrier électronique. Voir Stackoverflow.com/Questtions/35604423/...



6
votes

Vous pouvez utiliser bibliothèque iCAL4J en plus de JavaMail pour construire le corps du message (au lieu d'utiliser un Stringbuffer Code>).

Exemple: P>

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")));


0 commentaires

1
votes

j'avais essayé avec AMR réponse mais j'ai eu une erreur dans SESSION SESSION = SESSION.GETDEFAULLINSTANCETANCE (PROP, NULL) EM>,

Eh bien, j'ai réparé et voici le code que j'ai utilisé et cela fonctionnait parfaitement. STRUT> J'espère que cela aide
N'oubliez pas que vous devez ajouter Javax.mail Library à votre projet P>

import java.util.Properties;
import javax.activation.DataHandler;
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() {
 }

 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 = "FromExample@gmail.com";
        String to = "ToExample@gmail.do";
        Properties prop = new Properties();

        prop.put("mail.smtp.auth", "true");
        prop.put("mail.smtp.starttls.enable", "true");
        prop.put("mail.smtp.host", "smtp.gmail.com");
        prop.put("mail.smtp.port", "587");

        final String username = "FromExample@gmail.com";
        final String password = "123456789";

        Session session = Session.getInstance(prop,
                  new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(username, password);
                    }
                  });

        // 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:xxx@xx.com\n" +
                "ORGANIZER:MAILTO:xx@xx.com\n" +
                "DTSTART:20180922T053000Z\n" +
                "DTEND:20180927T060000Z\n" +
                "LOCATION:Conference room\n" +
                "TRANSP:OPAQUE\n" +
                "SEQUENCE:0\n" +
                "UID:040000008200E00074C5B7101A82E00800000000002FF466CE3AC5010000000000000000100\n" +
                " 000004377FE5C37984842BF9440448399EB02\n" +
                "DTSTAMP:20180922T120102Z\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);

        System.out.println("Success");

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


0 commentaires

0
votes

ici,

1 - JAR de téléchargement à partir de ici (JavaMail API »1.6.2) . P>

2 - Copiez et collez le code suivant (modifier les valeurs de variable) p>

import java.util.Properties;
import javax.activation.DataHandler;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.util.ByteArrayDataSource;

public class Index {

public static void main(String[] args) {

     try {
            final String username = "sender@mail.com";
            final String password = "xxxxx";
            
            String from = "sender@mail.com";
            String to = "attendee@mail.com";
            String subject = "Meeting Subject";
            String startDate = "20201208"; // Date Formate: YYYYMMDD
            String endDate = "20201208"; // Date Formate: YYYYMMDD
            String startTime = "0400"; // Time Formate: HHMM
            String endTime = "0600"; // Time Formate: HHMM
            String emailBody = "Hi Team, This is meeting description. Thanks"; 
            
            Properties prop = new Properties();
            prop.put("mail.smtp.auth", "true");
            prop.put("mail.smtp.starttls.enable", "true");
            prop.put("mail.smtp.host", "smtp.gmail.com");
            prop.put("mail.smtp.port", "25");

            Session session = Session.getDefaultInstance(prop,  new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(username, password);
                }
              });
            
            MimeMessage message = new MimeMessage(session);
            message.addHeaderLine("method=REQUEST");
            message.addHeaderLine("charset=UTF-8");
            message.addHeaderLine("component=VEVENT");

            message.setFrom(new InternetAddress(from, "New Outlook Event"));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject(subject);

            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:"+ to +"\n" +
                    "DTSTART:"+ startDate +"T"+ startTime +"00Z\n" +
                    "DTEND:"+ endDate +"T"+ endTime +"00Z\n" +
                    "LOCATION:Conference room\n" +
                    "TRANSP:OPAQUE\n" +
                    "SEQUENCE:0\n" +
                    "UID:040000008200E00074C5B7101A82E00800000000002FF466CE3AC5010000000000000000100\n" +
                    " 000004377FE5C37984842BF9440448399EB02\n" +
                    "CATEGORIES:Meeting\n" +
                    "DESCRIPTION:"+ emailBody +"\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);
            
            System.out.println("Email sent!");
        } catch (MessagingException me) {
            me.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
}
}


0 commentaires