diff --git a/src/main/java/com/strong/speedsyncrestful/Controller/VehicleController.java b/src/main/java/com/strong/speedsyncrestful/Controller/VehicleController.java index d53b3d1..f06c31d 100644 --- a/src/main/java/com/strong/speedsyncrestful/Controller/VehicleController.java +++ b/src/main/java/com/strong/speedsyncrestful/Controller/VehicleController.java @@ -10,6 +10,7 @@ import com.strong.speedsyncrestful.Entity.Vehicle; import com.strong.speedsyncrestful.Exception.SpeedSyncException; +import com.strong.speedsyncrestful.Service.MailService; import com.strong.speedsyncrestful.Service.VehicleService; @RestController @@ -18,10 +19,13 @@ public class VehicleController { @Autowired private VehicleService vehicleService; + @Autowired + private MailService mailService; @PostMapping("challan") public ResponseEntity generateChallan(@RequestBody Vehicle vehicle) throws SpeedSyncException { vehicleService.challanSave(vehicle); + mailService.sendEmail(vehicle.getEmail(), vehicle); return new ResponseEntity<>(HttpStatus.CREATED); } } diff --git a/src/main/java/com/strong/speedsyncrestful/Entity/Vehicle.java b/src/main/java/com/strong/speedsyncrestful/Entity/Vehicle.java index 875369e..ef7949e 100644 --- a/src/main/java/com/strong/speedsyncrestful/Entity/Vehicle.java +++ b/src/main/java/com/strong/speedsyncrestful/Entity/Vehicle.java @@ -21,6 +21,7 @@ public class Vehicle { private Map vehicleDetails; private Location location; private int currentSpeed; + private String email; private String highway; private long timestamp; diff --git a/src/main/java/com/strong/speedsyncrestful/Service/AppConfig.java b/src/main/java/com/strong/speedsyncrestful/Service/AppConfig.java new file mode 100644 index 0000000..85756f8 --- /dev/null +++ b/src/main/java/com/strong/speedsyncrestful/Service/AppConfig.java @@ -0,0 +1,38 @@ +package com.strong.speedsyncrestful.Service; + +import java.util.Properties; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.JavaMailSenderImpl; + +@Configuration +public class AppConfig { + + @Value("${speedSync.Email}") + private String email; + + @Value("${speedSync.Password}") + private String password; + + @Bean + public JavaMailSender getJavaMailSender() { + JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); + mailSender.setHost("smtp.gmail.com"); + mailSender.setPort(587); + + mailSender.setUsername(email); + 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", "false"); + + return mailSender; + } + +} \ No newline at end of file diff --git a/src/main/java/com/strong/speedsyncrestful/Service/MailService.java b/src/main/java/com/strong/speedsyncrestful/Service/MailService.java new file mode 100644 index 0000000..456ea94 --- /dev/null +++ b/src/main/java/com/strong/speedsyncrestful/Service/MailService.java @@ -0,0 +1,125 @@ +package com.strong.speedsyncrestful.Service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Service; + +import com.strong.speedsyncrestful.Entity.Vehicle; + +import jakarta.mail.MessagingException; +import jakarta.mail.internet.MimeMessage; +import lombok.NonNull; + +/** + * Service class for sending emails for various events in the Blood Donation + * application. + */ +@Service +@EnableAsync +public class MailService { + + @Autowired + private JavaMailSender emailSender; + + /** + * Sends a MimeMessage email with the provided details. + * + * @param to the recipient email address + * @param subject the subject of the email + * @param text the content of the email + */ + @Async + public void sendEmail(@NonNull String to, Vehicle vehicle) { + try { + MimeMessage message = emailSender.createMimeMessage(); + MimeMessageHelper helper = new MimeMessageHelper(message, true); + + String email = to; + String carNumber = vehicle.getCarNumber(); + String currentSpeed = vehicle.getCurrentSpeed() + " km/h"; + double latitude = vehicle.getLocation().getLatitude(); + double longitude = vehicle.getLocation().getLongitude(); + String currentLocation = String.valueOf(latitude + ":" + longitude); + String challanPrice = "$" + 500; + + String htmlContent = String.format( + """ + + + + + + Challan Notification + + + +
+
+

Challan Notification

+
+
+

Email: %s

+

Car Number: %s

+

Current Speed: %s

+

Current Location: %s

+

Challan Price: %s

+

Dear Valued Driver,

+

We understand that the road can sometimes be unpredictable. However, ensuring everyone's safety is our top priority. Your recent speed exceeded the limit in a monitored area. Please take this as a gentle reminder to drive safely and adhere to speed regulations. Your attention to road safety not only protects you but also contributes to a safer community.

+

Thank you for your cooperation.

+
+ +
+ + + """, + email, carNumber, currentSpeed, currentLocation, challanPrice); + + helper.setTo(to); + helper.setSubject("Challan Notification"); + helper.setText(htmlContent, true); + + emailSender.send(message); + } catch (MessagingException e) { + System.out.println("Failed to send email: " + e.getMessage()); + } + } + +} \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d1eb65a..78f6314 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -12,4 +12,7 @@ spring.data.mongodb.database=${SpeedMongoDB} #server.ssl.key-store-type=PKCS12 #server.ssl.key-store=SpeedSyncAPI.p12 #server.ssl.key-store-password=SpeedSyncAPI -#server.ssl.key-alias=SpeedSyncAPI \ No newline at end of file +#server.ssl.key-alias=SpeedSyncAPI + +speedSync.Email=${EMAIL} +speedSync.Password=${PASSWORD} \ No newline at end of file