Advanced Email Parcer 검토 - 이메일 처리 자동화 소프트웨어. 우리는 우편물에서 편지를 꺼냅니다. 우리는 IMAP 프로토콜을 사용하여 작업합니다.

» PHP Sendmail 스크립트

PHPSendMail

양식을 사용하려면 이메일 설정만 입력하면 됩니다. 일반적으로 스크립트는 즉시 사용할 수 있으며 PHP 프로세서를 사용하는 HTML 사이트에 대한 이 피드백 양식은 소규모 사이트, 명함 사이트에 이상적입니다.

| 다운로드 횟수: 회

간단한 PHP 메일 보내기

이 매우 쉬운 PHP 스크립트를 사용하면 웹사이트 방문자가 피드백 양식을 통해 직접 이메일을 보낼 수 있습니다.

| 다운로드 횟수: 회

양식을 이메일로 보내기 위한 PHP + AJAX 스크립트

양식에서 이메일로 데이터를 보내기 위한 범용 스크립트입니다. 이 스크립트는 랜딩 페이지, 명함 사이트 등과 같은 사이트에 이상적입니다.

| 다운로드 횟수: 회

보안 문자가 포함된 PHP 메일러 최종

스크립트는 양식을 표시하고 필수 필드를 입력하면 이메일로 메시지를 보냅니다. 스크립트에는 로봇에 대한 보호 기능이 내장되어 있습니다. 편지를 보내기 전에 보안 문자를 입력해야 합니다.

| 다운로드 횟수: 회

GentleSource 양식 메일

선택할 수 있는 두 가지 옵션이 있습니다. 사용자가 리디렉션을 사용하여 텍스트가 포함된 감사 페이지로 이동하거나 메시지가 성공적으로 전송되었다는 정보가 사용자에게 표시됩니다.

| 다운로드 횟수: 회

마이크로 메일러

Micro Mailer는 귀하와 귀하의 웹사이트 방문자가 모든 수신자에게 편지를 보낼 수 있도록 하는 작은 PHP 스크립트입니다.

| 다운로드 횟수: 회

Web4you-FM

Web4you-FM 귀하의 웹사이트에서 편지를 보냅니다. 기능: 1 - 수신자와 수신자 수(1~4)를 선택하세요. 2 - 양식이 올바르게 작성되었는지 확인하세요. 누구에게. 이름, 글자만...

| v.1.0 | 다운로드 횟수: 회

가벼운 PHP 문의 양식

피드백 양식을 통해 메일을 보내는 스크립트는 너무 간단해서 PHP/HTML을 모르는 사람이라도 쉽게 사용할 수 있습니다...

| 다운로드 횟수: 회

도도스메일

DodosMail은 웹사이트의 피드백 양식을 통해 이메일을 보낼 수 있는 설치하기 쉬운 PHP 스크립트입니다. php 파일을 업로드해주시면 됩니다.

| v.2.5 | 다운로드 횟수: 회

PHP 문의 양식

PHP 문의 양식 스크립트에는 다음 기능이 포함되어 있습니다. 1) 스팸 방지 기능. 사용자는 보안 문자라고도 알려진 보안 코드를 입력해야 합니다.

| 다운로드 횟수: 회

TPCS 연락처(이메일 양식)

이 TPCS 연락처 스크립트를 사용하면 방문자가 피드백 양식을 통해 귀하에게 연락할 수 있습니다. 모든 정보는 이메일로 전송됩니다.

| 다운로드 횟수: 회

피드백 메일러

피드백 메일러는 웹사이트 피드백 양식의 모든 정보를 이메일로 직접 리디렉션합니다. 이 작은 스크립트는 모든 요청을 매우 빠르게 처리합니다.

| v.1.2 | 다운로드 횟수: 회

쉬운 PHP 문의 양식

스팸을 방지하기 위해 코드 확인(CAPTCHA)이 포함된 피드백 양식을 사용하여 웹마스터에게 연락하기 위한 간단하지만 안전한 PHP 스크립트입니다.

| v.2.1 | 다운로드 횟수: 회

PHP 문의 양식(이미지 확인 포함)

사용자에게 이미지의 보안 코드를 입력하도록 요청하여 스팸을 방지하는 문의 양식입니다. 매우 간단한 피드백 양식을 사용하면 조만간 스패머가 자동으로 광고를 보내는 방법을 찾을 것입니다.

