command line 명령어로 메일 보내기 (php)

리눅스/Mail|2020. 2. 20. 13:04
반응형

php 7.2 에서 테스트 하였습니다.

참고로 메일을 보내기 위해서는 로컬에 SMTP 가 열려 있어야 합니다.

 

 

# vi send.php

 

<?php


// 메일 헤더 (보내는 사람)
$headers = "From: SENDER<sender@sysdocu.tistory.com>\r\nMIME-Version: 1.0\r\nContent-Type: text/html; charset=utf-8\r\nContent-Transfer-Encoding: base64\r\n";


// 메일 제목
$title = "메일 제목입니다.";
$title = "=?utf-8?B?".base64_encode($title)."?=\n";


// 메일 내용 (직접 입력할 경우)
//$content = "<html lang='ko'><head><meta charset='utf-8'/></head><body><h1>안녕하세요. 테스트 메일 입니다.</h1></body></html>";


// 메일 내용 (파일에서 출력할 경우)
$file_handle = fopen("mail_body.html", "r");
$content = "";
while (!feof($file_handle)) {
    $line_of_text = fgets($file_handle);
    $content = $content . $line_of_text . "
    ";
}
fclose($file_handle);
 
// 메일 전송 (받는사람)
mail("user@sysdocu.tistory.com", $title, chunk_split(base64_encode($content)), $headers);


?>

 

제목은 한글이 안깨지도록 하였는데, 메일 헤더값의 한글은 어떻게 하는지 몰라서

메일 닉네임 사용시 영문으로 써야함 (SENDER 부분처럼 하던가 이메일 주소만 남기고 제거해도 됨)

 

# chmod 755 send.php

 

발송하기

 

# php send.php

 

===================================================

 

대량으로 보낼때는..

 

1) send.php 에서 두 군데를 수정

 

$USER = $_SERVER['argv'];    // 파일 맨 첫 줄에 추가


mail("$USER[1]", $title, chunk_split(base64_encode($content)), $headers);    // 맨 아랫줄에 user@sysdocu.tistory.com 대신 $USER[1] 로 변경

 

2) 메일 발송을 반복해 줄 쉘스크립트 생성

 

# vi run.sh

 

#!/bin/bash


for USER in `cat mail_list.txt`; do
    php send.php $USER
    echo $USER 으로 메일 발송 완료
done 

 

# chmod 700 run.sh

 

3) 메일 리스트 작성

 

# vi mail_list.txt

 

user@sysdocu.tistory.com
user2@sysdocu.tistory.com
user3@sysdocu.tistory.com


4) SMTP 데몬 가동

 

메일 발송시 SMTP 로 발송하기 때문에 로컬에 관련 데몬이 구동되어야 한다.

25번 포트가 열려있는지 확인하자.

구동 안되어 있을 경우 별다른 설정 없이 데몬만 가동하면 된다.

 

# systemctl start sendmail

 

5) 발송하기

 

# sh run.sh

 

* 사용하기 전에 개인 메일 2~3개로 테스트를 먼저 꼭 해보자.

 

반응형

댓글()