개발! 딱 깔끔하고 센스있게!

PHP IMAP 교환 문제 본문

개발 스크랩 메모/PHP

PHP IMAP 교환 문제

렉사이 2020. 12. 4. 02:40

그래서 지금 제 가 쓰 고 있 는 PHP 스 크 립 트 가 문제 가 있어 요.먼저, 저 는 스 크 립 트 가 IMAP 메 일 에 연결 되 어야 한다 고 말 합 니 다.

메 일 을 검색 하고 첨부 파일 을 다운로드 해 야 합 니 다.

모든 것 은 인 코딩 이 되 었 고, 제 이메일 계 정 을 사용 하고 있 습 니 다.

exchange 서버 에 접속 하려 고 했 을 때 문제 가 생 겼 습 니 다.

짧 은 코드 발췌:

$mbox = imap_open($host, $login, $password); echo '
' . imap_last_error() . '
'; $emails = imap_search($mbox, 'FROM "[email protected]"', SE_UID);

나 는 두 개의 주요 $host 버 전 을 시도 했다.

(SSL 이 있 거나 없 음)

1 - {server: 9993 / imap / ssl / novadate cert} 수신 함2 - {서버: 143 / imap / novadate cert} 수신 함

novaidate 인증서 처리 오류.나 는 'notsl' 인 자 를 시도 했다.

이 두 개의 인 자 는 뚜렷 한 결 과 를 얻 지 못 했다.

제 가 얻 은 실 수 는 이 귀여운 정보 입 니 다.

어떤 방식 으로 든, 모양 으로 든, 신비 로 운 것 이 아 닙 니 다.

[CLOSED] IMAP connection broken (server response) 

그리고 다음 과 같은 통 지 를 받 았 습 니 다.

Notice: Unknown: Unknown GSSAPI failure: An invalid name was supplied (errflg=1) in Unknown on line 0 Notice: Unknown: GSSAPI mechanism status: Hostname cannot be canonicalized (errflg=1) in Unknown on line 0 Notice: Unknown: Retrying PLAIN authentication after AUTHENTICATE failed. (errflg=1) in Unknown on line 0 Notice: Unknown: Retrying PLAIN authentication after AUTHENTICATE failed. (errflg=1) in Unknown on line 0 Notice: Unknown: Can not authenticate to IMAP server: AUTHENTICATE failed. (errflg=2) in Unknown on line 0 Notice: Unknown: [CLOSED] IMAP connection broken (server response) (errflg=1) in Unknown on line 0 

앞의 두 개 는 나 를 매우 곤 혹 스 럽 게 한다.

이 문 제 는 로 컬 네트워크 와 무관 하도록 다른 서버 에서 시 도 했 습 니 다.

검색 을 통 해 저 는 이것 만 얻 었 습 니 다: http: / www. pfreea. ks. com / forums / index. phop?topic = 190628.0, 이 건 좀 귀 찮 은 것 같 아 요.

무슨 생각 있 으 세 요?

대답 하 다.

나 도 같은 문 제 를 만 났 다.

Exchange 서버 가 지원 하지 않 는 인증 프로 토 콜 (http: / / vision. eng. shu. ac. uk / mmvlwiki / index. phop / Exchange) 을 발표 해서 오류 가 생 긴 것 같다.

이 문 제 는 LIux 서버 와 격 리 된 것 같 습 니 다.

윈도 의 똑 같은 코드 에 문제 가 없 기 때 문 입 니 다.

이것 은 장기 적 으로 존재 하 는 문제 입 니 다.

PHP 가 최근 에 보수 되 었 습 니 다.

(v. 5.3.2) 몇몇 인증 프로 토 콜 (http: / PHP. net / manual / n / function. imap open. PHP) 을 사용 하지 않도록 합 니 다.

아래 의 코드 는 나 에 게 있어 서 간헐 적 이다.

$this->inbox = imap_open("{server:993/imap/ssl/novalidate-cert}$inbox", $username, $password, NULL, 1, array('DISABLE_AUTHENTICATOR' => 'PLAIN')) or die(var_dump(imap_errors())); 

이것 도 간헐 적 으로 일한다.

$this->inbox = imap_open("{server:993/imap/ssl/novalidate-cert}$inbox", $username, $password, NULL, 1, array('DISABLE_AUTHENTICATOR' => 'GSSAPI')) or die(var_dump(imap_errors())); 

그래서 나 는 빈민굴 에서 그것 을 조종 하 는 것 이 확실히 효과 가 있 는 것 처럼 보 였 다.

비록 그것 이 우리 회사 의 exchange 서버 에 끝 없 는 순환 / DOS 공격 을 할 수도 있 지만 / care

더 좋 은 해결 방안 이 있 기 를 바 랍 니 다.

그러나 이것 은 도움 이 될 것 입 니 다.

$tryCnt = 0; while(!is_resource($this->inbox)){ $this->inbox = imap_open("{server.com:993/imap/ssl/novalidate-cert}$inbox", $username, $password, NULL, 1, array('DISABLE_AUTHENTICATOR' => 'GSSAPI')); $tryCnt ++; if(!is_resource($this->inbox)){ $this->inbox = imap_open("{server.com:993/imap/ssl/novalidate-cert}$inbox", $username, $password, NULL, 1, array('DISABLE_AUTHENTICATOR' => 'PLAIN')); $tryCnt ++; } if($tryCnt > 20){ echo "Cannot Connect To Exchange Server:
"; die(var_dump(imap_errors())); } }
Comments