diff --git a/src/main/java/org/tubes/Main.java b/src/main/java/org/tubes/Main.java
index 3a4f22bcb0551d6c17f263c73e64806426bd233a..9f3b961a24af553eff3394f69bd2ceee2998a7ca 100644
--- a/src/main/java/org/tubes/Main.java
+++ b/src/main/java/org/tubes/Main.java
@@ -1,6 +1,7 @@
 package org.tubes;
 
 import org.tubes.db.Database;
+import org.tubes.services.RentServiceImpl;
 import org.tubes.services.SubscriptionServiceImpl;
 import org.tubes.services.TestServiceImpl;
 
@@ -13,7 +14,9 @@ public class Main {
             Database.getInstance().runMigration();
             Endpoint.publish("http://0.0.0.0:7000/ws/Test", new TestServiceImpl());
             Endpoint.publish("http://0.0.0.0:7000/ws/Subscription", new SubscriptionServiceImpl());
+            Endpoint.publish("http://0.0.0.0:7000/ws/Rent", new RentServiceImpl());
             System.out.println("Service is running at http://0.0.0.0:7000/ws/Subscription");
+            System.out.println("Service is running at http://0.0.0.0:7000/ws/Rent");
         } catch (Exception e) {
             e.printStackTrace();
         }
diff --git a/src/main/java/org/tubes/dto/RentDto.java b/src/main/java/org/tubes/dto/RentDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..9bd358c8a63eea42f1bd67ac93be550cbacf2e75
--- /dev/null
+++ b/src/main/java/org/tubes/dto/RentDto.java
@@ -0,0 +1,19 @@
+package org.tubes.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+@Getter @Setter
+public class RentDto implements Serializable {
+    String status;
+    String userId;
+    String email;
+    Integer dormId;
+    String start;
+    Integer totalMonths;
+    Boolean isExtending;
+    Integer totalExtendedMonths;
+    String dormName;
+}
diff --git a/src/main/java/org/tubes/services/RentService.java b/src/main/java/org/tubes/services/RentService.java
new file mode 100644
index 0000000000000000000000000000000000000000..b19fe3ad952bc880a223492c66a534ec823f988a
--- /dev/null
+++ b/src/main/java/org/tubes/services/RentService.java
@@ -0,0 +1,13 @@
+package org.tubes.services;
+
+import org.tubes.dto.RentDto;
+
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebService;
+
+@WebService
+public interface RentService {
+    @WebMethod
+    Boolean notifyRent(@WebParam(name = "rent") RentDto rent);
+}
diff --git a/src/main/java/org/tubes/services/RentServiceImpl.java b/src/main/java/org/tubes/services/RentServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..ca1eb40ba4b231bb84a0d3f30516f738e9197287
--- /dev/null
+++ b/src/main/java/org/tubes/services/RentServiceImpl.java
@@ -0,0 +1,24 @@
+package org.tubes.services;
+
+import org.tubes.dto.RentDto;
+import org.tubes.utils.Mailer;
+
+import javax.jws.HandlerChain;
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import javax.mail.MessagingException;
+
+@WebService(endpointInterface = "org.tubes.services.RentService", serviceName = "RentService")
+@HandlerChain(file="handler-chain.xml")
+public class RentServiceImpl implements RentService {
+    @WebMethod
+    @Override
+    public Boolean notifyRent(RentDto rent) {
+        try {
+            Mailer.getInstance().send(rent.getEmail(), "Rent Request Update", "Your rent request for " + rent.getDormName() + " has been " + rent.getStatus() + " by the owner.");
+            return true;
+        } catch (MessagingException e) {
+            return false;
+        }
+    }
+}