| 다운로드 횟수: 회

CW3 양식 메일

스크립트는 설치가 매우 쉽고 사이트 모양에 맞게 사용자 정의할 수 있습니다. 피드백 양식의 크기와 편지가 성공적으로 전송되었을 때 표시되는 메시지 텍스트를 변경할 수 있습니다.

| v.3.30 | 다운로드 횟수: 회

reCAPTCHA 문의 양식

이 무료 PHP 피드백 스크립트를 사용하면 방문자로부터 이메일이나 피드백을 훨씬 쉽게 받을 수 있습니다. 방문자는 필요한 모든 연락처 필드만 작성하면 됩니다...

| v.1.4 | 다운로드 횟수: 회

ph메일러

phMailer는 PHP 언어에 내장된 mail() 기능 덕분에 파일 첨부를 지원하는 매우 간단한 PHP 피드백 스크립트입니다.


전자 메일을 사용하는 모든 사람(그리고 대부분의 인터넷 사용자)은 필요한 메시지를 빠르고 쉽게 찾을 수 있도록 작업하기 편리한 방식으로 들어오는 메시지를 배치하려고 합니다. 이를 위해 사서함에 추가 폴더가 생성되고 사용되는 이메일 클라이언트에 따라 수신 편지가 어떤 방식으로든 정렬됩니다. 대부분의 경우 사용자가 가입한 우편 주소와 메일링 리스트를 사용하여 처리가 수행됩니다. 메시지 제목과 키워드별로 정렬할 수 있습니다. 하지만 이 모든 작업은 이메일 프로그램에서 수행됩니다.

그러나 Tweek Marketing 회사는 유사한 계획을 사용하면서 적용 가능성을 확대할 것을 제안합니다. AEP(Advanced Email Parcer) 솔루션에서는 수신 통신이 이메일 클라이언트 외부에서 처리되며 ActiveX 컨트롤을 사용하여 이 기술을 지원하는 모든 프로그램과 프로그램을 통합할 수 있습니다. 통합은 Microsoft Active Scripting 기술을 기반으로 한 스크립팅 언어를 사용하여 수행됩니다. JScript, VBScript 등 대부분의 스크립팅 언어를 사용할 수 있습니다.

이 프로그램을 사용하면 일부 일상적인 작업을 자동화할 수 있습니다. 예를 들어 다음을 자동화할 수 있습니다.

  • 이메일로 전송된 주문 양식 및 설문지 처리
  • 주문 데이터베이스 작성;
  • 메일 흐름 정렬 및 리디렉션
  • 메일링 리스트 편집, 다양한 통계 유지
  • 자동 응답 서비스, 이메일 로봇 생성;
  • 중요한 이메일 메시지를 백업하세요.

프로그램은 두 가지 주요 모드, 즉 AEP가 메일 서버와 클라이언트 사이의 인터페이스에서 중간 프로세서 역할을 하는 중간 모드와 프로그램이 메일 서버에 독립적으로 연결하고 계정에 따라 수집기 모드로 작동할 수 있습니다. 설정, 메시지 처리 및 삭제하거나 서버에 남겨둡니다(계정 설정에 따라 다름). 중개자로 연결하면 메일 클라이언트 연결이 재구성됩니다. 새로운 설정은 클라이언트가 서버가 아닌 중간 프로세서에 연결되는 스팸 필터 작업 시 설정과 유사합니다. (이 경우 파서와 스팸 필터를 모두 설치하는 방법이 궁금합니다.)

AEP에서 수신한 메시지는 필터 및 처리 구성 요소로 구성된 규칙 목록을 사용하여 처리됩니다. 필터는 순차적으로 실행되며 메시지를 처리할지 여부를 결정합니다. 규칙 중 하나에 해당하는 메시지는 대기열에 배치되며 메일 서버에서 모든 새 메시지가 다운로드된 후 처리가 시작됩니다. 처리 결과는 나중에 모든 이벤트가 기록되는 로그에서 볼 수 있습니다.

처리 구성 요소는 메시지에서 특정 데이터를 추출, 수정 및 저장합니다. 처리하는 동안 데이터를 외부 파일에 저장하고, 다른 프로그램으로 전송하고, 스크립트를 사용하여 처리하고, 템플릿을 사용하여 변경하는 것이 가능합니다. 규칙과 구성 요소를 생성하려면 테스트 데이터를 기반으로 디버깅을 제공하는 특수 생성자가 사용됩니다(파일 형식으로 생성될 수 있거나 수신 메시지에 대해 디버깅이 수행될 수 있음).

