웹페이지 크기를 모바일 장치에 맞게 자동 조절하기


<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, target-densitydpi=medium-dpi" />

  • user-scalable=no : 사용자의 확대보기 허용 여부(no/yes)
  • initial-scale=1.0 : 페이지 로딩 시 확대비율
  • maximum-scale=1.0 : 최대 확대 비율
  • minimum-scale=1.0 : 최소 축소 비율
  • width=device-width : 플랫폼 가로 크기에 맞춤, 수치를 넣으면 그 수치에 맞게 맞춰짐.
  • target-densitydpi=medium-dpi : dpi([dots per inch])를 맞춤. 일반적으로 medium-dpi로 하는게 좋음. (device-dpi/low-dpi/medium-dpi/high-dpi)

Ajax를 쓰다보면 로딩을 뿌려줄때가 많다.

로딩에도 여러가지가 있는것같다.

1. 로딩될 자리에 "로딩중..." 이라는 글자나 뺑글 뺑글 돌아가는 이미지가 바로 뜨는 방법
2. 페이지 젤 하단이나 상단에 "로딩중.. " "저장중.." 이라는 글자가 뜨는 방법 (테터툴즈가 이렇지..아마..)
3. 화면 중간에 새창? (사실은 레이어인데 그냥 새창이라고 하겠음) 이 떠서 로딩중 글자 뿌려주는 방법 (나의 주거래 은행 하나 은행에서 이번에 리빌드 하면서 이방법을 쓰더라.. )

기타등등..

머.. 상황에 맞게 이렇게 저렇게 쓰면 될것같다.
어떻게 보면 되게 간단하지만 나의 단기 기억상실을 보완하기 위해 여기에 소스와 사용법을 뿌려놓습니다. =,.=a

prototype 을 기본적으로 사용함을 미리 밝혀 둡니다.

<style>
#ajaxBox{
border:3px solid #000000;
width:300px;
height:50px;
position:absolute;
background-color:#ffffff;
text-align:center;
font-weight:bold;
padding:20px 0px 0px 0px;
color:#FF6600;

}
</style>

<div id="ajaxBox"><div id="ajaxBoxMent">잠시만 기다려주세요..</div><img src="/images/ajax-loader.gif"></div>
<script>
function showAjaxBox(ment){

//항상 화면 중앙에 나타나도록...
var yp=document.body.scrollTop;
var xp=document.body.scrollLeft;

var ws=document.body.clientWidth;
var hs=document.body.clientHeight;

if(!ment) ment="잠시만 기다려주세요..";

var ajaxBox=$('ajaxBox');
$('ajaxBoxMent').innerHTML=ment;

ajaxBox.style.top=yp+eval(hs)/2-100;
ajaxBox.style.left=xp+eval(ws)/2-100;

Element.show(ajaxBox);
}
</script>
이것이 소스답니다. 별거도 없는데.. 강좌랍시고 -_-;;;;

사용법은 아래와 같습니다.

function test(){

showAjaxBox();//로딩 박스 보인후에...

var url="Ajax.php";
var myAjax=new Ajax.Request(
url,
{
asynchronous:true,
parameters:pars,
onComplete:function(res){

Element.hide('ajaxBox');// 다 처리한후.. 박스를 숨김..

}
}
);
}

아 그리고 페이지 맨 아래쪽에 이거 넣어주시구요~
상자가 처음에는 안보이게 합니다.

<script>
Element.hide('ajaxBox');
</script>

프리마커는 자바 서블릿을 위한 오픈소스 HTML 템플릿 엔진이다.
프리마커에서는 HTML을 템플릿으로 저장하고 이러한 템플릿 객체들은 서블릿에서 제공하는 데이터들을 이용하여 HTML을 동적으로 생성한다.
이클립스에서 velocity 를 사용해 매칭을 하는 것과 같은 기능을 위해 사용하려고 한다.
사용자 삽입 이미지
다운로드:

http://freemarker.sourceforge.net/freemarkerdownload.html


설치:
freemarker-2.3lib안의 .jar 파일을 톰캣[lib]안에 넣는다.
ecilpse에서는 프로젝트 마다 lib안에 import 시킨다.

