2013-06-12 2 views
3

필자는 우편 (특정 형식으로되어 있음)을 읽어야한다는 요구 사항을 가지고 있습니다. 이메일은 형식 기본적 것이 포함와 같은 일부 필드 정보 :전자 메일 읽기 및 데이터를 PHP로 데이터베이스에 저장

Name: xyz 
Zip: 33402 

지금 우리가해야 할 일을 데이터베이스의 '우편 번호'항목에 '이름'열 및 "우편"의 "이름"을 저장하는 것입니다 표.

PHP 스크립트를 통해 IMAP을 통해 메일을 읽을 수 있으며 "BODY"를 가져올 수 있지만 필드를 읽을 수 있도록 길을 찾는 데 도움이 필요합니다.

어떤 방법 으로든/자신의 옵션을 공유하십시오.

+0

죄송합니다. 전 애견이 없습니다. 파싱도. 내게 도움이되는지 아닌지 확인하기 위해 참고 자료를 제공해 주시겠습니까? – Jacklish

답변

1

문제가 실제로 구문 분석 만하는 경우이 경우 간단한 정규식을 권합니다.

그러나 내가 추천하는 것은 명명 된 패턴을 사용하는 것이므로 색인을 혼동하지 말고 maby가 잘못된 일치를 갖습니다. 메일이 더 들어갔을 경우

$str = <<<body 
Name: xyz 
Zip: 33402 
body; 

if(preg_match('/(?P<name>\w+): (?P<zip>\d+)/', $str, $matches)) { 
    print_r($matches); 

    // db beeing your database connector, for example pdo 

    $sql = "INSERT INTO mytable (name,zip) VALUES(".$db->quote($matches['name']).",".$db->quote($matches['zip']); 

    echo $sql; 
} else { 
    //mail does not correspond to pattern! 
} 

, preg_match를 여러 번 사용 : 여기

빠른 예입니다. 각 필드마다 별도로 구문 분석하려고 할 수 있습니다. 더 많은 필드가있는 경우 거대한 정규 표현식을 작성하는 것은 유지하기가 매우 어렵습니다. 또한 필드의 순서를 고려해야합니다.

그러나 이것은 모두 매우 강력하지는 않습니다. 특히 필드의 내용을 고려해야합니다.

누군가 줄 바꿈이나 쉼표가있는 이름이 있으면 어떻게됩니까?

나는 정말로 메일 본문을 위조하기 전에 더 나은 형식으로 두는 것이 좋습니다. 탈출을 다루는 사람. 예를 들어 CSV 또는 (내가 가장 좋아하는) JSON.

+0

답장을 보내 주셔서 감사합니다. 하지만 난 약 15 필드를 입력하고 전자 메일을 보내는 것은 CSV를 사용할 수 없으므로 클라이언트의 필수 요구 사항 중 하나입니다 – Jacklish

+0

당신은 csv/json을 이메일로 보낼 수 있습니까? 전자 메일은 어떻게 생성됩니까? 그 일을 끝내지 못하니? 데이터를 어떻게 든 직렬화 할 수 있습니다 (예 : json). 그러면 다른 쪽 끝에서 데이터를 직렬화 할 수 있습니다. 파싱은 필요하지 않습니다. 또한 오류가 적은 공간 ... –

관련 문제