Я пытаюсь отправить календарный приглашение с помощью Java и Spring Boot. Вот мой код. < /p>
package com.mail;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.*;
import jakarta.mail.internet.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
import jakarta.mail.util.ByteArrayDataSource;
@SpringBootApplication
public class SendMailApplication implements CommandLineRunner {
@Value("${spring.mail.username}")
private String username;
@Value("${spring.mail.password}")
private String password;
public static void main(String[] args) {
SpringApplication.run(SendMailApplication.class, args);
}
@Override
public void run(String... args) throws ParseException {
sendEmail();
}
private JavaMailSender getMailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("smtp.gmail.com");
mailSender.setPort(587);
mailSender.setUsername(username);
mailSender.setPassword(password);
Properties props = mailSender.getJavaMailProperties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.debug", "true");
return mailSender;
}
private void sendEmail() throws ParseException {
JavaMailSender mailSender = getMailSender();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date = df.parse("2025-04-02");
String startTime = "11:30 AM";
String lab = "Home";
List attendees = Arrays.asList("[email protected]");
MimeMessagePreparator preparator = mimeMessage -> {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setTo("[email protected]");
helper.setFrom(username);
helper.setSubject("Lab Appointment Confirmation");
// Email Body with ICS Inline
String emailBody = "Hi,
Your lab appointment has been scheduled.
Thanks!";
helper.setText(emailBody, true);
// Generate ICS Content
String icsContent = generateICSContent(date, startTime, lab, attendees);
// Attach ICS file
ByteArrayDataSource dataSource = new ByteArrayDataSource(icsContent, "text/calendar; charset=UTF-8; method=REQUEST");
helper.addAttachment("invite.ics", dataSource);
// Add Calendar Invite as an inline alternative content
helper.getMimeMessage().setContent(icsContent, "text/calendar; charset=UTF-8; method=REQUEST");
};
try {
mailSender.send(preparator);
System.out.println("Email sent successfully!");
} catch (Exception e) {
e.printStackTrace();
}
}
private String generateICSContent(Date date, String startTime, String lab, List attendees) {
try {
ZoneId estZone = ZoneId.of("America/New_York");
Instant instant = date.toInstant();
LocalDate localDate = instant.atZone(estZone).toLocalDate();
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("hh:mm a", Locale.US);
LocalTime startTimeParsed = LocalTime.parse(startTime, timeFormatter);
LocalTime endTime = startTimeParsed.plusHours(1);
ZonedDateTime start = ZonedDateTime.of(localDate, startTimeParsed, estZone).withZoneSameInstant(ZoneOffset.UTC);
ZonedDateTime end = ZonedDateTime.of(localDate, endTime, estZone).withZoneSameInstant(ZoneOffset.UTC);
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmss'Z'");
StringBuilder icsContent = new StringBuilder();
icsContent.append("BEGIN:VCALENDAR\n")
.append("VERSION:2.0\n")
.append("CALSCALE:GREGORIAN\n")
.append("METHOD:REQUEST\n")
.append("BEGIN:VEVENT\n")
.append("UID:").append(UUID.randomUUID()).append("\n")
.append("DTSTAMP:").append(ZonedDateTime.now(ZoneOffset.UTC).format(dtf)).append("\n")
.append("DTSTART:").append(start.format(dtf)).append("\n")
.append("DTEND:").append(end.format(dtf)).append("\n")
.append("SUMMARY: Lab Appointment\n")
.append("DESCRIPTION:Lab Appointment at ").append(lab).append("\n")
.append("LOCATION:").append(lab).append("\n")
.append("ORGANIZER;CN=LAB:mailto:").append(username).append("\n");
for (String attendee : attendees) {
icsContent.append("ATTENDEE;CN=").append(attendee).append(";RSVP=TRUE:mailto:").append(attendee).append("\n");
}
icsContent.append("STATUS:CONFIRMED\n")
.append("END:VEVENT\n")
.append("END:VCALENDAR");
return icsContent.toString();
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
}
< /code>
Я в настоящее время использую Localhost для тестирования, и это мой пример кода, может кто -нибудь, пожалуйста, помогите мне с этим. Я вижу файл тела и ICS в моем Gmail.
Подробнее здесь: https://stackoverflow.com/questions/795 ... using-java
Попытка отправить календарный приглашение на мой Gmail с помощью Java ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как отправить приглашение по электронной почте для Testflight для внутреннего тестера?
Anonymous » » в форуме IOS - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-