규칙 형성의 순서는 온라인 투어 형태로 개발자 웹사이트에 매우 자세히 표시됩니다. 문서에 포함되어 있지 않은 것은 유감입니다. 그러면 작업하기가 훨씬 더 간단하고 설정을 익히는 것이 더 쉬울 것입니다. 그럼에도 불구하고 규칙이 어떻게 형성되는지 살펴 보겠습니다.

예를 들어, 수신 메시지를 기반으로 메일링 리스트를 만드는 방법이 있습니다. 새 규칙을 만들고 이름을 지정해 보겠습니다. 가장 먼저 해야 할 일은 들어오는 메시지를 처리하는 것입니다. 특정 제목의 편지를 보낸 응답자만이 메일링 리스트에 포함된다고 가정하겠습니다. 따라서 이 헤더가 있는 문자를 선택하려면 첫 번째 필터를 구성해야 합니다. 규칙에 필터(제목 필터)를 추가하고 속성의 포함 필드에 필요한 제목을 추가해 보겠습니다.

이 필터로 선택되는 메시지 중에서 보낸 사람의 이름과 주소를 선택해야 합니다. 이를 위해 샘플링 기능(Line Parcer)을 사용합니다. 사용 가능한 기능 트리에서 생성된 규칙으로 끌어서 추가하면 됩니다. 두 가지 기능이 있어야 합니다. 하나는 보낸 사람의 이름이 포함된 필드를 처리하고, 두 번째는 주소(보낸 사람 이름 및 보낸 사람 이메일)가 포함된 필드를 처리합니다. 선택한 데이터는 정의한 변수에 저장됩니다. 이제 그들은 구원받아야 합니다.

수신된 데이터를 저장하려면 File Writer 기능을 사용하세요. 이전 함수와 동일한 방법으로 규칙에 추가해 보겠습니다. 이제 해당 속성을 구성해야 합니다. 여기에는 정보가 기록될 파일의 ​​이름이 포함됩니다. 정보 기록 템플릿에는 필요한 데이터가 포함된 변수의 이름을 입력하겠습니다. 다음 항목이 새 줄에서 시작되도록 하려면 캐리지 리턴이 있는 변수로 줄을 끝내야 합니다. 그리고 새 파일에 쓰거나 기존 파일에 추가하는 옵션을 선택하십시오. (새 파일인 경우 접두사를 할당하여 고유한 파일 이름을 형성할 수 있습니다.)

남은 것은 규칙이 올바르게 준비되었는지 확인하는 것뿐입니다. 이렇게 하려면 테스트 메시지가 포함된 파일을 생성하고 제어판을 통해 규칙에 업로드합니다(디버그 메시지 섹션에 표시됨). 이제 테스트 프로세스를 실행하고 디버그 로그에서 결과를 볼 수 있습니다. 이러한 결과는 규칙에 오류가 있는지 여부를 명확하게 판단하는 데 도움이 됩니다. 오류가 없으면 규칙을 사용하여 수신 메일을 처리할 수 있습니다. 규칙이 하나가 아닌 여러 개인 경우 동일한 메시지를 여러 규칙으로 처리할 수 있습니다. 이 옵션을 제공하려면 규칙 속성에서 다음 규칙 계속 항목을 선택하세요.

첨부 파일을 처리하고 자동으로 저장하는 규칙을 만들 수도 있습니다. 수신 처리는 메시지 헤더 분석을 기반으로 수행됩니다. 첨부 파일의 경우 multipart라는 단어가 포함되어야 합니다. 첨부 파일을 디스크에 저장하는 특수 기능인 Attachments Writer가 있습니다. 이 구성 요소를 사용하면 저장된 파일의 이름이 저장될 폴더뿐만 아니라 저장될 변수 목록을 지정할 수 있습니다. 동일한 이름의 파일이 표시되는 것을 방지하려면 파일 이름에 날짜와 시간을 추가하면 됩니다. 이 데이터는 첨부 파일이 디스크에 저장될 때 수집됩니다.

추가 처리로 저장할 파일을 지정할 수 있습니다. 예를 들어 특정 확장자를 가진 파일이어야 합니다. 이렇게 하려면 FileSystemObject의 DeleteFile 함수를 사용해야 합니다. 이 개체는 JScript 구성 요소 코드에서 생성되고 사용됩니다.

