본문 바로가기


프로젝트 하면서/홈페이지 만들기

하이웍스 메일보내기

by worldforest 2024. 5. 31.

 

<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);
        }
    }

 

반응형

댓글