PHP 에서 mail 함수 정상 동작하는지 확인하는 소스

<?php
 //$mailto="받는주소";
 $mailto="sample@a.com";
 $subject="mail test";
 $content="test";
 $result=mail($mailto, $subject, $content);
 if($result){
  echo "mail success";
  }else  {
  echo "mail fail";
 }
?>


test.php 로 저장하여,
웹페이지에서 로드했을때
mail success 가 찍혀야 정상

만약, 위 소소에서 mail success 가 찍히는데
각종 커스텀 보드에서 메일 발송이 되지 않는다면,
php소스에서 mail 함수의 각 인자들을 확인해본다.

error_log($mailto, 0);  // mailto 변수를 서버의 에러로그에 찍는다.
error_log($subject, 0);

가령,

<?php
 //$mailto="받는주소";
 $mailto="sample@a.com";
 $subject="mail test";
 $content="test";
 $result=mail($mailto, $subject, $content);
 if($result){
  echo "mail success";
  }else  {

  error_log($mailto, 0); 

  echo "mail fail";
 }
?>

일 경우,
Apache 서버를 구동중이라면,
Apache\logs\error.log
파일에 mailto 변수의 내용이 찍힌다.

지금 내가 사용중인 환경은
Apache2.2.8
+ SMTP(W2K3 R2) + PHP5.2.5


위와 같이 테스트에서 이상이 없었으나,
제로보드에서는 메일을 보내지 못하는 현상이 발생한다.

따라서,
제로보드의 메일발송 소스를 확인해보니,
받는 사람(Receiptor) 변수에

위의 예제에서는 "sample@a.com" 이지만,
제로보드는 "받는사람 이름 <sample@a.com>"을 설정한다.

Receiptor 변수를 임의로 "sample@a.com"으로 수정하고
정상 작동하는 것을 확인
해당 소스를 수정해주었다.

제로보드\classes\mail\Mail.class.php

function getReceiptor() {
  //if($this->receiptor_name) return sprintf("%s <%s>", '=?utf-8?b?'.base64_encode($this->receiptor_name).'?=', $this->receiptor_email);
  return $this->receiptor_email;
}


수정이후 정상 발송 확인

출처: https://lifeful.tistory.com/19 [SEIZ THE DAY.]

  1. Favicon of http://tv.dasiboa.live 드라마다시보기 2020.09.04 14:31

    포스팅 잘 보고 갑니다...


[리눅스 sendmail 로 폼메일사용시 nobody@localhost.localhost.com 으로 발송될 경우 ]


보내는 사람 계정 명이 nobody@localhost.localdomain 으로 발송이 되서 

다음이나 다른 포털에서 반송되는 경우를 볼수 있습니다 

이럴때에 조치 방법으로 

php.ini에서 

 

메일 함수 사용시 

리눅스

php.ini 를 수정하는 방법.(Linux) 
; PHP mail() 함수에서 발송하는 메일에는 모두 적용됨.  수정후 아파치 재시작해야함. 
;sendmail_path = 

sendmail_path = “/usr/sbin/sendmail -t -i -f 계정@도메인” 

 

위에 처럼 수정후 발송 하면 잘 적용 되십니다 

무조건 적용 

 

 

윈도우

php.ini 를 수정하는 방법(windows)
; 모든 메일발송자가 고정적으로 지정됨.  수정후 아파치 재시작해야함. 
;sendmail_from = master@example.com 
=> 
sendmail_from = 계정@도메인



출처: https://cnisoft.tistory.com/10 [씨엔아이소프트]


 

CentOS7 에서부터는 network 설정방법이 좀 달라졌음


[root@localhost network-scripts]# vi /etc/sysconfig/network-scripts/ifcfg-enp6s0



랜카드명이 eth0 에서 enp6s0 처럼 변경되었음. 



고정ip설정시 netmask 설정은 NETMASK, PREFIX 중에 하나만 사용해야 함. 

두 개 다 지정해 놓을 경우 PREFIX가 우선함


NETMASK = 255.255.255.224

PREFIX = 27


와 


PREFIX = 27

NETMASK = 255.255.255.224


는 동일하게 PREFIX값이 우선함


PREFIX 값을 주석처리하거나 삭제함



-----



서브넷 클래스에 따른 NETMASK / PREFIX 값 (둘 중 하나만 사용)


NETMASK = 255.255.255.0

PREFIX = 24

호스트범위 : 1~254



NETMASK = 255.255.255.128

