PHP 스크립트를 실행하여 수신 이메일을 구문 분석할 수 있는 Linux 메일 클라이언트

PHP 스크립트를 실행하여 수신 이메일을 구문 분석할 수 있는 Linux 메일 클라이언트

간단한 텍스트 기반 메일 클라이언트를 사용하여 PHP 스크립트를 실행하여 사용자로부터 받은 메일을 구문 분석할 수 있나요?

사용자에게 이메일을 보내는 PHP 애플리케이션이 있는데, 애플리케이션이 사용자의 응답을 구문 분석하여 데이터베이스에 저장할 수 있다면 좋을 것입니다.

저는 Centos 6과 Postfix, PHP를 사용하고 PHPMailer를 사용하여 이메일을 보냅니다. X 윈도우 시스템이 설치되지 않았습니다.

답변1

귀하의 질문은 텍스트 기반 메일 클라이언트와 PHP 애플리케이션을 참조한 다음 "애플리케이션"(예: PHP 애플리케이션)이 이메일(또는 이메일에서 추출한 데이터)을 데이터베이스 중간에 저장하도록 지정하기 때문에 약간 혼란스럽습니다.

응답 처리 애플리케이션에서 전송 애플리케이션을 분리할 수 있으며 아마도 분리해야 할 것입니다. 응답 처리는 procmail에서 스크립트를 호출하여 수행할 수 있습니다. 사용자의 홈 디렉터리에 다음 내용이 포함된 .procmailrc 파일을 받아야 하기 때문입니다.

:0
* ^Subject:.*[response-email]
| /path/to/your_script

이 이메일 주소로 전송된 모든 메시지를 처리하려면 제목 줄을 생략하거나 다른 선택 기준을 사용할 수 있습니다.

나는 your_script당신의 자료를 데이터베이스에 직접 넣을 수 있는 명령줄 메일 클라이언트를 모릅니다. 어쨌든 응답을 테스트해야 하므로(추가 데이터베이스 필드를 추출하지 않으려면 적어도 스팸을 버리기 위해) your_scriptPHP로 작성 하는 것이 좋습니다.폴리에틸렌 글리콜해당 내용을 구문 분석하여 데이터베이스에 저장합니다. (물론 이를 위해 익숙한 다른 언어를 사용할 수도 있습니다.)

이 스크립트를 실행하는 시스템에서 이메일을 받기 위해 postfix를 사용하는 경우 /etc/postfix/main.cf를 호출해야 합니다 procmail.

mailbox_command = procmail -a "$EXTENSION"

답변2

...알겠습니다. 몇 단계 뒤로 물러나 이메일이 내부적으로 어떻게 작동하는지에 대해 몇 가지 설명하겠습니다. 댓글에 있는 질문으로 판단해 보면 이 질문의 문제점 중 일부는 일이 어떻게 작동하는지 이해하십시오. 이는 결국 원하는 것을 달성하기 위해 무엇을 해야 하는지에 대한 오해로 이어질 수 있습니다.

먼저 몇 가지 기본 용어는 다음과 같습니다.

  • MUA(메일 사용자 에이전트)는 "메일 클라이언트"라고 부르는 것입니다. 그 목적은 사용자가 이메일을 보내거나 사서함에서 이메일을 검색하여 읽을 수 있도록 하는 것입니다. 기술적으로 PHP 스크립트는 이메일을 보낼 때 MUA 역할을 합니다.
  • MTA(메일 전송 에이전트)는 단순히 이메일을 한 곳에서 다른 곳으로 이동합니다. 요즘에는 수신한 이메일이 진짜인지 확인하는 것도 포함되는 경우가 많습니다.~해야 한다그 전에 통과하지만 현재 범위를 벗어납니다. 우체국처럼 생각해보세요.
  • MDA(메시지 배달 에이전트)는 파이프라인의 끝점 역할을 합니다. MTA가 특정 전자 메일 메시지를 로컬로 배달해야 한다고 결정하면 MDA를 호출하여 트랜잭션을 처리합니다.

