| 문한결 | 조성준 | 채승현 | 김선웅 | 김민재 | 김민우 |
|---|---|---|---|---|---|
- |
|||||
| Team Leader Gmail Backend |
Gmail Backend | NaverMail Backend | NaverMail Backend | JavaFX Frontend | JavaFX Frontend |
이 시스템은 사용자가 이메일을 보내고, 메일함을 열어 상위 메일을 확인할 수 있게 합니다. Google이나 Naver 플랫폼을 통해 SMTP와 IMAP을 사용하여 통합된 이메일 기능을 제공합니다.
Application layer의 Socket을 이용해 프로그래밍하며, SMTP와 IMAP의 규격을 이해하고, TLS와 SSL의 의미에 대해 학습합니다.
- 사용자는 메일을 보낼지, 메일함을 열지를 선택합니다.
- 이메일을 보내고 싶은 플랫폼 (Google 혹은 Naver)을 선택합니다.
- 사용자가 아이디와 비밀번호를 입력합니다.
- Google의 경우 앱 비밀번호를 이용해야 합니다.
- 메일 발송 흐름
- 📨 사용자가 받는 사람의 이메일 주소를 입력합니다.
- 📝 이메일 내용을 작성하고 발송합니다.
- 메일함 열기 흐름
- 📑 메일함을 열면 상위 10개의 메일을 확인할 수 있습니다.
- 현재는 상위 10개의 메일만 보여주지만, 사용자가 원하는 조건에 맞는 메일을 검색하거나 필터링하는 기능을 추가하면 더 유용할 것입니다.
화면은 JavaFX를 통해 구성되어 있습니다.
- 로그인 후 메일함의 제목, 보낸 사람, 날짜를 최근 10개 확인 가능
- 검색 기능을 통해 원하는 메일 검색 가능
.
└── webSocket
├── src
│ ├── main
│ │ ├── java
│ │ │ └── computerNetwork
│ │ │ └── webSocket
│ │ │ ├── gmail
│ │ │ │ ├── GmailFetcher.java
│ │ │ │ └── GmailSender.java
│ │ │ └── dto
│ │ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── computerNetwork
│ └── webSocket
GmailFetcher fetcher = new GmailFetcher();
List<FetchingInformation> emails = fetcher.fetch("your-email@gmail.com", "your-app-password");
for (FetchingInformation email : emails) {
System.out.println("From: " + email.getFrom());
System.out.println("Date: " + email.getDate());
System.out.println("Subject: " + email.getSubject());
}GmailSender sender = new GmailSender();
boolean isSent = sender.sendEmail("your-email@gmail.com", "your-app-password", "recipient@example.com", "Test Subject", "This is a test email.");
if (isSent) {
System.out.println("이메일 전송 성공!");
} else {
System.out.println("이메일 전송 실패!");
}private void sendCommand(String command) throws IOException {
outToServer.writeBytes(command + "\r\n");
System.out.println("Sent: " + command);
}
private void parseAndDisplayEmails(String response) {
String[] entries = response.split("\\* \\d+ FETCH");
for (String entry : entries) {
if (entry.trim().isEmpty()) continue;
String from = extractHeaderValue(entry, "From: ");
String subject = extractHeaderValue(entry, "Subject: ");
String date = extractHeaderValue(entry, "Date: ");
System.out.printf("From: %s\nSubject: %s\nDate: %s\n", from, subject, date);
}
}
private String extractHeaderValue(String entry, String headerName) {
int startIndex = entry.indexOf(headerName);
if (startIndex == -1) return "";
int endIndex = entry.indexOf("\n", startIndex);
if (endIndex == -1) endIndex = entry.length();
return entry.substring(startIndex + headerName.length(), endIndex).trim();
}- 문제: 올바른 이메일과 비밀번호를 입력했지만 로그인 실패.
- 해결 방법: Gmail의 경우 일반 비밀번호 대신 앱 비밀번호를 사용해야 하며, IMAP 설정이 Gmail 계정에서 활성화되어 있는지 확인.
- 문제: IMAP으로 메일을 수신할 때 한글이 깨지는 문제가 발생.
- 해결 방법:
InputStreamReader에서StandardCharsets.UTF_8을 사용하여 인코딩 문제 해결.
- 문제: 메일 전송 시 서버 연결 타임아웃 발생.
- 해결 방법: SMTP 포트(587)와 TLS 설정이 올바르게 적용되었는지 확인하고, 방화벽 설정에서 해당 포트가 차단되지 않았는지 확인.
- SMTP: 이메일 발송을 위한 프로토콜.
- IMAP: 메일함을 관리하고 메일을 가져오는 프로토콜.
- WebSocket: 실시간 통신을 위한 프로토콜.
- JavaFX: UI 구성을 위한 Java 기반 프레임워크.
이 프로젝트는 SMTP, IMAP, 그리고 WebSocket을 활용한 이메일 통합 시스템입니다.