응답자의 요청에 응답하기 위한 규칙을 만들 수도 있습니다. 예를 들어 특정 문서를 요청하는 경우입니다. 이를 위해 편지 제목은 특정 형식을 가져야 하며 편지 자체는 특정 주소로 보내야 한다고 결정하겠습니다. 따라서 먼저 이 주소에 대한 문자를 선택한 다음 제목별로 메시지를 필터링합니다. (주소별로 필터링하려면 수신자 이메일 필터를 사용하세요.)

다음 단계는 보낸 사람의 주소를 확인하는 것입니다(위에서 설명한 것과 유사). 다음으로 메시지 제목에서 사용자가 요청하는 문서의 이름을 선택해야 합니다. 우리는 이 데이터를 우리가 정의한 변수에 저장합니다. 응답을 보내려면 SMTP Sender 기능을 사용하십시오. (단, 그 전에 요청한 문서의 이름이 올바른지 확인해야 하며 이는 Simple Condition 기능을 사용하여 수행할 수 있습니다.)

SMTP 발신자 기능의 경우 속성에서 편지 제목과 보낼 텍스트를 표시합니다. 응답자가 요청한 문서는 첨부 파일로 전송됩니다. 사용자가 다양한 문서를 요청할 수 있는 경우 각 문서를 보내려면 고유한 처리 기능을 만들어야 합니다. 이는 처음 생성된 처리를 복사하고 해당 속성을 조정하여 수행할 수 있습니다.

프로그램을 사용하여 구현된 예가 여기에 제시되었습니다. 그러나 다른 옵션을 생각해 낼 수 있습니다. 이 프로그램에는 매우 다양한 기능과 다양한 기능이 있습니다. 이메일 클라이언트에서 메시지 처리기를 설정하는 것과 비교할 때 AEP 설정은 더 복잡합니다. 여기서는 일반 사용자가 아닌 프로그래머에게 더 초점을 맞추기 때문입니다. 하지만 이 프로그램은 회사에서 사용하도록 되어 있기 때문에 아마도 이 시스템을 구성할 수 있는 시스템 관리자가 있을 것입니다.


이메일은 정보 교환을 위한 가장 중요한 도구이며 업무용으로 사용하는 경우 아마도 처음부터 처리하는 데 필요한 데이터가 포함된 편지가 우편으로 도착하는 상황에 직면했을 것입니다. Yandex 메일에 대해 이야기하겠습니다. 이 기사에서는 독자 여러분, 사서함에서 편지를 가져오는 방법에 대한 경험을 공유하고 편지에 첨부 파일이 포함되어 있는 경우 옵션을 살펴보겠습니다. 이를 감지하는 방법 그리고 추가 조작을 위해 결국 다운로드합니다.

나 자신도 꽤 오래 전에 이 문제에 직면했고, Yandex 이메일 프로그램 작업 경험이 거의 없었음에도 불구하고 필요한 결과를 얻기 위해 많은 시간과 노력을 들였습니다. 나의 첫 번째 실수는 많은 웹 개발자처럼 인터넷에서 유사한 예를 집중적으로 검색하기 시작했지만 Yandex 도움말 자체를 사용하지 않았다는 것입니다. 예, 매우 작지만 유용한 정보가 있지만 이러한 종류의 스크립트를 작성하는 것은 충분히 중요합니다(자세한 내용은 아래 참조). 그 당시에는 스크립트를 작성해야 했는데 그 핵심은 xls 형식의 상품 가격표가 포함된 편지를 하루에 한 번 고객의 Yandex 메일로 전송하고 처리해야 했습니다(구문 분석 및 비교). 온라인 상점 데이터베이스의 데이터 및 결과에 따라 어딘가에서 무언가를 업데이트하거나 비활성화하거나 활성화합니다.