이메일을 보내면 다음과 같은 일이 발생합니다.

  1. MUA는 스크립트 또는 사용자 입력을 통해 이메일을 생성하고 국제 표준에 따라 올바르게 캡슐화되었는지 확인하고(올바른 위치에 주소를 쓰고 적절한 양의 스탬프를 추가하는 것과 동일) 구성된 MTA에 전달합니다. 거의 모든 UNIX 변형진짜작은 임베디드 시스템은 로컬 MTA를 실행하므로 전자 메일을 보내야 하는 모든 작업은 SMTP를 사용하지 않고도 수행할 수 있습니다.
  2. MTA는 이메일을 수신하고 그것이 올바른지 확인합니다.~해야 한다메시지를 처리하려면 대상 주소를 보고 이를 어떻게 처리할지 결정하세요. 로컬로 처리할 의도가 아닌 경우 해당 특정 메시지를 보내기에 적합한 장소라고 판단되는 다른 MTA로 메시지를 전달합니다.
  3. 실제 설정에 따라 2단계를 여러 번 반복할 수 있습니다. 예를 들어 로컬 컴퓨터 -> 발신 메일용 ISP의 스마트 호스트 보내기 -> ISP의 바이러스 백신/스팸 필터 수신 -> ISP의 기본 수신 메일 서버입니다.
  4. 궁극적으로 구성이 정확하다고 가정하면 3단계의 루프가 MTA에서 종료됩니다. 그러면 MTA는 전자 메일을 로컬로 전달할 수 있거나 보낸 사람에게 메시지가 수락되지 않을 것이라고 정식으로 알릴 수 있습니다.
  5. 최종 MTA는 지정된 MDA에 이메일을 전달한 후 실제 전달을 처리합니다. 이것은대개이는 수신자의 사서함에 놓으면 이루어지지만 거의 모든 항목으로 구성할 수 있습니다.

당신이 요청하는 것은 5단계에서 이미 완료되었습니다. 당신이 원하는 것은 특정 이메일 주소에 대한 배달 규칙을 설정하고 이를 사람이 읽을 수 있도록 사서함으로 전달하는 대신 이메일을 로컬 프로그램으로 파이프하는 것입니다. 특정 PHP 스크립트일 필요는 없습니다.어느PHP 스크립트 - 실행 가능한 한) 이메일 입력을 구문 분석하고 이를 사용하여 데이터베이스의 항목을 채웁니다.

안톤의 대답메일 서버에 추가 이메일 주소와 관련 사용자를 추가할 수 있다는 가정하에 파이프라인을 설정하는 가장 쉬운 방법이 설명되어 있습니다. 그렇지 않은 경우 더욱 창의적이어야 하지만 귀하, ISP 및 웹 사이트 도메인 이름 간의 합의에 대한 추가 정보가 없으면 우리는 그 이상의 조언을 제공할 수 없습니다.

답변3

답변4

PHP 애플리케이션에서 구문 분석하려는지 아니면 서버에서만 구문 분석하려는지 모르겠습니다. 두 가지 변형 모두 메일 클라이언트를 사용하지 않고도 구현할 수 있습니다.

1) Bash/SH 또는 기타 스크립팅 언어. 이 같은:

#!/bin/bash

MyUSER="SET-MYSQL-USER-NAME"
MyPASS="SET-PASSWORD"
MyHOST="localhost"
MyDB="SET-DB"

for mFile in `grep -iR 'WHAT TO FIND???' .`
do
  # here do something with your e-mail z.B:
  mysql -u $MyUSER -h $MyHOST -p$MyPASS MyDB << EOF
      insert into ...
      values ...;
  EOF
done

2) 또는 매우 간단한 애플리케이션 측(PHP의) 파서입니다. 이 라이브러리를 살펴보십시오.https://github.com/plancake/official-library-php-email-parser

관련 정보