본문 바로가기
Web & Mobile/MySQL

Lecture 39 - MySQL(2) 자바로 메일 보내기, Maven

by Bennyziio 2023. 6. 20.
반응형

자바에서 이메일을 보내는 방법

MailSenderEx

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class MailSenderEx {
	private String fromEmail = "구글 계정";
	private String password = "구글 계정 비밀번호";
	
	public static void main(String[] args) {
		// 받을 사람 이메일 주소
		String toEmail = "받는 사람 이메일 주소";
		String toName = "받는 사람 이름";
		String subject = "Java 테스트";
		String content = "Java 테스트 내용";

        MailSenderEx mailSenderEx = new MailSenderEx();
		mailSenderEx.sendMail(toEmail, toName, subject, content);
	}

	public void sendMail(
			String toEmail, String toName, 
			String subject, String content) {
		
			try {
				Properties props = new Properties();
				
				props.put("mail.smtp.starttls.enable", "true");
				props.put("mail.transport.protocol", "smtp");
				props.put("mail.smtp.host", "smtp.gmail.com");
				props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
				props.put("mail.smtp.port", "465");
				props.put("mail.smtp.auth", "true");
				
				// 인증 환경
				MyAuth auth = new MyAuth(fromEmail, password);
				Session sess = Session.getDefaultInstance(props, auth);
				
				// 내용구성
				MimeMessage msg = new MimeMessage(sess);
				msg.setHeader("Content-Type", "text/plain;charset=utf-8");
				msg.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmail, toName, "utf-8"));
				msg.setSubject(subject);
				msg.setContent(content, "text/plain;chahrset=utf-8");
				msg.setSentDate(new Date());
				
				Transport.send(msg);
				
				System.out.println("메일전송이 완료되었습니다");
				
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			} catch (MessagingException e) {
				e.printStackTrace();
			}
	}
}

MyAuth

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

// Mail 서버에서 사용 인증
public class MyAuth extends Authenticator {
	private String fromMail;
	private String password;
	
	public MyAuth(String fromMail, String password) {
		this.fromMail = fromMail;
		this.password = password;
	}

	@Override
	protected PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(fromMail, password);
	}
}

html 태그로 메일 보내는 법(폼 메일 형식)

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class MailSenderEx {
	private String fromEmail = "구글 계정";
	private String password = "구글 계정 비밀번호";
	
	public static void main(String[] args) {
		// 받을 사람 이메일 주소
		String toEmail = "bapjoo2@daum.net";
		String toName = "박지호";
		String subject = "Java 테스트";
		//String content = "Java 테스트 내용";
		StringBuffer content = new StringBuffer();
		content.append("<html>");
		content.append("<head>");
		content.append("<meta charset='utf-8'>");
		content.append("</head>");
		content.append("<body>");
		content.append("<font color='red'>빠 빠 빨간맛?</font>");
		content.append("</body>");
		content.append("</html>");
		
		MailSenderEx mailSenderEx = new MailSenderEx();
		mailSenderEx.sendMail(toEmail, toName, subject, content.toString());
	}

	public void sendMail(
			String toEmail, String toName, 
			String subject, String content) {
		
			try {
				Properties props = new Properties();	
				
				props.put("mail.smtp.starttls.enable", "true");
				props.put("mail.transport.protocol", "smtp");
				props.put("mail.smtp.host", "smtp.gmail.com");
				props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
				props.put("mail.smtp.port", "465");
				props.put("mail.smtp.auth", "true");
				
				// 인증 환경
				MyAuth auth = new MyAuth(fromEmail, password);
				Session sess = Session.getDefaultInstance(props, auth);
				
				// 내용구성
				MimeMessage msg = new MimeMessage(sess);
				//msg.setHeader("Content-Type", "text/plain;charset=utf-8");
				msg.setHeader("Content-Type", "text/html;charset=utf-8");
				msg.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmail, toName, "utf-8"));
				msg.setSubject(subject);
				//msg.setContent(content, "text/plain;charset=utf-8");
				msg.setContent(content, "text/html;charset=utf-8");
				msg.setSentDate(new Date());
				
				Transport.send(msg);
				
				System.out.println("메일전송이 완료되었습니다");
				
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			} catch (MessagingException e) {
				e.printStackTrace();
			}
	}
}