************************************************************************************
만약 이클립스에 MavenRepoSearch 가 있다면 바로 freemarker 를 찾아서
pom파일에 dependency 를 걸어도 된다.
http://static.springframework.org/spring/docs/2.0.x/reference/view.html
에서 bean 설정 하는 것 을 servlet 파일에 넣기

문법:
http://freemarker.sourceforge.net/docs/index.html 참조

FTL tag
< # >
주석
< #--주석달기-->
반복문
1. <#list [Object code에서 key값] as [별칭할 값]>
2. for(int i=0;i<10;i++)
< #list 1..10 as i>
${i}
<#assign i=i+1?int>
3.
사이즈를 알고 싶을때.. Key 값이 list 인 경우
<#assign size=list?size>
4. 다른 변수로 정의하고 싶을때에는
<#setting [새로]=[기존]>

5.변수선언
<#assign x=0> <#--x 에 0 을 할당해 준 것이다.-->
<#-- x 값을 출력하려면 -->
${x}

6. <#macro green>
"<@green>" 이런식으로 쓴다. 주로 변하지 않는 변수를 이렇게 선언

7. 조건문
< #if>
8. int형으로 선언해 주고 싶은때에는
<#assign x=0 ? int>

9. date 형
${date?date} <--날짜만 얻고 싶을때.
${date?time} <--시간만 얻고싶을때.
${date?datetime} <-- 전체데이터를 얻고 싶을때

데이터 흐름을 알기위한 가장 중요한 부분은 html 파일을 만들고 PHP,JSP,ASP 별로 어떻게 전달이 되는 것인지를 확인 하는 것입니다.

데이터 흐름을 알기 위해서는 서버를 축을 해야 합니다.

● PHP,JSP,ASP를 구축을 한 상태에서 해보겠습니다.

@ 웹 프로그래밍@
HTML는 여는 태그 '<' 와 닫는 태그 '>' 로 이루어진 고밀도 문자 마크업언어 이며, 아래는 HTML의 기본 구조입니다.

<html>
<head>
< title> 브라우저 상단에 글을 나타내는곳 입니다. </title>
< scrpit></acrpit>
< link></link>
</head>
< body>

접속자에게 보여줄 내용을 이곳에 적습니다.

</body>
< /html>

** 데이터 전송 =Query 전송, 파라메터 전송
1. 전달대상 : action 속성.
2. 전달 방법 : HTTP 프로토콜의 method
GET - 주소창에 데이터 = 값 &데이터 = 값,
POST - 헤더 body에 묻어서 전달.
- 보안적인 요소

< body>
< form name="frmTest" action="write_ok.asp " method="post" >

<input type=" text" name="id" value="aaaa">
type="password"
type="radio"
type="hidden"
<select name=" ">
<option
</select>

<input type="submit" value="보내기">
<input type="reset" value="취소">
< /form>
< /body


기본적으로 html 파일은 특별히 언어들을 가리지 않습니다. 그렇기 때문에 html 파일을 만들 후

1. 기본적인 html 파일은 웹 언어의 특성을 가리지 않기 때문에, 기본적인 html 파일을 만든 후, 미리 구축한 PHP, JSP, ASP서버에 위치를 시킵니다.


html 파일을 frmtest.html 로 만들기로 하겠습니다.

php 용 frmtest.html 파일을 아래와 같이 cording을 합니다.


jsp 용 frmtest.html 파일을 아래와 같이 cording을 합니다.


마지막으로 asp 용 frmtest.html 파일을 아래와 같이 cording을 합니다.


위의 3가지 cording을 유심히 보면 다른것은 title 명과 body의 머릿말 그리고
ACTION 부분의 frmtest_ok.xxx 붉은 xxx 부분만이 각각의 서버에 위치하는 언어를 써주면 됩니다.

각각의 html 파일을 만들고 서버의 폴더에 넣어 줍니다.
PHP용 파일은 C:\APM_Setup\htdocs 폴더에 넣어 줍니다.
JSP용 파일은 C:\WebGoat-5.2\tomcat\webapps\ROOT 폴더에 넣어 줍니다.
마지막으로 ASP용 파일은 C:\Inetpub\wwwroot 폴더에 넣어 줍니다.
위의 3개의 파일이 폴더에 넣었다면, 인터넷 상에서 연결이 되는 지를 확인 해 봅니다.