그리고 대본을 작성하기 전에 가장 먼저 할 일은 9가지 사항으로 구성된 실행 계획의 개요를 작성하는 것입니다.

  1. 메일 프로토콜을 통해 액세스할 수 있도록 메일을 구성해 보겠습니다.
  2. PHP 애플리케이션의 구조를 개략적으로 설명하고 파일 인코딩을 결정해 보겠습니다.
  3. IMAP 메일 프로토콜과 그 기능에 대해 알아봅시다.
  4. 이 단계에서는 계정 로그인 및 비밀번호를 사용하여 Yandex 메일에 연결하고 오류를 추적해 보겠습니다.
  5. 편지의 헤더를 처리해 보겠습니다.
  6. 우리는 편지의 본문을 받아 처리할 것입니다.
  7. 첨부파일을 받아 저장합니다.
  8. 완료된 작업을 시각화하십시오.
  9. 결론을 내리자.

주제는 꽤 방대하지만 모든 내용을 최대한 간결하고 명확하게 전달하려고 노력하겠습니다. 시작하자.

메일 설정

아래 스크린샷과 같이 메일로 이동하여 설정으로 이동합니다.



이제 IMAP 및 POP3 프로토콜을 통한 메일 작업 설정이 완료되었습니다.


여기에서 많은 사람들이 위 이미지와 같은 그림을 보게 될 것입니다. 그러나 액세스가 비활성화되는 경우를 두 번 이상 경험했습니다. 따라서 설정이 다른 경우 스크린샷과 같이 확인란을 선택하세요. 가장 중요한 것은 IMAP 프로토콜을 통한 액세스를 허용하는 것입니다.

애플리케이션 구조 및 인코딩

이 예에서는 필요하지 않기 때문에 복잡한 애플리케이션 구조를 만들지 않고 필요한 것만 추가합니다(저는 Sublime Text 편집기에서 작업합니다).


  • tmp - 편지에서 첨부 파일을 다운로드할 폴더입니다.
  • .htaccess – 아파치 서버가 있는 경우 서버 부분 설정;
  • function.php – 여기에 함수를 추가하겠습니다.
  • main.css – 스타일 파일;
  • index.php – 애플리케이션 진입점;

UTF-8 인코딩을 사용하므로 즉시 .htaccess 파일을 다음 줄로 채웁니다.

AddDefaultCharset utf-8 AddCharset utf-8 * CharsetSourceEnc utf-8 CharsetDefault utf-8

IMAP 프로토콜

첫 번째 지점으로 돌아가서 POP3 프로토콜을 통해 Yandex 메일로 작업할 수도 있음을 알 수 있습니다. 그렇다면 왜 IMAP인가? 두 가지 중에서 IMAP은 POP3의 새로운 대안이므로 많은 장점이 있지만(Wikipedia를 사용하여 연구할 수 있음) 우리의 경우 선택은 그것이 더 새롭다는 사실에만 영향을 받았습니다. 개인적으로 편지를 받는 특정 작업에 무엇을 사용하는지에는 큰 차이가 없다고 생각합니다. 어떤 이유로 POP3 프로토콜을 사용해야 하는 경우 IMAP에 적용되는 모든 기능이 작동합니다.

IMAP 프로토콜을 사용하여 Yandex 메일에 연결

메일에 연결하려면 메일 로그인, 비밀번호, 메일 서버 주소라는 세 가지 매개변수를 알아야 합니다. 두 매개변수에 문제가 없으면 Yandex 도움말에서 두 번째 매개변수를 찾을 수 있습니다. 나는 위에서 이것 (나에게 발생한 문제)에 대해 썼고 세 번째 매개 변수가 잘못 지정된 많은 예를 인터넷에 썼고 연결 단계에서 이미 오류가 발생했다고 상상해보십시오. 이것은 최소한 불쾌합니다. . 나는 덤불 주위를 두드리지 않고 즉시 Yandex 페이지에 대한 직접 링크를 제공할 것입니다. 이메일 프로그램 설정. 우리가 연결해야 할 사항은 정확히 다음과 같습니다.


이제 코드 자체로 직접 이동할 수 있습니다.

Header("콘텐츠 유형: text/html; charset=utf-8"); error_reporting(0); require_once("functions.php"); $mail_login = "yandex_mail"; $mail_password = "mail_password"; $mail_imap = "(imap.yandex.ru:993/imap/ssl)"; // 고려된 파일 형식 목록 $mail_filetypes = array("MSWORD"); $connection = imap_open($mail_imap, $mail_login, $mail_password); if(!$connection)( echo("메일 연결 오류 - ".$mail_login); 종료; )else( $msg_num = imap_num_msg($connection); $mails_data = array(); for($i = 1; $ 나<= $msg_num; $i++){ /* Работать с каждым письмом из IMAP-потока будем тут */ } } imap_close($connection);