이미지를 첨부해서 보내 보기

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class MailSenderEx {
	private String fromEmail = "구글 계정";
	private String password = "구글 계정 비밀번호";
	
	public static void main(String[] args) {
		// 받을 사람 이메일 주소
		String toEmail = "bapjoo2@daum.net";
		String toName = "박지호";
		String subject = "Java 테스트";
		//String content = "Java 테스트 내용";
		StringBuffer content = new StringBuffer();
		content.append("<html>");
		content.append("<head>");
		content.append("<meta charset='utf-8'>");
		content.append("</head>");
		content.append("<body>");
		content.append("<img src='https://t1.daumcdn.net/b2/creative/52749/e95fda1beb2466e55a62779a2d50c1a9.png' />");
		content.append("<font color='red'>빠 빠 빨간맛?</font>");
		content.append("</body>");
		content.append("</html>");
		
		MailSenderEx mailSenderEx = new MailSenderEx();
		mailSenderEx.sendMail(toEmail, toName, subject, content.toString());
	}

	public void sendMail(
			String toEmail, String toName, 
			String subject, String content) {
		
			try {
				Properties props = new Properties();	
				
				props.put("mail.smtp.starttls.enable", "true");
				props.put("mail.transport.protocol", "smtp");
				props.put("mail.smtp.host", "smtp.gmail.com");
				props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
				props.put("mail.smtp.port", "465");
				props.put("mail.smtp.auth", "true");
				
				// 인증 환경
				MyAuth auth = new MyAuth(fromEmail, password);
				Session sess = Session.getDefaultInstance(props, auth);
				
				// 내용구성
				MimeMessage msg = new MimeMessage(sess);
				//msg.setHeader("Content-Type", "text/plain;charset=utf-8");
				msg.setHeader("Content-Type", "text/html;charset=utf-8");
				msg.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmail, toName, "utf-8"));
				msg.setSubject(subject);
				//msg.setContent(content, "text/plain;charset=utf-8");
				msg.setContent(content, "text/html;charset=utf-8");
				msg.setSentDate(new Date());
				
				Transport.send(msg);
				
				System.out.println("메일전송이 완료되었습니다");
				
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			} catch (MessagingException e) {
				e.printStackTrace();
			}
	}
}

차트 만드는 데 도움이 되는 사이트

http://www.jfree.org/jfreechart/

프로젝트 관리 툴

https://monny.tistory.com/129

Java기반 프로젝트의 *라이프사이클 관리를 목적으로 하는 빌드 도구이다. 컴파일과 빌드를 동시에 수행, 테스트를 병행하거나 서버 측 Deploy 자원을 관리할 수 있는 환경을 제공한다. 또한 라이브러리 관리 기능도 내포하고 있다. Java로 개발하다 보면 다양한 라이브러리를 필요로 하게 되는데, *pom.xml 파일에 필요한 라이브러리만 적으면 Maven이 알아서 다운받고 설치해주고 경로까지 지정해준다.


프로젝트를 진행하다 보면 라이브러리들을 많이 활용하게 됩니다. 점점 많아지는 라이브러리들을 일일히 관리하기 힘들어집니다. 하지만 Maven을 이용하게 된다면 코드 몇줄로 필요한 라이브러리를 작동시키고 그 라이브러리가 필요로 하는 다른 라이브러리(의존 라이브러리)들까지 자동으로 관리해줍니다. 



* Life cycle      : 논리적인 작업 흐름
* pom.xml       : Project Object Model, 메이븐이 프로젝트를 처리하는 필요한 정보를 제공하는 파일
* Artifact         : 프로젝트에 필요한 jar, war, pom 등등
* Deploy         : 아티페그를 로컬 저장소에 저장하는 행위

