This project aims to implement the basic functionalities of a mail server, including the manipulation of emails, attachments, and contacts. The server provides a web user interface for easy access and management of emails. It was developed using Java Spring Boot for the server-side and Vue.js for the client-side. for full report: Report.pdf
- Inbox Folder: Displays emails from newest to oldest by default.
- Composing and Drafts: Users can compose new emails and send them to any number of receivers or save them as draft.
- User Folders: Users can create, rename, and delete their own folders.
- Filters: Emails can be filtered based on different criteria
- Attachments: Users can add, delete, and view attachments in emails.
- sorting: emails in any folder can be sorted based on date or priority in ascending or descending order
- Bulk Operations: Users can perform bulk operations on selected emails (move, delete)
- Clone the repository
- Open the server-side project in Java Spring Boot IDE.
- Build and run the server-side application.
- Open the client-side project in a Vue.js IDE.
- Install dependencies: npm install
- Start the client-side application: npm run serve
- Access the application in your browser at http://localhost:8080
-
Facade pattern:
- The Façade pattern was used to simplify access to the set of objects related to email handling (such as UserService, DraftService, AttachmentService). The MailSenderFacade provides a simplified interface for clients to communicate with these objects, hiding the complexity of the underlying subsystem components.
-
Filter Pattern:
- The Filter pattern was used to implement the ability to filter mails based on different criteria. The Filter interface defines a common method for filtering mails, and concrete filter classes (e.g., SenderFilter, ReceiverFilter) implement this interface to provide specific filtering logic. Multiple filters can be chained together to create complex filtering conditions.
-
Builder Pattern:
- The Builder pattern was employed to construct complex Mail objects step by step. The MailBuilder class provides a fluent interface to set different attributes of the Mail object, allowing for selective modification of specific attributes. This pattern is particularly useful when dealing with objects that have a large number of optional parameters or configuration settings.
-
Chain of Responsibility Pattern:
- The Chain of Responsibility pattern was used to process authentication-related requests. The base Handler class defines a common interface for concrete handlers, and each handler in the chain decides whether to process the request or pass it to the next handler in the chain. This pattern provides a flexible and modular way to handle authentication requests.
-
Singlton Pattern