우선 헤더를 사용하여 UTF-8 인코딩을 추가로 지정하고 오류 표시를 비활성화합니다. function.php 파일을 연결하고 위에서 설명한 설정을 지정합니다. $mail_filetypes 배열에서 필요한 파일 형식을 지정합니다. 불필요한 쓰레기를 제거하고 특정 파일을 받기 위해 이렇게 하기로 결정되었습니다. 메일에 대한 연결은 imap_open() 함수를 사용하여 이루어지며, 성공하면 IMAP 스트림을 반환하고, 실패하면 false를 반환합니다(그러나 오류 표시를 활성화한 경우에는 그렇지 않습니다). 연결 표시기를 전달하여 imap_close() 함수를 사용하여 스트림 작업을 마칩니다. 이 두 함수 사이에는 일반적인 조건문이 있습니다.

연결이 성공하면 imap_num_msg()를 사용하여 메일의 문자 수를 알아내고 스트림에서 필요한 모든 데이터를 배치할 배열을 추가합니다. 다음은 각 문자가 해당 번호(1부터 시작하는 번호)별로 처리되는 주기입니다.

편지 헤더 처리하기

문자의 헤더를 얻으려면 imap_header() 함수를 사용해야 하며 두 번째 매개변수는 문자 번호입니다.

// 문자 헤더 $msg_header = imap_header($connection, $i);

이 단계에서는 필요한 데이터를 추출하여 $mails_data 배열에 저장할 개체를 받게 됩니다. 다음은 문자 중 하나의 예입니다.

이 스크린샷은 모든 데이터가 중복되어 있음을 보여주지만 이것이 특별한 역할을 하는 것은 아니며, 우리는 더 편리한 것을 사용합니다. 훨씬 더 중요한 것은 편지 제목 줄의 인코딩입니다. 그것은 무엇이든 될 수 있으며 이 순간은 통제되어야 합니다. 편지 본문과 첨부파일도 마찬가지다.

$mails_data[$i]["time"] = 시간($msg_header->MailDate); $mails_data[$i]["날짜"] = $msg_header->MailDate; foreach($msg_header->to as $data)( $mails_data[$i]["to"] = $data->mailbox."@".$data->host; ) foreach($msg_header->from as $ 데이터)( $mails_data[$i]["from"] = $data->mailbox."@".$data->host; )

우리는 타임 스탬프, 편지 수신 날짜, 수신자와 발신자의 이메일을 배열에 저장하고 편지 제목 수신을 진행합니다. 이렇게 하려면 먼저 function.php 파일에 세 가지 함수를 추가해야 합니다.

함수 check_utf8($charset)( if(strtolower($charset) != "utf-8")( return false; ) return true; ) 함수 Convert_to_utf8($in_charset, $str)( return iconv(strtolower($in_charset), "utf-8", $str); ) 함수 get_imap_title($str)( $mime = imap_mime_header_decode($str); $title = ""; foreach($mime as $key => $m)( if(!check_utf8 ($m->charset))( $title .= Convert_to_utf8($m->charset, $m->text); )else( $title .= $m->text; ) ) return $title )

이름은 설명이 필요하지 않으며 마지막 기능만 설명하는 것이 가치가 있다고 생각합니다. 인코딩된 문자열을 취하고 imap_mime_header_decode()를 사용하여 이를 디코딩하여 각각 charset과 text라는 두 가지 속성을 가진 객체 배열을 생성합니다. 그러면 모든 것이 간단해집니다. 루프에서 인코딩을 확인하고 이를 UTF-8로 변환한 다음 주제를 단일 헤더로 병합하고 반환합니다.

이제 index.php 파일로 돌아가서 마지막 매개변수를 꺼내보겠습니다.

$mails_data[$i]["title"] = get_imap_title($msg_header->제목);

이것으로 이메일 헤더 처리가 완료됩니다.

편지 본문 작업

우리는 문자의 처리된 데이터를 사용하여 점차적으로 배열을 형성하고 이제 본문을 얻으려면 두 가지 기능을 사용해야 합니다.

// 이메일 본문 $msg_structure = imap_fetchstructure($connection, $i); $msg_body = imap_fetchbody($connection, $i, 1);

