Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/filter/InviteFilter.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/filter/InviteFilter.java	(revision 4185157c516ed5a33d48b6a996c0496310fd6294)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/filter/InviteFilter.java	(revision 586ed141976a2be6a947e280028c6665a513b3f8)
@@ -28,13 +28,10 @@
         String path = request.getRequestURI();
 
-
         if (path.contains("/register/local-manager") || path.contains("/register/local-worker") || path.contains("/register/invite/check")) {
 
-            //Solution for bug
             if (request.getMethod().equals("OPTIONS")) {
                 filterChain.doFilter(request, response);
                 return;
             }
-            //Solution for bug
 
             if (token == null || token.isEmpty()) {
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/jwtDTO/VerificationDTO.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/jwtDTO/VerificationDTO.java	(revision 586ed141976a2be6a947e280028c6665a513b3f8)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/jwtDTO/VerificationDTO.java	(revision 586ed141976a2be6a947e280028c6665a513b3f8)
@@ -0,0 +1,7 @@
+package mk.ukim.finki.it.reservengo.dto.jwtDTO;
+
+public record VerificationDTO(
+        String email,
+        String verificationCode
+) {
+}
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/domain/User.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/domain/User.java	(revision 4185157c516ed5a33d48b6a996c0496310fd6294)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/domain/User.java	(revision 586ed141976a2be6a947e280028c6665a513b3f8)
@@ -52,4 +52,8 @@
     private LocalDateTime lastActivityDate;
 
+    private String verificationCode;
+
+    private LocalDateTime verificationCodeExpiryDate;
+
     public User(String firstName, String lastName, String email, String password, String phoneNumber, Role userRole) {
         this.firstName = firstName;
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AdminServiceImpl.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AdminServiceImpl.java	(revision 4185157c516ed5a33d48b6a996c0496310fd6294)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AdminServiceImpl.java	(revision 586ed141976a2be6a947e280028c6665a513b3f8)
@@ -1,4 +1,5 @@
 package mk.ukim.finki.it.reservengo.service.impl;
 
+import jakarta.mail.MessagingException;
 import mk.ukim.finki.it.reservengo.dto.adminDTO.DisplayAdminLocalsDTO;
 import mk.ukim.finki.it.reservengo.dto.localDTO.CreateLocalDTO;
@@ -81,5 +82,5 @@
 
     @Override
-    public void inviteManager(EditUserEmailDTO emailDTO) {
+    public void inviteManager(EditUserEmailDTO emailDTO) throws MessagingException {
         String token = jwtService.generateInviteToken(emailDTO.newEmail(), Role.ROLE_LOCAL_MANAGER);
         emailService.sendManagerInvitationEmail(emailDTO.newEmail(), token);
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AuthServiceImpl.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AuthServiceImpl.java	(revision 4185157c516ed5a33d48b6a996c0496310fd6294)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AuthServiceImpl.java	(revision 586ed141976a2be6a947e280028c6665a513b3f8)
@@ -1,4 +1,5 @@
 package mk.ukim.finki.it.reservengo.service.impl;
 
+import jakarta.mail.MessagingException;
 import mk.ukim.finki.it.reservengo.dto.jwtDTO.JWTAuthenticationRequestDTO;
 import mk.ukim.finki.it.reservengo.dto.jwtDTO.JWTAuthenticationResponseDTO;
@@ -17,4 +18,7 @@
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
+import java.util.Random;
+
 @Service
 public class AuthServiceImpl implements AuthService {
@@ -27,6 +31,7 @@
     private final UserRepository userRepository;
     private final UserService userService;
+    private final EmailService emailService;
 
-    public AuthServiceImpl(CustomerService customerService, LocalWorkerService localWorkerService, LocalManagerService localManagerService, JWTService jwtService, PasswordEncoder passwordEncoder, AuthenticationManager authenticationManager, UserRepository userRepository, UserService userService) {
+    public AuthServiceImpl(CustomerService customerService, LocalWorkerService localWorkerService, LocalManagerService localManagerService, JWTService jwtService, PasswordEncoder passwordEncoder, AuthenticationManager authenticationManager, UserRepository userRepository, UserService userService, EmailService emailService) {
         this.customerService = customerService;
         this.localWorkerService = localWorkerService;
@@ -37,14 +42,21 @@
         this.userRepository = userRepository;
         this.userService = userService;
+        this.emailService = emailService;
     }
 
     @Override
-    public JWTAuthenticationResponseDTO registerCustomer(JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO) {
+    public JWTAuthenticationResponseDTO registerCustomer(JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO) throws MessagingException {
         Customer customer = jwtAuthenticationRequestDTO.toCustomer(passwordEncoder.encode(jwtAuthenticationRequestDTO.password()));
 
+        String verificationCode = generateVerificationCode();
+        customer.setVerificationCode(verificationCode);
+        customer.setVerificationCodeExpiryDate(LocalDateTime.now().plusMinutes(30));
+        customer.setEnabled(false);
+
         customerService.save(customer);
-        String jwt = jwtService.generateToken(customer);
 
-        return JWTAuthenticationResponseDTO.fromUser(customer, jwt);
+        emailService.sendVerificationEmail(customer.getEmail(), verificationCode);
+
+        return JWTAuthenticationResponseDTO.fromUser(customer, null);
     }
 
@@ -74,8 +86,12 @@
 
     @Override
-    public JWTAuthenticationResponseDTO login(JWTLoginDTO jwtLoginDTO) {
+    public JWTAuthenticationResponseDTO login(JWTLoginDTO jwtLoginDTO) throws MessagingException {
+        User user = userRepository.findByEmail(jwtLoginDTO.email()).orElseThrow(() -> new EmailNotFoundException(jwtLoginDTO.email()));
+
+        if (!user.isEnabled()) {
+            throw new MessagingException("Account not verified. Please verify your email.");
+        }
+
         authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(jwtLoginDTO.email(), jwtLoginDTO.password()));
-
-        User user = userRepository.findByEmail(jwtLoginDTO.email()).orElseThrow(() -> new EmailNotFoundException(jwtLoginDTO.email()));
         String jwt = jwtService.generateToken(user);
 
@@ -94,5 +110,5 @@
 
         if (!passwordEncoder.matches(jwtLoginDTO.password(), user.getPassword())) {
-            throw new BadCredentialsException("Bad credentials.") ;
+            throw new BadCredentialsException("Bad credentials.");
         }
 
@@ -100,4 +116,44 @@
             userService.enableProfile(user.getId());
         }
+    }
+
+    @Override
+    public void verifyCustomer(String email, String verificationCode) throws MessagingException {
+        User user = userRepository.findByEmail(email).orElseThrow(() -> new EmailNotFoundException(email));
+
+        if (user.getVerificationCodeExpiryDate().isBefore(LocalDateTime.now())) {
+            throw new MessagingException("Verification code expired");
+        }
+
+        if (!user.getVerificationCode().equals(verificationCode.trim())) {
+            throw new MessagingException("Invalid verification code");
+        }
+
+        user.setEnabled(true);
+        user.setVerificationCode(null);
+        user.setVerificationCodeExpiryDate(null);
+
+        userRepository.save(user);
+    }
+
+    @Override
+    public void resendVerificationCode(String email) throws MessagingException {
+        User user = userRepository.findByEmail(email).orElseThrow(() -> new EmailNotFoundException(email));
+
+        if (user.isEnabled()) {
+            throw new MessagingException("Account already verified");
+        }
+
+        String newCode = generateVerificationCode();
+        user.setVerificationCode(newCode);
+        user.setVerificationCodeExpiryDate(LocalDateTime.now().plusMinutes(30));
+
+        try {
+            emailService.sendVerificationEmail(email, newCode);
+        } catch (MessagingException e) {
+            throw new MessagingException("Failed to send email", e);
+        }
+
+        userRepository.save(user);
     }
 
@@ -108,3 +164,8 @@
         }
     }
+
+    private String generateVerificationCode() {
+        Random random = new Random();
+        return String.valueOf(random.nextInt(900000) + 100000);
+    }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/EmailServiceImpl.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/EmailServiceImpl.java	(revision 4185157c516ed5a33d48b6a996c0496310fd6294)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/EmailServiceImpl.java	(revision 586ed141976a2be6a947e280028c6665a513b3f8)
@@ -1,7 +1,10 @@
 package mk.ukim.finki.it.reservengo.service.impl;
 
+import jakarta.mail.MessagingException;
+import jakarta.mail.internet.MimeMessage;
 import mk.ukim.finki.it.reservengo.service.intf.EmailService;
-import org.springframework.mail.SimpleMailMessage;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.mail.javamail.MimeMessageHelper;
 import org.springframework.stereotype.Service;
 
@@ -9,56 +12,100 @@
 public class EmailServiceImpl implements EmailService {
     private final JavaMailSender mailSender;
+    private final String frontEndUrl;
 
-    private final String frontEndUrl = "http://localhost:5173";
-
-    public EmailServiceImpl(JavaMailSender mailSender) {
+    public EmailServiceImpl(@Value("${frontend.url}") String frontEndUrl, JavaMailSender mailSender) {
+        this.frontEndUrl = frontEndUrl;
         this.mailSender = mailSender;
     }
 
     @Override
-    public void sendManagerInvitationEmail(String email, String token) {
+    public void sendManagerInvitationEmail(String email, String token) throws MessagingException {
         String invitationUrl = frontEndUrl + "/register/manager?token=" + token;
 
-        SimpleMailMessage message = new SimpleMailMessage();
-        message.setTo(email);
-        message.setSubject("Manager Invitation");
-        message.setText(String.format(
-                """
-                        You have been invited to become a manager.
-                        
-                        Click the link below to complete your registration:
-                        %s
-                        
-                        This link will expire in 24 hours.""",
-                invitationUrl
-        ));
+        String html = """
+                <div style="font-family: Arial, sans-serif; font-size: 15px; color: #333;">
+                    <h2>Manager Invitation</h2>
+                    <p>You have been invited to become a manager.</p>
+                    <p>Click the button below to complete your registration:</p>
+                    <a href="%s" style="
+                        background-color: #4CAF50;
+                        color: white;
+                        padding: 10px 20px;
+                        text-decoration: none;
+                        border-radius: 5px;
+                        display: inline-block;
+                    ">Complete Registration</a>
+                    <p style="margin-top: 20px;">This link will expire in 24 hours.</p>
+                </div>
+                """.formatted(invitationUrl);
 
-        mailSender.send(message);
+        sendHtmlEmail(email, "Manager Invitation", html);
     }
 
     @Override
-    public void sendWorkerInvitationEmail(String email, String token, String managerEmail, String localName) {
+    public void sendWorkerInvitationEmail(String email, String token, String managerEmail, String localName) throws MessagingException {
         String invitationUrl = frontEndUrl + "/register/worker?token=" + token;
 
-        SimpleMailMessage message = new SimpleMailMessage();
-        message.setTo(email);
-        message.setSubject("Worker Invitation");
-        message.setText(String.format(
-                """
-                        You have been invited to become a worker at "%s".
-                        
-                        Invited by manager: %s
-                        
-                        Click the link below to complete your registration:
-                        %s
-                        
-                        This link will expire in 24 hours.
-                        """,
-                localName,
-                managerEmail,
-                invitationUrl
-        ));
+        String html = """
+                <div style="font-family: Arial, sans-serif; font-size: 15px; color: #333;">
+                    <h2>Worker Invitation</h2>
+                    <p>You have been invited to become a worker at <b>%s</b>.</p>
+                    <p>Invited by manager: <b>%s</b></p>
+                    <p>Click the button below to complete your registration:</p>
+                    <a href="%s" style="
+                        background-color: #2196F3;
+                        color: white;
+                        padding: 10px 20px;
+                        text-decoration: none;
+                        border-radius: 5px;
+                        display: inline-block;
+                    ">Complete Registration</a>
+                    <p style="margin-top: 20px;">This link will expire in 24 hours.</p>
+                </div>
+                """.formatted(localName, managerEmail, invitationUrl);
 
-        mailSender.send(message);
+        sendHtmlEmail(email, "Worker Invitation", html);
+    }
+
+    @Override
+    public void sendVerificationEmail(String email, String verificationCode) throws MessagingException {
+        String verificationUrl = frontEndUrl + "/verify?code=" + verificationCode;
+
+        String html = """
+                <div style="font-family: Arial, sans-serif; font-size: 15px; color: #333;">
+                    <h2>Email Verification</h2>
+                    <p>Please verify your email address by clicking the button below:</p>
+                    <a href="%s" style="
+                        background-color: #FF9800;
+                        color: white;
+                        padding: 10px 20px;
+                        text-decoration: none;
+                        border-radius: 5px;
+                        display: inline-block;
+                    ">Verify Email</a>
+                    <p style="margin-top: 20px;">
+                        Or use this verification code:
+                        <strong style="font-size: 18px; color: #FF9800;">%s</strong>
+                    </p>
+                    <p style="margin-top: 20px;">If you did not request this, you can ignore this email.</p>
+                </div>
+                """.formatted(verificationUrl, verificationCode);
+
+        sendHtmlEmail(email, "Account verification", html);
+    }
+
+    private void sendHtmlEmail(String to, String subject, String text) throws MessagingException {
+        try {
+            MimeMessage message = mailSender.createMimeMessage();
+            MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
+
+            helper.setTo(to);
+            helper.setSubject(subject);
+            helper.setText(text, true);
+
+            mailSender.send(message);
+        } catch (MessagingException e) {
+            throw new MessagingException("Failed to send email", e);
+        }
     }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalManagerServiceImpl.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalManagerServiceImpl.java	(revision 4185157c516ed5a33d48b6a996c0496310fd6294)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalManagerServiceImpl.java	(revision 586ed141976a2be6a947e280028c6665a513b3f8)
@@ -1,4 +1,5 @@
 package mk.ukim.finki.it.reservengo.service.impl;
 
+import jakarta.mail.MessagingException;
 import mk.ukim.finki.it.reservengo.dto.eventDTO.CreateEventDTO;
 import mk.ukim.finki.it.reservengo.dto.localDTO.CreateLocalDetailsDTO;
@@ -57,9 +58,4 @@
 
     @Override
-    public List<LocalManager> findAll() {
-        return localManagerRepository.findAll();
-    }
-
-    @Override
     public LocalManager findManagerById(Long id) {
         return localManagerRepository.findById(id).orElseThrow(() -> new LocalManagerIdNotFoundException(id));
@@ -206,5 +202,5 @@
 
     @Override
-    public void inviteWorker(Long managerId, EditUserEmailDTO emailDTO) {
+    public void inviteWorker(Long managerId, EditUserEmailDTO emailDTO) throws MessagingException {
         LocalManager manager = localManagerRepository.findById(managerId).orElseThrow(() -> new LocalManagerIdNotFoundException(managerId));
         if (manager.getLocal() == null) {
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/AdminService.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/AdminService.java	(revision 4185157c516ed5a33d48b6a996c0496310fd6294)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/AdminService.java	(revision 586ed141976a2be6a947e280028c6665a513b3f8)
@@ -1,4 +1,5 @@
 package mk.ukim.finki.it.reservengo.service.intf;
 
+import jakarta.mail.MessagingException;
 import mk.ukim.finki.it.reservengo.dto.adminDTO.DisplayAdminLocalsDTO;
 import mk.ukim.finki.it.reservengo.dto.localDTO.CreateLocalDTO;
@@ -23,4 +24,4 @@
     void removeManagerFromLocal(Long managerId);
 
-    void inviteManager(EditUserEmailDTO emailDTO);
+    void inviteManager(EditUserEmailDTO emailDTO) throws MessagingException;
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/AuthService.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/AuthService.java	(revision 4185157c516ed5a33d48b6a996c0496310fd6294)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/AuthService.java	(revision 586ed141976a2be6a947e280028c6665a513b3f8)
@@ -1,4 +1,5 @@
 package mk.ukim.finki.it.reservengo.service.intf;
 
+import jakarta.mail.MessagingException;
 import mk.ukim.finki.it.reservengo.dto.jwtDTO.JWTAuthenticationRequestDTO;
 import mk.ukim.finki.it.reservengo.dto.jwtDTO.JWTAuthenticationResponseDTO;
@@ -6,5 +7,5 @@
 
 public interface AuthService {
-    JWTAuthenticationResponseDTO registerCustomer(JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO);
+    JWTAuthenticationResponseDTO registerCustomer(JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO) throws MessagingException;
 
     JWTAuthenticationResponseDTO registerLocalWorker(JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO, String token);
@@ -12,6 +13,10 @@
     JWTAuthenticationResponseDTO registerLocalManager(JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO, String token);
 
-    JWTAuthenticationResponseDTO login(JWTLoginDTO jwtLoginDTO);
+    JWTAuthenticationResponseDTO login(JWTLoginDTO jwtLoginDTO) throws MessagingException;
 
     void reactivateProfile(JWTLoginDTO jwtLoginDTO);
+
+    void verifyCustomer(String email, String verificationCode) throws MessagingException;
+
+    void resendVerificationCode(String email) throws MessagingException;
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/EmailService.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/EmailService.java	(revision 4185157c516ed5a33d48b6a996c0496310fd6294)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/EmailService.java	(revision 586ed141976a2be6a947e280028c6665a513b3f8)
@@ -1,7 +1,11 @@
 package mk.ukim.finki.it.reservengo.service.intf;
 
+import jakarta.mail.MessagingException;
+
 public interface EmailService {
-    void sendManagerInvitationEmail(String email, String token);
+    void sendManagerInvitationEmail(String email, String token) throws MessagingException;
 
-    void sendWorkerInvitationEmail(String email, String token, String managerEmail, String localName);
+    void sendWorkerInvitationEmail(String email, String token, String managerEmail, String localName) throws MessagingException;
+
+    void sendVerificationEmail(String email, String verificationCode) throws MessagingException;
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/LocalManagerService.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/LocalManagerService.java	(revision 4185157c516ed5a33d48b6a996c0496310fd6294)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/LocalManagerService.java	(revision 586ed141976a2be6a947e280028c6665a513b3f8)
@@ -1,4 +1,5 @@
 package mk.ukim.finki.it.reservengo.service.intf;
 
+import jakarta.mail.MessagingException;
 import mk.ukim.finki.it.reservengo.dto.eventDTO.CreateEventDTO;
 import mk.ukim.finki.it.reservengo.dto.localDTO.CreateLocalDetailsDTO;
@@ -20,6 +21,4 @@
 
     List<LocalManager> findAllByLocalId(Long localId);
-
-    List<LocalManager> findAll();
 
     LocalManager findManagerById(Long id);
@@ -57,4 +56,4 @@
     void changePosition(Long managerId, Long workerId, PositionDTO positionDTO);
 
-    void inviteWorker(Long managerId, EditUserEmailDTO emailDTO);
+    void inviteWorker(Long managerId, EditUserEmailDTO emailDTO) throws MessagingException;
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/advice/GlobalExceptionHandler.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/advice/GlobalExceptionHandler.java	(revision 4185157c516ed5a33d48b6a996c0496310fd6294)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/advice/GlobalExceptionHandler.java	(revision 586ed141976a2be6a947e280028c6665a513b3f8)
@@ -1,4 +1,5 @@
 package mk.ukim.finki.it.reservengo.web.advice;
 
+import jakarta.mail.MessagingException;
 import mk.ukim.finki.it.reservengo.model.exceptions.*;
 import org.springframework.http.HttpStatus;
@@ -149,4 +150,9 @@
         return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
     }
+
+    @ExceptionHandler(MessagingException.class)
+    public ResponseEntity<String> handleMessagingException(MessagingException ex) {
+        return ResponseEntity.status(HttpStatus.CONFLICT).body(ex.getMessage());
+    }
 }
 
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/AdminController.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/AdminController.java	(revision 4185157c516ed5a33d48b6a996c0496310fd6294)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/AdminController.java	(revision 586ed141976a2be6a947e280028c6665a513b3f8)
@@ -1,4 +1,5 @@
 package mk.ukim.finki.it.reservengo.web.controller;
 
+import jakarta.mail.MessagingException;
 import mk.ukim.finki.it.reservengo.dto.adminDTO.DisplayAdminLocalsDTO;
 import mk.ukim.finki.it.reservengo.dto.localDTO.CreateLocalDTO;
@@ -67,5 +68,5 @@
 
     @PostMapping("/invite-manager")
-    public ResponseEntity<Void> inviteManager(@RequestBody EditUserEmailDTO emailDTO) {
+    public ResponseEntity<Void> inviteManager(@RequestBody EditUserEmailDTO emailDTO) throws MessagingException {
         adminService.inviteManager(emailDTO);
         return new ResponseEntity<>(HttpStatus.OK);
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/AuthController.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/AuthController.java	(revision 4185157c516ed5a33d48b6a996c0496310fd6294)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/AuthController.java	(revision 586ed141976a2be6a947e280028c6665a513b3f8)
@@ -1,7 +1,9 @@
 package mk.ukim.finki.it.reservengo.web.controller;
 
+import jakarta.mail.MessagingException;
 import mk.ukim.finki.it.reservengo.dto.jwtDTO.JWTAuthenticationRequestDTO;
 import mk.ukim.finki.it.reservengo.dto.jwtDTO.JWTAuthenticationResponseDTO;
 import mk.ukim.finki.it.reservengo.dto.jwtDTO.JWTLoginDTO;
+import mk.ukim.finki.it.reservengo.dto.jwtDTO.VerificationDTO;
 import mk.ukim.finki.it.reservengo.service.intf.AuthService;
 import org.springframework.http.HttpStatus;
@@ -19,5 +21,5 @@
 
     @PostMapping(value = "/register/customer")
-    public ResponseEntity<JWTAuthenticationResponseDTO> registerCustomer(@RequestBody JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO) {
+    public ResponseEntity<JWTAuthenticationResponseDTO> registerCustomer(@RequestBody JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO) throws MessagingException {
         return new ResponseEntity<>(authenticationService.registerCustomer(jwtAuthenticationRequestDTO), HttpStatus.CREATED);
     }
@@ -36,5 +38,5 @@
 
     @PostMapping("/login")
-    public ResponseEntity<JWTAuthenticationResponseDTO> login(@RequestBody JWTLoginDTO jwtLoginDTO) {
+    public ResponseEntity<JWTAuthenticationResponseDTO> login(@RequestBody JWTLoginDTO jwtLoginDTO) throws MessagingException {
         return new ResponseEntity<>(authenticationService.login(jwtLoginDTO), HttpStatus.OK);
     }
@@ -50,3 +52,15 @@
         return new ResponseEntity<>(HttpStatus.OK);
     }
+
+    @PatchMapping("/verify")
+    public ResponseEntity<Void> verifyAccount(@RequestBody VerificationDTO verificationDTO) throws MessagingException {
+        authenticationService.verifyCustomer(verificationDTO.email(), verificationDTO.verificationCode());
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+
+    @PostMapping("/resend-verification")
+    public ResponseEntity<Void> resendVerificationCode(@RequestBody VerificationDTO verificationDTO) throws MessagingException {
+        authenticationService.resendVerificationCode(verificationDTO.email());
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/LocalManagerController.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/LocalManagerController.java	(revision 4185157c516ed5a33d48b6a996c0496310fd6294)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/LocalManagerController.java	(revision 586ed141976a2be6a947e280028c6665a513b3f8)
@@ -1,4 +1,5 @@
 package mk.ukim.finki.it.reservengo.web.controller;
 
+import jakarta.mail.MessagingException;
 import mk.ukim.finki.it.reservengo.dto.eventDTO.CreateEventDTO;
 import mk.ukim.finki.it.reservengo.dto.eventDTO.DisplayEventDTO;
@@ -120,5 +121,5 @@
 
     @PostMapping("/invite-worker")
-    public ResponseEntity<Void> inviteWorker(@AuthenticationPrincipal User user, @RequestBody EditUserEmailDTO emailDTO) {
+    public ResponseEntity<Void> inviteWorker(@AuthenticationPrincipal User user, @RequestBody EditUserEmailDTO emailDTO) throws MessagingException {
         localManagerService.inviteWorker(user.getId(), emailDTO);
         return new ResponseEntity<>(HttpStatus.OK);
Index: ReserveNGo-backend/src/main/resources/application-dev.properties
===================================================================
--- ReserveNGo-backend/src/main/resources/application-dev.properties	(revision 4185157c516ed5a33d48b6a996c0496310fd6294)
+++ ReserveNGo-backend/src/main/resources/application-dev.properties	(revision 586ed141976a2be6a947e280028c6665a513b3f8)
@@ -7,2 +7,11 @@
 spring.h2.console.enabled=true
 spring.h2.console.path=/h2
+
+spring.mail.host=smtp.gmail.com
+spring.mail.port=587
+spring.mail.username=reservengo2025@gmail.com
+spring.mail.password=nwix jxkk xzej yfmr
+spring.mail.properties.mail.transport.protocol=smtp
+spring.mail.properties.mail.smtp.auth=true
+spring.mail.properties.mail.smtp.starttls.enable=true
+spring.mail.properties.mail.debug=true
Index: ReserveNGo-backend/src/main/resources/application-prod.properties
===================================================================
--- ReserveNGo-backend/src/main/resources/application-prod.properties	(revision 4185157c516ed5a33d48b6a996c0496310fd6294)
+++ ReserveNGo-backend/src/main/resources/application-prod.properties	(revision 586ed141976a2be6a947e280028c6665a513b3f8)
@@ -6,2 +6,10 @@
 spring.jpa.hibernate.ddl-auto=create-drop
 spring.jpa.show-sql=true
+
+spring.mail.host=${MAIL_HOST}
+spring.mail.port=587
+spring.mail.username=${MAIL_USERNAME}
+spring.mail.password=${MAIL_PASSWORD}
+spring.mail.properties.mail.transport.protocol=smtp
+spring.mail.properties.mail.smtp.auth=true
+spring.mail.properties.mail.smtp.starttls.enable=true
Index: ReserveNGo-backend/src/main/resources/application.properties
===================================================================
--- ReserveNGo-backend/src/main/resources/application.properties	(revision 4185157c516ed5a33d48b6a996c0496310fd6294)
+++ ReserveNGo-backend/src/main/resources/application.properties	(revision 586ed141976a2be6a947e280028c6665a513b3f8)
@@ -2,13 +2,7 @@
 server.port=8080
 spring.profiles.active=dev
-# use prod for postgre
 
 spring.servlet.multipart.max-file-size=10MB
 spring.servlet.multipart.max-request-size=20MB
 
-spring.mail.host=${MAIL_HOST:smtp.gmail.com}
-spring.mail.port=587
-spring.mail.username=${MAIL_USERNAME:reservengo2025@gmail.com}
-spring.mail.password=${MAIL_PASSWORD:nwix jxkk xzej yfmr}
-spring.mail.properties.mail.smtp.auth=true
-spring.mail.properties.mail.smtp.starttls.enable=true
+frontend.url=http://localhost:5173
