<section>
<div class="container">
<div class="row justify-content-center">
<div class="col-md-9 col-lg-8 col-xl-6">
<div class="text-center mb-4">
<h2 class="h1">궁금하신 사항을 남겨주세요.</h2>
<p class="lead">아래 양식을 채워 메일을 보내주시면 확인 후 답변드리겠습니다.</p>
</div>
<form @submit.prevent="sendEmail" novalidate>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>제목 *</label>
<input name="contact-title" type="text" class="form-control" v-model="formData.title" required>
<div class="invalid-feedback">
제목을 입력해주세요.
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>이름 *</label>
<input name="contact-name" type="text" class="form-control" v-model="formData.name" required>
<div class="invalid-feedback">
이름을 입력해주세요.
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>이메일 *</label>
<input name="contact-email" type="email" placeholder="you@yoursite.com" class="form-control" v-model="formData.email" required>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>회사명(학교명)</label>
<input name="contact-company" type="text" class="form-control" v-model="formData.company">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>연락처</label>
<input name="contact-phone" type="tel" class="form-control" v-model="formData.phone">
</div>
</div>
<div class="col-12">
<div class="form-group">
<label>문의사항:</label>
<textarea class="form-control" name="contact-message" rows="10" placeholder="어떤 점이 궁금하신가요?" v-model="formData.message"></textarea>
</div>
</div>
<div class="col-12">
<div data-recaptcha data-sitekey="INSERT_YOUR_RECAPTCHA_V2_SITEKEY_HERE"></div>
</div>
<div class="col">
<div class="d-none alert alert-success" role="alert" data-success-message>
확인 후 답변드리도록 하겠습니다. 감사합니다.
</div>
<div class="d-none alert alert-danger" role="alert" data-error-message>
빈 칸을 채워주세요.
</div>
<button type="submit" class="btn btn-primary btn-loading" data-loading-text="Sending">
<img class="icon" src="assets/img/icons/theme/code/loading.svg" alt="loading icon" data-inject-svg />
<span>Send Enquiry</span>
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</section>
methods: {
sendEmail() {
const emailData = {
email: this.formData.email,
subject: this.formData.title,
text: this.formData.message
};
console.log(this.formData.title)
// 폼 데이터를 서버로 전송
axios.post("/send/mail", emailData)
.then(response => {
console.log('이메일 전송 성공:', response.data);
// 성공 메시지를 사용자에게 표시하거나 다른 동작 수행
document.querySelector('[data-success-message]').classList.remove('d-none');
})
.catch(error => {
console.error('이메일 전송 실패:', error);
// 에러 메시지를 사용자에게 표시하거나 다른 동작 수행
document.querySelector('[data-error-message]').classList.remove('d-none');
});
}
}
export default {
data() {
return {
formData: {
title: '',
name: '',
email: '',
company: '',
phone: '',
message: ''
}
};
},
application.properties
spring.mail.host=smtp.hiworks.com
spring.mail.port=465
spring.mail.username=
spring.mail.password=
spring.mail.properties.debug=true
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.ssl.enable= true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.ssl.trust=smtp.hiworks.com
MailUtil.java
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
@Component
public class MailUtil {
private final JavaMailSender mailSender;
@Autowired
public MailUtil(JavaMailSender mailSender) {
this.mailSender = mailSender;
}
public boolean sendMail(String to, String subject, String text) {
try {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
helper.setTo("받는메일");
helper.setSubject(subject);
helper.setText(text, true);
helper.setFrom("보내는 메일");
mailSender.send(message);
} catch (MessagingException e) {
e.printStackTrace();
return false;
}
return true;
}
}
build.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-mail'
//jakarta.mail
implementation group: 'com.sun.mail', name: 'jakarta.mail', version: '2.0.1'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '2.6.3'
}
UserService.java
package kr.jaen.service;
import kr.jaen.util.MailUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
//import kr.jaen.util.MailUtil;
@Service
public class UserService {
private final MailUtil mailUtil;
@Autowired
public UserService(MailUtil mailUtil) {
this.mailUtil = mailUtil;
}
public Map<String, Object> sendMail(Map<String, String> params) throws Exception {
Map<String, Object> result = new HashMap<>();
result.put("data", new HashMap<>());
String email = params.get("email");
String subject = params.get("subject");
String text = params.get("text");
// to 받는사람메일 subject 제목 text 내용
if (mailUtil.sendMail(email, subject, text)) {
result.put("code", 200);
result.put("message", "success");
} else {
result.put("code", 500);
result.put("message", "fail");
}
return result;
}
}
BasicController.java
@RestController
public class BasicController {
private final UserService userService;
@PostMapping("/send/mail")
public Map<String, Object> sendMail(@RequestBody Map<String, String> params) throws Exception {
System.out.println("/send/mail"+params);
return userService.sendMail(params);
}
}
반응형
'프로젝트 하면서 > 홈페이지 만들기' 카테고리의 다른 글
vue프로젝트 배포 후 새로고침 404에러 (0) | 2024.06.20 |
---|---|
vue 페이지 이동 시 스크롤 상단으로 이 (0) | 2024.06.20 |
Springboot 도커로 배포하기 (0) | 2024.04.24 |
drop down 드롭 다운 선택하기 (0) | 2024.04.18 |
domain/dto/repository/service/controller (0) | 2024.04.12 |
댓글