첫 번째 변수 $msg_structure에는 문자의 구조가 포함되어 있습니다. 이는 많은 유용한 정보를 찾을 수 있는 개체이며, 이 개체의 일부 예가 아래에 나와 있습니다.

문제를 해결하는 데 중요한 것은 무엇입니까?

  • 유형 – 편지 본문의 기본 유형으로, 우편으로 전달되는 내용에 따라 0에서 7까지 다양합니다(각 숫자는 편지 본문에 있는 자체 콘텐츠 유형을 나타냅니다).
  • 인코딩 – 본문 전송 인코딩은 0에서 5까지 다양합니다(0 - 7BIT, 1 - 8BIT, 2 - BINARY, 3 - BASE64, 4 - QUOTED-PRINTABLE, 5 - 기타).
  • parts – 상위 레벨에서 객체의 구조에 해당하는 문자 부분의 배열입니다.

부품 속성을 자세히 살펴보겠습니다. 가장 먼저 말해야 할 것은 이 배열의 제로 셀에는 문자의 텍스트와 정확히 일치하고 처음부터 첨부된 파일까지의 정보가 있다는 것입니다. 또한 각 객체에는 유형이 표시되고 매개변수에는 인코딩이 명시적 및 암시적으로 표시됩니다.

문자의 구조는 원하는 대로 중첩될 수 있습니다. 적어도 4~5개 레벨에 도달한 경우가 있었기 때문에 그들이 말하는 것처럼 문자를 분해하려면 앞으로 재귀 함수를 작성해야 합니다.

두 번째 함수 imap_fetchbody()는 메시지의 특정 부분을 대부분 인코딩된 형식으로 가져옵니다.

이제 편지 본문의 처리된 버전을 저장할 변수를 추가해 보겠습니다.

$body = "";

function.php 파일로 돌아가서 재귀 함수를 작성해 보겠습니다.

