문자 무제한을 이용해서 만들어봤습니다
페이지 정보
작성자
운영자
작성일
08.23 20:36
25 조회
본문
클로드 ai 도움을 받아 집에서 운영중인
미니피시(아파치 웹서버)를 이용해서
만들어봤습니다
간단히 말해서
내 문자메세지를 가지고
문자를 보낼수 있는 프로그램
그누보드를 비교해서 말하지만
그누보드 문자를 업체를 이용하지 않고
내 스마트폰 문자로 이용 가능
문제 무제한인경우
통신사마다 다르지만
당일 발송건수 대략 150-170건전후
가능한걸로 알고 있습니다
(별도 요금없음)
kt- lms 긴문자 가능
lg - 단문문자만 가능
*적용내용*
국내전화번호로만
문자발송/국제번호 문자 차단
문자건수 제한/차단/삭제가능
실시간 등록기기 확인
앱에서 부여한 복잡한
아이디와 비번말고 쉽고편한
아이디와 비번으로 이용가능
(비번은 본인이 변경가능)
발송되는 문자 내용은
볼수가 없으며 본인만 확인가능
발송 파일
/**
* 이 파일은 더 이상 로그인 ID/비밀번호를 직접 포함하지 않습니다.
* 자격증명은 같은 디렉토리의 .env 파일에서 읽어옵니다.
* .env 파일은 절대 외부(깃허브, 웹 등)에 노출되지 않도록 주의하세요.
*/
function loadEnv(string $filePath): bool
{
if (!file_exists($filePath)) {
error_log("환경설정 파일(.env)을 찾을 수 없습니다: {$filePath}");
return false;
}
$lines = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
$trimmed = trim($line);
if ($trimmed === '' || strpos($trimmed, '#') === 0) {
continue;
}
if (strpos($line, '=') !== false) {
[$key, $value] = explode('=', $line, 2);
$key = trim($key);
$value = trim($value);
// 값 양쪽에 따옴표가 있으면 제거
$value = trim($value, "\"'");
putenv(sprintf('%s=%s', $key, $value));
$_ENV[$key] = $value;
}
}
return true;
}
// .env 로드
loadEnv(__DIR__ . '/.env');
// 필수 환경변수 상수 정의 (오타 수정: USER_PASS로 통일)
define('SMS_API_URL', getenv('SMS_API_URL') ?: '');
define('USER_NAME', getenv('USER_NAME') ?: '');
define('USER_PASS', getenv('USER_PASS') ?: '');
define('DEFAULT_PHONE', getenv('DEFAULT_PHONE') ?: '');
/**
* 필수 환경변수가 제대로 설정되었는지 검증합니다.
*/
function assertEnvLoaded(): void
{
$missing = [];
if (SMS_API_URL === '') $missing[] = 'SMS_API_URL';
if (USER_NAME === '') $missing[] = 'USER_NAME';
if (USER_PASS === '') $missing[] = 'USER_PASS';
if (!empty($missing)) {
$msg = '필수 환경변수가 누락되었습니다: ' . implode(', ', $missing);
error_log($msg);
throw new RuntimeException($msg);
}
}
function sendSms(string $phoneNumber, string $text): array
{
assertEnvLoaded();
$payload = json_encode([
'username' => USER_NAME,
'password' => USER_PASS,
'phoneNumber' => $phoneNumber,
'text' => $text,
]);
$ch = curl_init(SMS_API_URL);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_TIMEOUT => 15,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
return [
'status' => $httpCode,
'error' => $error,
'body' => json_decode($response, true),
];
}
try {
$result = sendSms(DEFAULT_PHONE ?: '+발송전화번호', '테스트중입니다');
echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
} catch (RuntimeException $e) {
http_response_code(500);
echo json_encode(['error' => $e->getMessage()], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
}
아래앱을 사용해서 구성했습니다
https://github.com/capcom6/android-sms-gateway
미니피시(아파치 웹서버)를 이용해서
만들어봤습니다
간단히 말해서
내 문자메세지를 가지고
문자를 보낼수 있는 프로그램
그누보드를 비교해서 말하지만
그누보드 문자를 업체를 이용하지 않고
내 스마트폰 문자로 이용 가능
문제 무제한인경우
통신사마다 다르지만
당일 발송건수 대략 150-170건전후
가능한걸로 알고 있습니다
(별도 요금없음)
kt- lms 긴문자 가능
lg - 단문문자만 가능
*적용내용*
국내전화번호로만
문자발송/국제번호 문자 차단
문자건수 제한/차단/삭제가능
실시간 등록기기 확인
앱에서 부여한 복잡한
아이디와 비번말고 쉽고편한
아이디와 비번으로 이용가능
(비번은 본인이 변경가능)
발송되는 문자 내용은
볼수가 없으며 본인만 확인가능
발송 파일
/**
* 이 파일은 더 이상 로그인 ID/비밀번호를 직접 포함하지 않습니다.
* 자격증명은 같은 디렉토리의 .env 파일에서 읽어옵니다.
* .env 파일은 절대 외부(깃허브, 웹 등)에 노출되지 않도록 주의하세요.
*/
function loadEnv(string $filePath): bool
{
if (!file_exists($filePath)) {
error_log("환경설정 파일(.env)을 찾을 수 없습니다: {$filePath}");
return false;
}
$lines = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
$trimmed = trim($line);
if ($trimmed === '' || strpos($trimmed, '#') === 0) {
continue;
}
if (strpos($line, '=') !== false) {
[$key, $value] = explode('=', $line, 2);
$key = trim($key);
$value = trim($value);
// 값 양쪽에 따옴표가 있으면 제거
$value = trim($value, "\"'");
putenv(sprintf('%s=%s', $key, $value));
$_ENV[$key] = $value;
}
}
return true;
}
// .env 로드
loadEnv(__DIR__ . '/.env');
// 필수 환경변수 상수 정의 (오타 수정: USER_PASS로 통일)
define('SMS_API_URL', getenv('SMS_API_URL') ?: '');
define('USER_NAME', getenv('USER_NAME') ?: '');
define('USER_PASS', getenv('USER_PASS') ?: '');
define('DEFAULT_PHONE', getenv('DEFAULT_PHONE') ?: '');
/**
* 필수 환경변수가 제대로 설정되었는지 검증합니다.
*/
function assertEnvLoaded(): void
{
$missing = [];
if (SMS_API_URL === '') $missing[] = 'SMS_API_URL';
if (USER_NAME === '') $missing[] = 'USER_NAME';
if (USER_PASS === '') $missing[] = 'USER_PASS';
if (!empty($missing)) {
$msg = '필수 환경변수가 누락되었습니다: ' . implode(', ', $missing);
error_log($msg);
throw new RuntimeException($msg);
}
}
function sendSms(string $phoneNumber, string $text): array
{
assertEnvLoaded();
$payload = json_encode([
'username' => USER_NAME,
'password' => USER_PASS,
'phoneNumber' => $phoneNumber,
'text' => $text,
]);
$ch = curl_init(SMS_API_URL);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_TIMEOUT => 15,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
return [
'status' => $httpCode,
'error' => $error,
'body' => json_decode($response, true),
];
}
try {
$result = sendSms(DEFAULT_PHONE ?: '+발송전화번호', '테스트중입니다');
echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
} catch (RuntimeException $e) {
http_response_code(500);
echo json_encode(['error' => $e->getMessage()], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
}
아래앱을 사용해서 구성했습니다
https://github.com/capcom6/android-sms-gateway
댓글 0