인터넷 주소창에 각각 의 주소를 넣어 봅시다.
(주소를 넣을 때 주의 할점은 자신이 정한 주소를 넣어주는 것입니다.
PHP는 http;//서버 주소/frmtest.html 이며, 저의 주소는 192.168.102.111/frmtest.html 입니다.


JSP는 http;//서버 주소:tomcat설정포트/frmtest.html 이며,
저의 주소는 192.168.102.111:8080/frmtest.html 입니다.(tomcat 을 실행시켜 주세요)


마지막으로 ASP는 http;//서버 주소:IIS설정포트/frmtest.html 이며,
저의 주소는 192.168.102.111:8081/frmtest.html 입니다


위의 3개의 page 가 나온다면 정상적으로 파일과 파일의 위치가 정상적으로 만들어지고 위치를 한것입니다.

frmtest.html cording 에서 FORM테그의 ACTION 부분에 frmtest_ok.asp, frmtest_ok.jsp, frmtest_ok.php 를 각각 참조하도록 되어 하였으나 아직은 참조할 파일들이 없습니다.

아래의 내용은 frmtest_ok.php, frmtest_ok.jsp, frmtest_ok.asp 등을 만들어 보는 내용입니다.

php 용 frmtest_ok.php 파일을 아래와 같이 cording을 합니다.


jsp 용 frmtest_ok.jsp 파일을 아래와 같이 cording을 합니다.


asp 용 frmtest_ok.asp 파일을 아래와 같이 cording을 합니다.


각각의 파일들은 frmtest.html 에 위치한 폴더에 넣어 주면 됩니다.
PHP용 파일은 C:\APM_Setup\htdocs 폴더
JSP용 파일은 C:\WebGoat-5.2\tomcat\webapps\ROOT 폴더
마지막으로 ASP용 파일은 C:\Inetpub\wwwroot 폴더에 넣어 줍니다.

다시 한번 더 인터넷 주소창에 각각 의 주소를 넣어 봅시다.
(주소를 넣을 때 주의 할점은 자신이 정한 주소를 넣어주는 것입니다.)

PHP는 http;//서버 주소/frmtest.html 이며, 저의 주소는 192.168.102.111/frmtest.html 입니다.
그리고 아이디와 암호를 넣고 '보내라' 를 누릅니다.


JSP는 http;//서버 주소:tomcat설정포트/frmtest.html 이며,
저의 주소는 192.168.102.111:8080/frmtest.html 입니다.(tomcat 을 실행시켜 주세요)
그리고 아이디와 암호를 넣고 '보내라' 를 누릅니다.


마지막으로 ASP는 http;//서버 주소:IIS설정포트/frmtest.html 이며,
저의 주소는 192.168.102.111:8081/frmtest.html 입니다
그리고 아이디와 암호를 넣고 '보내라' 를 누릅니다.


위의 3 개의 page 가 나오면 정상적으로 설정이 된것입니다.

여기서 위 PHP를 수정을 해서 화면이 아닌 다른 화면이 나오도록 하는 방법을 해보겠습니다.

php 용 frmtest_ok.php 파일을 아래와 같이 cording을 하고, welcome.php파일로 저장을 합니다.
당연히 파일의 위치는 frmtest_ok.php와 같은 C:\APM_Setup\htdocs 폴더에 위치 합니다.


php 용 frmtest_ok.php 파일을 수정을 해야 합니다.


php 용 frmtest_ok.php 파일에서 미리 코딩을 한것에서 주석(#)을 제거 한것입니다.

인터넷 주소창에 http;//서버 주소/frmtest.html 을 넣고,( 저의 주소는 192.168.102.111/frmtest.html 입니다.) 그리고 아이디와 암호를 넣고 '보내라' 를 누릅니다.


위와 같이 welcome.php로 바뀐 화면이 뜨게 됩니다.

 

출처 : http://hoyatic.tistory.com/149

작성자 : 치세

1. Html 4.01

- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/losse.dtd">

이전 버전으로 제작된 HTML 문서와의 호환성을 위해

- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/strict.dtd">

정확한 표준모드를 사용하기위해

- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/frameset.dtd">

프레임 셋을 이용한 웹사이트를 만들때

2. XHTML 1.0

- <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

이전 버전으로 제작된 HTML 문서와의 호환성을 위해

- <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

정확한 표준모드를 사용하기위해

- <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-framset.dtd">

프레임 셋을 이용한 웹사이트를 만들때

3. 작업방향

- Doctype는 XHTML1.0을 기준으로 작업(transitional.dtd)

- <img>,<br>등 단독으로 사용하는 태그는 <img src="" />, <br/>닫아서 사용한다.

(안닫아도 실행 되지만 닫아야 옳은 형식으로 인식하는 방식이 있으므로)

MySQL를 성공적으로 설치 했다면 이제 간단한 사용법을 알아 보자

 

1. MySQL를 설치하면 처음 접속할 수 있는 계정을 최고 관리자인 ROOT이다. 이 루트에 접속하기 위해서는 다음과 같은

    명령어를 입력하면 된다.

 

   --> mysql -u root -p 

   --> 설치시 입력했던 비밀번호 입력(설치시 입력을 안했다면 비밀번호 설정을 찾아 수행 후 따라하세요)

 

 

2. ROOT권한을 성공적으로 접속하고 종료 하였다면 다음은 새로운 데이터베이스 공간을 생성하는 작업을 수행해야 한다.

    새로운 작업을 하기위한 공간을 만들어 보자

 

   --> mysqladmin -u root -p create zinleeDB(생성하고자하는 Database이름)

   --> 설치시 입력했던 디밀번호 입력

 

 

3. 데이터베이스 공간을 생성했다면 해당 공간에 유저를 생성해 보자.

   다음은 유저생성 시 모든 DBA권한과 로컬호스트에 접근할 수 있는 권한을 주며 계정을 생성하며 쿼리이다.

 

   --> mysql -u root -p (ROOT권한으로 접속)

   --> grant select, insert, update, delete, create, alter, drop on zinleeDB(생성한DB).* to 'admin(생성할계정)'@'localhost'  

         identified by 'adminpass(생성할계정의비밀번호)';

 

 

4. 유저에게 모든 서버에 접근할 수 있는 권한을 설정해 보자.

 

   --> mysql -u root -p (ROOT권한으로 접속)

   --> grant select, insert, update, delete, create, alter, drop on zinleeDB(생성한DB).* to 'admin(생성한계정)'@'%'

         identified by 'adminpass(생성한계정의비밀번호)';

 

 

5. 이제 계정생성이 완료되고 모든 권한을 주었다. 드디어 접속하여 사용하면 된다!

    생성한 계정에 접속하는 방법은 다음과 같다.

 

   --> mysql -u admin(생성한 계정) -p zinleeDB(생성한 계정의 Database)

   --> adminpass(생성한 계정의 비밀번호 입력)

 

   --> show databases;   (현재 접속한 계정의 데이터베이스 정보를 보여준다.)

   --> show tables;         (현재 접속한 계정에 생성된 테이블 정보를 보여준다.)

 

이상으로 간단한 MySQL사용법을 적어 보았다. 어렵지 않지만 자주 사용하지 않기 때문에 잊는 경우가 많다. 잊지말고 기억하자!

1. 사용자계정 생성

로컬 : mysql> CREATE USER 'user_name'@'localhost' IDENTIFIED BY 'user_password';
외부 : mysql> CREATE USER 'user_name'@'%' IDENTIFIED BY 'user_password';


2. 데이터베이스 생성

mysql> CREATE DATABASE database_name;


3. 데이터베이스에 대한 접근권한 설정

로컬 : mysql> GRANT ALL PRIVILEGES ON database_name.* TO 'user_name'@'localhost' WITH GRANT OPTION;
외부 : mysql> GRANT ALL PRIVILEGES ON database_name.* TO 'user_name'@'%' WITH GRANT OPTION;


4. 계정에 대한 권한설정 확인

mysql> SHOW GRANTS FOR 'user_name'@'localhost';


5. MySql 변경사항 적용(GRANT 이외의 명령어 실행시만 해당)

FLUSH PRIVILEGES;

 

출처 : http://blog.naver.com/hgi99?Redirect=Log&logNo=10129118245

http://dev.mysql.com/downloads/mysql/

에 가면 다운을 받을수 있다.

하지만 그 전에 간단한 회원가입을 해야한다..

귀찬게하네..

어쨋들 가입하면 다운이 가능하다.

자신의 컴퓨터에 맞춰 msi형식의 파일을 다운 난 32비트니..그것을 다운..

다운받은것을 실행해 보자.

이렇게 거쳐 설치가 완료

잘 설치되는지 cmd 창을 열어서

mysql -u root -p 엔터

비밀번호 입력하면 mysql에 연결될것이다.

뜨등

sqlloader를 사용하기 위해서는 미리 테이블이 만들어져 있어야 함.

sqlloader 화일 샘플

#!/bin/csh
if ( $#argv != 2) then
echo "Usage: $0 <DataFile> <logFileName>"
exit 1
endif

sqlldr userid=oracle/oracle control=tblmacs_tmpidrlog.ctl data=$1 log=$2.log commit_discontinued=true

data는 raw데이타 들어갈 부분, log는 생략해도 무방..., commit으로 시작하는 부분도 생략가능

실행방법

sqlloader.sh "실제데이타 화일"
ex) sqlloader.sh SWBLS1_FWEBIDR1_ID0001_T20030603000109.DAT

이런식으로 사용 가능(원격폴더 지정시)
## sqlloader.sh /bear02/macslog/20030401/SWBLS1_FWEBIDR1_ID0001_T20030401000110.DAT /bear01/brewlog/src/eshock/log/z0000

control화일 샘플

load data
INFILE *
append
into table TBLMACS_TMPIDRLOG
when RECORD_TYPE='R'
(
RECORD_TYPE position(01:01) char
,RECORD_SEQ position(02:08) char
,SVC_TYPE position(09:09) char
,CALL_NUM position(10:20) char
,CHARGE_NUM position(21:31) char
,CP_NO position(32:36) char
,CONTENTS_NO position(37:38) char
,MENU_NO position(39:40) char
,CALL_START position(41:54) char
,DURATION position(55:63) char
,PKT_CNT position(64:72) char
,PHONE_TYPE position(73:87) char
,BROWSER_VER position(88:102) char
)

position은 순서대로 1부터 1까지 자름, 그다음 2칸째부터 8칸 이후까지를 의미함.





[ SQL*Loader 사용하기 ]
작성일자 : 2001년 6월 11일
작 성 자 : 조수환


1. SQL*Loader를 이용해서 Data를 넣을 파일을 Excel에서 생성한다.
- 파일을 *.csv로 저장을 한다.
(SQL*Loader를 사용하기 위해서는 ,(콤마)가 필요하다)
즉, 다음과 같은 데이타 포멧이면 된다.
10000,CEO,등록
10020,CEO CEO실,등록
150000,솔루션사업부문,등록
150010,솔루션사업부문 신프라팀,등록
150020,솔루션사업부문 기관영업팀,등록
150030,솔루션사업부문 사업지원팀,등록
150040,솔루션사업부문 CS팀,등록

2. csv 파일에는 departcode, departname, gubun 의 형식을 데이타가 들어가 있다.

Ex> departcode, departname, gubun
---------- ------------------------------
180040 경영전략부문 홍보팀
190000 재경부문
190010 재경부문 재경기획팀
190020 재경부문 재경팀
190030 재경부문 물류지원팀
200000 인재기획실


3. Data를 넣을 테이블의 명세서는 다음과 같다.
SQL> desc departinfo;
이름 널? 유형
---------- -------- ------------
ID NOT NULL NUMBER
DEPARTCODE NUMBER(6)
DEPARTNAME VARCHAR2(40)
CREATEDATE DATE
MODIFYDATE DATE
GUBUN CHAR(4)


4. 콘트롤 파일(abc.ctl) 을 하나 만들고, 다음과 같은 내용을 기록한다.

LOAD DATA
INFILE '부서코드.csv' -- 참조할 파일은 부서코드.csv
replace -- 테이블의 내용을 모두 삭제한 후에 입력
INTO TABLE departinfo -- 데이타가 들어갈 테이블 명
fields terminated by ',' -- ,(콤마)를 기준으로 구분한다.
(
id sequence(1,1), -- 1부터 1씩 증가시킨다.
departcode integer external, -- 외부의 데이타를 가져온다.
departname char(40), -- 문자열은 40
createdate sysdate, -- Load를 할 때 sysdate값을 넣어준다.
modifydate sysdate, -- Load를 할 때 sysdate값을 넣어준다.
gubun char(4) -- 문자열은 4
)


5. SQL*Loader를 실행시킨다.
# sqldlr atomx/akstp@sysora control=abc.ctl log=0611.log
- > 위와 같이 하면 부서코드.csv의 내용이 conrolfile의 정의와 함께
테이블에 쭉 들어간다.



<참조> 다른 컨트롤 파일의 내용

1. 컨트롤 파일(bbb.ctl)의 내용
LOAD DATA
INFILE '사원인사.csv'
replace
INTO TABLE companyinfo
fields terminated by ','
(
id sequence(1,1),
companycode integer external,
name char(20),
departcode integer external,
tel char(4) nullif tel = blanks, -- 만일 공백이면 NULL상태로 만든다.
enteringdate date ,
createdate sysdate,
modifydate sysdate,
gubun char(4)
)


2. sqlldr atomx/akstp@sysora control=bbb.ctl log=0611.log

 

출처 : http://cafe.naver.com/superadmin/42

자바에서 이메일 발송을 구현하기 위해서는
Java Mail 라이브러리와 JAF(JavaBeans Activation Framework) 라이브러리를 추가해주어야 한다.

Java Mail 다운로드 바로가기 >> http://java.sun.com/products/javamail/downloads/index.html
JAF 다운로드 바로가기 >> http://java.sun.com/javase/technologies/desktop/javabeans/jaf/downloads/index.html


 
01.import java.util.*;
02.import javax.mail.*;
03.import javax.mail.internet.*;
04.
05.public class TestEmailSender {
06. private static final String emailHost = "smtp.gmail.com";
07. private static final String emailId = "Gmail 계정";
08. private static final String emailPw = "Gmail 비밀번호";
09.
10. public void sendEmail(String from, String to, String subject, String content) {
11. Properties props = new Properties();
12. props.put("mail.smtp.starttls.enable", "true");
13. props.put("mail.smtp.host", emailHost);
14. props.put("mail.smtp.auth", "true");
15.
16. EmailAuthenticator authenticator = new EmailAuthenticator(emailId, emailPw);
17.
18. Session session = Session.getInstance(props, authenticator);
19.
20. try {
21. Message msg = new MimeMessage(session);
22. msg.setFrom(new InternetAddress(from));
23. msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
24.
25. msg.setSubject(subject);
26. msg.setContent(content, "text/html; charset=EUC-KR");
27. msg.setSentDate(new Date());
28.
29. Transport.send(msg);
30. } catch (MessagingException e) {
31. e.printStackTrace();
32. }
33. }
34.
35. class EmailAuthenticator extends Authenticator {
36. private String id;
37. private String pw;
38.
39. public EmailAuthenticator(String id, String pw) {
40. this.id = id;
41. this.pw = pw;
42. }
43.
44. protected PasswordAuthentication getPasswordAuthentication() {
45. return new PasswordAuthentication(id, pw);
46. }
47. }
48.
49. public static void main(String[] args) {
50. String subject = "Gmail을 통한 Java Email 발송 테스트";
51. String content = "Gmail을 통한 Java Email 발송 테스트입니다.";
52. String from = "보내는 이메일 주소";
53. String to = "받을 이메일 주소1,받을 이메일 주소2";
54. // 받을 이메일 주소는 반드시 ","로 구분해준다.
55.
56. new TestEmailSender().sendEmail(from, to, subject, content);
57. }
58.}

+ Recent posts