함수 recursive_search($structure)( $encoding = ""; if($structure->subtype == "HTML" || $structure->type == 0)( if($structure->parameters->attribute == " charset")( $charset = $structure->parameters->value; ) return array("encoding" => $structure->encoding, "charset" => strtolower($charset), "subtype" => $structure- >하위 유형); )else( if(isset($structure->parts))( return recursive_search($structure->parts); )else( if($structure->parameters->attribute == "charset")( $ charset = $structure->parameters->value; ) return array("encoding" => $structure->encoding, "charset" => strtolower($charset), "subtype" => $structure->subtype ) ) )

recursive_search() 함수는 하나의 매개변수(문자 구조)를 사용하며, 여기서 순차적으로 속성을 확인하고 세 가지 매개변수(encoding, charset, subtype)를 가져옵니다. 재귀의 종료점은 셀 0이 있는 parts 속성이 없다는 것입니다. 여기서는 더 이상 설명할 것이 없습니다. 코드를 보면 무슨 일이 어떻게 일어나고 있는지 명확하게 알 수 있습니다.

나중에 필요할 문자 본문을 변환하는 함수를 하나 더 추가해 보겠습니다.

함수 구조_encoding($encoding, $msg_body)( switch((int) $encoding)( 사례 4: $body = imap_qprint($msg_body); 중단; 사례 3: $body = imap_base64($msg_body); 중단; 사례 2: $body = imap_binary($msg_body); 사례 1: $body = imap_8bit;

$recursive_data = 재귀_검색($msg_structure); if($recursive_data["encoding"] == 0 || $recursive_data["encoding"] == 1)( $body = $msg_body; ) if($recursive_data["encoding"] == 4)( $body = 구조_encoding($recursive_data["encoding"], $msg_body); if($recursive_data["encoding"] == 3)( $body = 구조_encoding($recursive_data["encoding"], $msg_body); ) if($ recursive_data ["encoding"] == 2)( $body = 구조_encoding($recursive_data["encoding"], $msg_body); ) if(!check_utf8($recursive_data["charset"]))( $body = Convert_to_utf8($ recursive_data ["문자 집합"], $msg_body )

재귀로부터 데이터를 받은 후 점차적으로 전송 인코딩을 확인하고 이에 따라 적절한 매개변수를 사용하여 구조_인코딩() 함수를 호출합니다. 마지막 조건부 연산자에서는 UTF-8로 작업하고 있다는 점을 고려하고 모든 조작 후에 다른 인코딩을 얻으면 다시 인코딩합니다.

선을 그리는 것이 남아 있습니다.

$mails_data[$i]["body"] = base64_encode($body);

편지 본문에는 일반 텍스트와 자체 스타일이 있는 HTML 마크업이 모두 포함될 수 있습니다. 시각화 중에 레이아웃이 변경되지 않도록 BASE64로 인코딩합니다.

첨부 파일

이제 애플리케이션 작성이 점차적으로 끝나가고 있습니다.

// 첨부파일 if(isset($msg_structure->parts))( for($j = 1, $f = 2; $j< count($msg_structure->부속); $j++, $f++)( if(in_array($msg_structure->parts[$j]->하위 유형, $mail_filetypes))( $mails_data[$i]["attachs"][$j]["type"] = $msg_structure->parts[$j]->하위 유형; $mails_data[$i]["attachs"][$j]["size"] = $msg_structure->parts[$j]->bytes[; ]["attachs"][$j]["name"] = get_imap_title($msg_structure->parts[$j]->parameters->value); $mails_data[$i]["attachs"][$ j] ["file"] = Structure_encoding($msg_structure->parts[$j]->encoding, imap_fetchbody($connection, $i, $f)) file_put_contents("tmp/".iconv("utf-8" , " cp1251", $mails_data[$i]["attachs"][$j]["name"]), $mails_data[$i]["attachs"][$j]["file"] ) ) )

첨부된 파일을 처리하는 부분은 훨씬 작아졌습니다. 이제 왜 그럴까요? 파일 작업 원리는 편지 본문 작업과 유사합니다. 단, 이 단계에서는 이를 parts 속성 배열에 넣어서 시작합니다. 유형 목록을 확인하여 불필요한 유형을 필터링하는 것을 잊지 마세요. 간단한 file_put_contents() 함수를 사용하여 파일을 서버의 tmp 폴더에 저장합니다.

결과를 보고 싶어요!

작업 과정에서 $mails_data 데이터로 배열을 구성했으며 시각화를 위해 이미 직접 작업할 것입니다. 이 기사에서는 내 우편물에 포함된 테스트 편지를 사용했습니다. 최종적으로 무엇을 얻었는지 살펴보겠습니다.


이것이 대략적인 배열의 모습입니다. 불행히도 개인적인 이유로 파일 내용을 숨겨야 했습니다. 이제 HTML 마크업으로 넘어가겠습니다.

Yandex 메일 |<?php echo($mail_login);?>

Yandex 메일(받은 편지함) |

글자 수:

편지 없음
$mail):?>
타임스탬프:
날짜:
누구에게:
에서:
주제:
base64의 문자:
첨부 파일:
$첨부):?>
유형:
크기(바이트):
이름:
몸:


스타일은 결국 특별한 역할을 하지 않으므로 여기에 스타일을 추가하지 않겠습니다.


그리고 서버의 tmp 폴더에 파일이 있습니다.

결론

기사의 모든 단계를 완료하면 원하는 결과를 얻을 수 있지만 모든 것이 보이는 것처럼 간단하지 않습니다. 고려해야 할 함정이 있습니다. 특정 작업에 대한 스크립트를 작성할 때 모든 단계에서 인코딩을 모니터링해야 합니다. 문자는 서로 다른 이메일 계정에서 올 수 있으며 각 계정에는 고유한 뉘앙스가 있을 수 있습니다. Yandex 메일과 해당 문서가 주기적으로 업데이트되므로 메일 프로그램 작업을 위한 다양한 하위 항목이 나타날 수 있다는 점을 고려하는 것도 중요합니다. 그게 전부입니다. Yandex 메일의 낮은 수준 버전으로 작업할 때 이 기사가 유용하길 바랍니다.

첨부파일이 포함된 이메일을 받을 수 없습니다(
메일이 파일(어떤 파일이든)과 함께 전송되면 편지의 텍스트가 사라집니다.

도와주세요, 제발

분명합니다... Yandex에서 Yandex로 메일을 전송하면 모든 것이 잘 됩니다...
어느 정도 알아냈어
하지만 이 스크립트가 Word 이외의 다른 파일을 허용하지 않는 이유는 확실하지 않습니다... 그 옆에 MSWORD 줄이 있고 쉼표로 구분되어 있으며 pdf, zhpg 및 png를 입력합니다. Word만 정상적으로 읽고 저장합니다.... 이 같은



질문이 있으신가요?

오타 신고

편집자에게 전송될 텍스트: