Gewusst wie: senden einer iCal-Besprechungsanfrage mithilfe von Java-E-Mail, und Sie erhalten die Antwort
Ich versuche zum senden einer iCal zu einem outlook, mithilfe von Java-Mail-Bibliothek, die ich gelesen habe bereits die Frage, und ich habe schon einige Beispiel-code
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” ) ;
}
} }
Aber Ihr Wesen geschickt, die als Anlage der outlook 2007 und outlook 2003, und auch Wenn ich Sie auf die Anlage zu sehen und akzeptieren, dass ich nicht die Antwort erhalten, das ist der Zweck der Anwendung, um eine ähnliche Funktionalität wie outlook.
Gibt es eine Prozedur, die ich wissen muss, oder ist es die Einladung, die ID, das macht die Sache rau?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Also ich habe das problem gelöst, und hier ist was ich gefunden habe:
1 - Sie müssen aktualisieren, um Java-Mail-API 1.4.2 zu machen, funktioniert alles einwandfrei
2 - Schreiben Sie den text/Kalender-Teil der Nachricht wie die folgende:
3 - Ersetzen Sie die variable, und Sie sind gut zu gehen!
Können Sie Bibliothek ical4j neben der javamail zu bauen, der Rumpf der Nachricht (anstelle der Verwendung einer
StringBuffer
).Beispiel:
Es gibt keine Anzeichen, dass Sie jemals die Einstellung der from-Adresse um eine Reale Adresse, also es gibt nirgendwo für die Antwort zu kommen.
Dass kann nicht das problem sein in Ihrem Produktion code, aber es sieht aus wie ein problem hier...
Ich hatte versucht, mit Amr beantworten, aber ich bekam eine Fehlermeldung in
Session session = Session.getDefaultInstance(prop, null),
Naja ich behoben und hier ist der code, den ich verwendet und es funktionierte perfekt. Ich hoffe, es hilft
Denken Sie daran, Sie brauchen, um hinzuzufügen, javax.E-mail-Bibliothek zu Ihrem Projekt