프로그래밍/PHP
php로 메일보내기2 - html 메일 보내기
beautifulhill
2019. 11. 22. 16:06
아주 간단하게 메일을 보낼 수 있지만
예쁘게 꾸민 html 코드로 메일을 보낼 수도 있다.
1. mailtest.php
$to = '받는사람@gmail.com';
$subject = 'html을 보냈습니다.';
$fp = fopen('mailtest.html',"r");
$message = fread($fp,filesize('mailtest.html'));
$name = '김광인';
$age = '21';
$gender = '남자';
$message = str_replace('{name}', $name, $message);
$message = str_replace('{age}', $age, $message);
$message = str_replace('{gender}', $gender, $message);
echo $message;
// html 메일을 보낼 때 꼭 이헤더가 붙어야한다.
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=utf-8';
// Additional headers
$headers[] = 'To: Kim<받는사람@gmail.com>';
$headers[] = 'From: Admin<test@naver.com>';
$headers[] = 'Cc: Kim1<참조인1@naver.com>,Kim2<참조인2@gmail.com>';
$headers[] = 'Bcc: 숨은참조인3@gmail.com';
$result =mail($to, $subject, $message, implode("\r\n", $headers));
echo "메일 성공여부 : ";
if($result){echo "성공";}else{echo "실패";}
2_1. mailtest.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">
table tr td{
border: 1px solid #5da399;
text-align: center;
padding: 10px;
}
</style>
</head>
<body>
<table>
<tr>
<td>이름</td>
<td>{name}</td>
</tr>
<tr>
<td>나이</td>
<td>{age}</td>
</tr>
<tr>
<td>성별</td>
<td>{gender}</td>
</tr>
</table>
</body>
</html>
이렇게 하면, mailtest.html은
다음과 같이 출력된다.
메일을 보낸 후
메일함을 확인해보면
다음과 같이 스타일이 적용이 하나도 안된 상태로 온다.
따라서 html의 스타일을 inline방식으로 바꾼다.
2_2. mailtest.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">
</style>
</head>
<body>
<table style="border-collapse: collapse;text-align: center;">
<tr>
<td style="border: 1px solid #5da399;padding: 10px;">이름</td>
<td style="border: 1px solid #5da399;padding: 10px;">{name}</td>
</tr>
<tr>
<td style="border: 1px solid #5da399;padding: 10px;">나이</td>
<td style="border: 1px solid #5da399;padding: 10px;">{age}</td>
</tr>
<tr>
<td style="border: 1px solid #5da399;padding: 10px;">성별</td>
<td style="border: 1px solid #5da399;padding: 10px;">{gender}</td>
</tr>
</table>
</body>
</html>
스타일이 잘 적용된 상태로 메일이 보내진다.
다 끝난 것 같지만 아직 문제가 하나 남았다.
잘 살펴보자
분명 받는 사람은 나 하나고 참조인이 2명인데, 왜 받는사람이 두명인 것인가?
이는 mailtest.php에서 $to 와 $headers[] = 'To: Kim<받는사람@gmail.com>';
때문인다. to를 두번 지정해준 것이므로 "$headers[] = 'To: Kim<받는사람@gmail.com>';"을 지워줘야 한다.
그럼 다음과 같이 받는 사람이 한명으로 제대로 나온다.