blob: 395374bbf006cfba3b992bf19e02a92cb29438a2 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License") + you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.openmeetings.test.calendar;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.SocketException;
import java.net.URI;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Properties;
import java.util.Vector;
import javax.activation.DataHandler;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import net.fortuna.ical4j.data.CalendarOutputter;
import net.fortuna.ical4j.model.DateTime;
import net.fortuna.ical4j.model.TimeZone;
import net.fortuna.ical4j.model.TimeZoneRegistry;
import net.fortuna.ical4j.model.TimeZoneRegistryFactory;
import net.fortuna.ical4j.model.ValidationException;
import net.fortuna.ical4j.model.component.VEvent;
import net.fortuna.ical4j.model.component.VTimeZone;
import net.fortuna.ical4j.model.parameter.Cn;
import net.fortuna.ical4j.model.parameter.Role;
import net.fortuna.ical4j.model.property.Attendee;
import net.fortuna.ical4j.model.property.CalScale;
import net.fortuna.ical4j.model.property.Method;
import net.fortuna.ical4j.model.property.Organizer;
import net.fortuna.ical4j.model.property.ProdId;
import net.fortuna.ical4j.model.property.Uid;
import net.fortuna.ical4j.model.property.Version;
import net.fortuna.ical4j.util.UidGenerator;
import org.junit.Test;
import org.openmeetings.app.OpenmeetingsVariables;
import org.openmeetings.app.data.basic.Configurationmanagement;
import org.openmeetings.app.persistence.beans.basic.Configuration;
import org.openmeetings.test.AbstractOpenmeetingsSpringTest;
import org.openmeetings.utils.mail.ByteArrayDataSource;
import org.openmeetings.utils.mail.IcalHandler;
import org.openmeetings.utils.mail.SmtpAuthenticator;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
public class TestSendIcalMessage extends AbstractOpenmeetingsSpringTest {
private static final Logger log = Red5LoggerFactory.getLogger(
TestAppointmentSchedulerTask.class,
OpenmeetingsVariables.webAppRootKey);
@Autowired
private Configurationmanagement cfgManagement;
private byte[] iCalMimeBody;
String subject = "test iCal";
String recipients = "seba.wagner@gmail.com";
String htmlBody = "test";
public void simpleInvitionIcalLink() {
// Create a TimeZone
TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance()
.createRegistry();
TimeZone timezone = registry.getTimeZone("America/Mexico_City");
VTimeZone tz = timezone.getVTimeZone();
// Start Date is on: April 1, 2008, 9:00 am
java.util.Calendar startDate = new GregorianCalendar();
startDate.setTimeZone(timezone);
startDate.set(java.util.Calendar.MONTH, java.util.Calendar.APRIL);
startDate.set(java.util.Calendar.DAY_OF_MONTH, 1);
startDate.set(java.util.Calendar.YEAR, 2008);
startDate.set(java.util.Calendar.HOUR_OF_DAY, 9);
startDate.set(java.util.Calendar.MINUTE, 0);
startDate.set(java.util.Calendar.SECOND, 0);
// End Date is on: April 1, 2008, 13:00
java.util.Calendar endDate = new GregorianCalendar();
endDate.setTimeZone(timezone);
endDate.set(java.util.Calendar.MONTH, java.util.Calendar.APRIL);
endDate.set(java.util.Calendar.DAY_OF_MONTH, 1);
endDate.set(java.util.Calendar.YEAR, 2008);
endDate.set(java.util.Calendar.HOUR_OF_DAY, 13);
endDate.set(java.util.Calendar.MINUTE, 0);
endDate.set(java.util.Calendar.SECOND, 0);
// Create the event
String eventName = "Progress Meeting";
DateTime start = new DateTime(startDate.getTime());
DateTime end = new DateTime(endDate.getTime());
VEvent meeting = new VEvent(start, end, eventName);
// add timezone info..
meeting.getProperties().add(tz.getTimeZoneId());
// generate unique identifier..
UidGenerator ug;
try {
ug = new UidGenerator("uidGen");
Uid uid = ug.generateUid();
meeting.getProperties().add(uid);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// add attendees..
Attendee dev1 = new Attendee(URI.create("mailto:dev1@mycompany.com"));
dev1.getParameters().add(Role.REQ_PARTICIPANT);
dev1.getParameters().add(new Cn("Developer 1"));
meeting.getProperties().add(dev1);
Attendee dev2 = new Attendee(URI.create("mailto:dev2@mycompany.com"));
dev2.getParameters().add(Role.OPT_PARTICIPANT);
dev2.getParameters().add(new Cn("Developer 2"));
meeting.getProperties().add(dev2);
// Create a calendar
net.fortuna.ical4j.model.Calendar icsCalendar = new net.fortuna.ical4j.model.Calendar();
icsCalendar.getProperties().add(
new ProdId("-//Events Calendar//iCal4j 1.0//EN"));
icsCalendar.getProperties().add(CalScale.GREGORIAN);
icsCalendar.getProperties().add(Version.VERSION_2_0);
// Add the event and print
icsCalendar.getComponents().add(meeting);
Organizer orger = new Organizer(URI.create("seba.wagner@gmail.com"));
orger.getParameters().add(new Cn("Sebastian Wagner"));
meeting.getProperties().add(orger);
icsCalendar.getProperties().add(Method.REQUEST);
System.out.println(icsCalendar);
ByteArrayOutputStream bout = new ByteArrayOutputStream();
CalendarOutputter outputter = new CalendarOutputter();
try {
outputter.output(icsCalendar, bout);
iCalMimeBody = bout.toByteArray();
sendIcalMessage();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ValidationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void sendInvitionIcalLink() {
try {
String email = "hans@webbase-design.de";
String username = "shans";
boolean invitor = false;
Calendar start = Calendar.getInstance();
Calendar end = Calendar.getInstance();
IcalHandler handler = new IcalHandler(
IcalHandler.ICAL_METHOD_REQUEST);
// Transforming Meeting Members
HashMap<String, String> attendeeList = handler.getAttendeeData(
email, username, invitor);
HashMap<String, String> organizerAttendee = handler
.getAttendeeData(recipients, "seba-test", true);
Vector<HashMap<String, String>> atts = new Vector<HashMap<String, String>>();
atts.add(attendeeList);
// Create ICal Message
String meetingId = handler.addNewMeeting(start.getTime(), end.getTime(), "test event",
atts, "localhost:5080/link_openmeetings",
organizerAttendee, "", TimeZone.getDefault());
log.debug("meetingId " + meetingId);
iCalMimeBody = handler.getIcalAsByteArray();
sendIcalMessage();
// return MailHandler.sendMail(email, subject, template);
} catch (Exception err) {
log.error("sendInvitionIcalLink", err);
}
}
private void sendIcalMessage() throws Exception {
log.debug("sendIcalMessage");
// Evaluating Configuration Data
String smtpServer = cfgManagement.getConfKey(3, "smtp_server")
.getConf_value();
String smtpPort = cfgManagement.getConfKey(3, "smtp_port")
.getConf_value();
// String from = "openmeetings@xmlcrm.org";
String from = cfgManagement.getConfKey(3, "system_email_addr")
.getConf_value();
String emailUsername = cfgManagement.getConfKey(3, "email_username")
.getConf_value();
String emailUserpass = cfgManagement.getConfKey(3, "email_userpass")
.getConf_value();
Properties props = System.getProperties();
props.put("mail.smtp.host", smtpServer);
props.put("mail.smtp.port", smtpPort);
Configuration conf = cfgManagement.getConfKey(3,
"mail.smtp.starttls.enable");
if (conf != null) {
if (conf.getConf_value().equals("1")) {
props.put("mail.smtp.starttls.enable", "true");
}
}
// Check for Authentification
Session session = null;
if (emailUsername != null && emailUsername.length() > 0
&& emailUserpass != null && emailUserpass.length() > 0) {
// use SMTP Authentication
props.put("mail.smtp.auth", "true");
session = Session.getDefaultInstance(props, new SmtpAuthenticator(
emailUsername, emailUserpass));
} else {
// not use SMTP Authentication
session = Session.getDefaultInstance(props, null);
}
// Building MimeMessage
MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.setSubject(subject);
mimeMessage.setFrom(new InternetAddress(from));
mimeMessage.addRecipients(Message.RecipientType.TO,
InternetAddress.parse(recipients, false));
// -- Create a new message --
BodyPart msg = new MimeBodyPart();
msg.setDataHandler(new DataHandler(new ByteArrayDataSource(htmlBody,
"text/html; charset=\"utf-8\"")));
Multipart multipart = new MimeMultipart();
BodyPart iCalAttachment = new MimeBodyPart();
iCalAttachment.setDataHandler(new DataHandler(
new javax.mail.util.ByteArrayDataSource(
new ByteArrayInputStream(iCalMimeBody),
"text/calendar;method=REQUEST;charset=\"UTF-8\"")));
iCalAttachment.setFileName("invite.ics");
multipart.addBodyPart(iCalAttachment);
multipart.addBodyPart(msg);
mimeMessage.setSentDate(new Date());
mimeMessage.setContent(multipart);
// -- Set some other header information --
// mimeMessage.setHeader("X-Mailer", "XML-Mail");
// mimeMessage.setSentDate(new Date());
// Transport trans = session.getTransport("smtp");
Transport.send(mimeMessage);
}
}