4
我試圖使用java發送每封電子郵件的日曆邀請。收件人獲取電子郵件,但不會顯示接受或拒絕的邀請,該活動會自動添加到他的日曆中。使用java發送每封電子郵件的日曆邀請
我建立事件/用ical4j.jar
private Calendar getInvite(Session session) {
Calendar calendar = new Calendar();
calendar.getProperties().add(Version.VERSION_2_0);
calendar.getProperties().add(Method.REQUEST);
VEvent event = new VEvent(
new DateTime(sesion.getStartDate()),
new DateTime(sesion.getEndDate()),
session.getName());
event.getProperties().add(Priority.MEDIUM);
event.getProperties().add(Clazz.PUBLIC);
try {
UidGenerator ug = new UidGenerator("uidGen");
Uid uid = ug.generateUid();
event.getProperties().add(uid);
} catch (SocketException e) {
// Log things
}
for (Participant participant : session.getParticipants()) {
Attendee attendee = new Attendee(URI.create("mailto:" + participant.getEmail()));
attendee.getParameters().add(Role.OPT_PARTICIPANT);
attendee.getParameters().add(new Cn(participant.getName()));
attendee.getParameters().add(PartStat.NEEDS_ACTION);
event.getProperties().add(attendee);
}
calendar.getComponents().add(event);
return calendar;
}
邀請這就是我如何發送電子郵件:
public void sendEmail(String fromMail, String toMail, String subject, String text, net.fortuna.ical4j.model.Calendar calendar) {
try {
Session session = Session.getInstance(getMailProperties(), new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(getUser(), getPassword());
}
});
MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.setHeader("Content-Transfer-Encoding:", "7bit");
Address address = new InternetAddress(fromMail);
mimeMessage.setFrom(address);
mimeMessage.setSentDate(Calendar.getInstance().getTime());
mimeMessage.setRecipients(Message.RecipientType.TO, toMail);
mimeMessage.setSubject(subject);
Calendar cal = Calendar.getInstance();
mimeMessage.setSentDate(cal.getTime());
Multipart multipart = new MimeMultipart("alternative");
// First part - HTML readable text
MimeBodyPart msgHtml = new MimeBodyPart();
msgHtml.setContent(text, "text/html; charset=UTF-8");
multipart.addBodyPart(msgHtml);
if (calendar != null) {
// Another part for the calendar invite
MimeBodyPart invite = new MimeBodyPart();
invite.setHeader("Content-Class", "urn:content- classes:calendarmessage");
invite.setHeader("Content-ID", "calendar_message");
invite.setHeader("Content-Disposition", "inline");
invite.setContent(calendar.toString(), "text/calendar");
multipart.addBodyPart(invite);
}
mimeMessage.setContent(multipart);
Transport.send(mimeMessage);
} catch (Exception e) {
// Log things
}
}
但是,當我得到的電子郵件(Gmail中)我看不到任何邀請,事件會自動添加到我的日曆中。我只能通過點擊日曆中的事件來接受或拒絕。
我試圖發送邀請,然後會發生什麼是我收到一封電子郵件與ics附件。
我錯過了什麼?
現在我只創建一個事件並通過電子郵件發送,但結果相同,事件會自動添加到我的日曆中。事實證明,你可以在gmail中改變這種行爲,所以我將它設置爲只添加我接受的內容,但我仍然可以看到該邀請,只有當我點擊「顯示原創」時,我才能看到邀請的代碼。電子郵件中仍然沒有顯示彈出式窗口或邀請。 – diminuta
@diminuta你設法解決與Gmail的問題? 我懷疑Google鼓勵使用他們的App Engine SDK進行電子郵件標記(不是免費的)。 https://developers.google.com/gmail/markup/reference/event-reservation – zkvarz