使用java为每封电子邮件发送日历邀请
我正在尝试用java发送每封电子邮件的日历邀请。收件人收到电子邮件,但不会显示接受或拒绝邀请,而是自动将活动添加到其日历中 我正在使用ical4j.jar构建事件/邀请使用java为每封电子邮件发送日历邀请,java,email,calendar,jakarta-mail,ical4j,Java,Email,Calendar,Jakarta Mail,Ical4j,我正在尝试用java发送每封电子邮件的日历邀请。收件人收到电子邮件,但不会显示接受或拒绝邀请,而是自动将活动添加到其日历中 我正在使用ical4j.jar构建事件/邀请 private Calendar getInvite(Session session) { Calendar calendar = new Calendar(); calendar.getProperties().add(Version.VERSION_2_0); calendar.getProperti
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中改变这种行为,所以我将其设置为只添加我已接受的内容,但我仍然可以看到邀请,只有当我点击“show original”时,我才能看到邀请的代码。电子邮件中仍然没有弹出窗口或邀请。@diminuta你用gmail解决了这个问题吗?我怀疑谷歌鼓励使用他们的应用程序引擎SDK进行电子邮件标记(不是免费的)。