PREFIX = 25

호스트범위 : 1~126



NETMASK = 255.255.255.192

PREFIX = 26

호스트범위 : 1~62



NETMASK = 255.255.255.224

PREFIX = 27

호스트범위 : 33~62



NETMASK = 255.255.255.240

PREFIX = 28

호스트범위 : 49~62



NETMASK = 255.255.255.248

PREFIX = 29

호스트범위 : 49~54



NETMASK = 255.255.255.252

PREFIX = 30

호스트범위 : 53~54



출처: https://ellordnet.tistory.com/67 [IT in MT]

'Works > CentOS' 카테고리의 다른 글

Cent OS 7에서 iptables 사용하기  (0) 2021.02.03
m4 오류해결법 sendmail  (1) 2020.06.26
CentOS 7 network prefix  (0) 2020.06.24
ssh, scp 비밀번호 없이 실행(공개키 기반 인증)  (0) 2020.05.13
네임서버 설정 검사하기  (0) 2019.09.04
scp 이용시 속도 제한 걸기  (0) 2019.04.09


 

증상 : configure: error: DBA: Could not find necessary library.
해결 : ln -s /usr/lib64/libgdbm_compat.so /usr/lib/libdbm.so

 

증상 : checking for DB4 major version... configure: error: Header contains different version.

해결 1 : yum install db4 db4-devel (db4 와 db4-devel 을 설치한 뒤에도 안되면 아래 참고)

해결 2

/usr/include/db.h 가 /usr/include/libdb/db.h 로 연결되어 있을 경우
unlink /usr/include/db.h   (기존 db.h 링크 해제)

cd /usr/include
ln -s /usr/include/libdb4/db.h db.h

 

make 과정에서

/home/segio_php/php-5.2.17/ext/dom/node.c: In function ‘dom_canonicalization’:

/home/segio_php/php-5.2.17/ext/dom/node.c:1953:21: error: dereferencing pointer to incomplete type

/home/segio_php/php-5.2.17/ext/dom/node.c:1955:5: error: dereferencing pointer to incomplete type


오류가 발생한다면

 

[root@localhost] wget -O php.patch  https://mail.gnome.org/archives/xml/2012-August/txtbgxGXAvz4N.txt

[root@localhost] cd php-5.2.17

[root@localhost] patch -p0 -b < php.patch


patching file ext/dom/node.c

Hunk #1 succeeded at 1950 (offset 55 lines).

patching file ext/dom/documenttype.c

Hunk #1 succeeded at 215 (offset 10 lines).

patching file ext/simplexml/simplexml.c

Hunk #1 succeeded at 1343 (offset -74 lines).


patch 명령어를 찾을 수 없다고 할 경우 yum -y install patch

위와 같이 패치를 적용한 후 컴파일을 하면 문제없이 진행된다.


 

ssh, scp 를 리눅스에서 사용하려면 비밀번호를 입력하라고 프로그램이 멈춘다.


자동화 시스템에서 이러한 점은 큰 문제점이다.


이러한 점들을 해결하기 위해 공개키 기반 인증을 사용할 수 있다.


미리 ssh 인증을 서버간에 해두면, 그 인증파일을 사용하여 비밀번호 없이 ssh나 scp 를 사용할 수 있다.


방식은


scp를 사용할 서버에서 키를 아래와 같이 생성한다.

ssh-keygen -t rsa


Enter file in which to save the key : 인증 파일을 어디에 만들지 설정(엔터시 계정 아이디/.ssh 에 파일들이 생성)

Enter passphrase : 비밀번호를 입력 안하려 하니 엔터

Enter same passphrase again : 비밀번호 확인 그냥 엔터


생성 되는 파일은 ID/.ssh 에 id_rsa, id_rsae.pub 이다.


id_rsa 는 private key.

id_rsae.pub 는 public key 이다.


키가 생성 되었으면 scp를 받을 서버에 키를 전송해야 한다.

공개 키인 id_rsa.pub 를 전송한다.


scp .ssh/id_rsa.pub ID@serverName:.ssh/authorized_keys

하고 비밀번호를 입력하면 전송이 된다.


authorized_key 말고 authorized_key2 까지 인식 된다.


ssh ID@serverName 했을 때 비밀번호를 인증하라고 메시지가 나오지 않으면 된다.



출처: https://www.kiljh.me/entry/ssh-scp-비밀번호-없이-실행공개키-기반-인증 [Dominic Blog]