Maven Project 생성 법 - Maven으로 제작해 놓으면 library등 지정해 둔것을 다른데 가서 인터넷이 연결되어 있다면 자동으로 추가가 된다.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.exam</groupId>
  <artifactId>hellomaven</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  
  <repositories>
  	<repository>
  		<id>codelds</id>
  		<url>http://repo.spring.io/plugins-release/</url>
  	</repository>
  </repositories>

  <name>hellomaven</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/com.oracle/ojdbc6 -->
    <dependency>
      <groupId>com.oracle</groupId>
      <artifactId>ojdbc6</artifactId>
      <version>11.2.0.3</version>
	</dependency>
  </dependencies>
  
</project>

Mini Project - CUI를 이용한 미니 프로젝트

 

 

 

D B 서 버 MYSQL User ID  ROOT
테이블 명  PERSON 작 성 일 자  
테이블 타입   테이블공간명  
테이블설명 인맥을 조회, 등록, 수정, 삭제한다
CREATE TABLE person (
 person_no smallint(5) unsigned NOT NULL auto_increment,
 pname varchar(13) NOT NULL,
 group_no varchar(13) NOT NULL,
 email_addr varchar(40) NOT NULL,
 phone_no varchar(20) NOT NULL,
 primary key(person_no)
);
컬럼 명 컴럼 ID TYPE & LENGTH NOT NULL PK FK 인덱스 비고
순서 PERSON_NO SMALLINT(5) YES YES NO    
이름 PNAME VARCHAR(13) YES NO NO    
그룹 GROUP VARCHAR(13) YES NO NO    
이메일 EMAIL_ADDR VARCHAR(40) YES NO NO    
핸드폰번호 PHONE_NO VARCHAR(20) YES NO NO    
               
               
               
D B 서 버 MYSQL User ID  ROOT
테이블 명  EVENT 작 성 일 자  
테이블 타입   테이블공간명  
테이블설명 경조사비 조회, 등록, 수정, 삭제한다.
CREATE TABLE event (
event_name varchar(10) NOT NULL,
pname varchar(13) NOT NULL,
event_cost int NOT NULL,
event_date date NOT NULL,
event_addr varchar(120) NOT NULL
);
컬럼 명 컬럼 ID TYPE & LENGTH NOT NULL PK FK 인덱스 비고
구분 EVENT_NAME VARCHAR(10) YES NO NO    
이름 PNAME VARCHAR(13) YES NO NO    
경조사비 EVENT_COST INT YES NO NO    
날짜 EVENT_DATE DATE YES NO NO    
주소 EVENT_ADDR VARCHAR(120) YES NO NO    
D B 서 버 MYSQL User ID  ROOT
테이블 명  address 작 성 일 자  
테이블 타입   테이블공간명  
테이블설명 주소데이터이다
CREATE TABLE address (
zipcode varchar(20) NOT NULL,
sido varchar(20) NOT NULL,
gugun varchar(20) NOT NULL,
dong varchar(20),
ri varchar(20),
bunji varchar(20),
primary key(bunji)
);
컬럼 명 컴럼 ID TYPE & LENGTH NOT NULL PK FK 인덱스 비고
우편번호 ZIPCODE VARCHAR(20) YES NO NO    
시도 SIDO VARCHAR(20) YES NO NO    
구군 GUGUN VARCHAR(20) YES NO NO    
DONG VARCHAR(20) NO NO NO    
RI VARCHAR(20) NO NO NO    
번지 BUNJI VARCHAR(20) YES YES NO    
               
               
               
               

 
 
 
 

반응형

'Web & Mobile > MySQL' 카테고리의 다른 글

Lecture 38 - MySQL(1) 기초, Java에서 MySQL 활용법  (0) 2023.06.20
MySQL Windows 7 설치법  (0) 2023.06.20

댓글