2010-08-12 20 views
5

Powiem tylko ... Nie mam pojęcia, jak bym to zrobił :).Jak wstawić przychodzącą wiadomość e-mail do bazy danych mySQL?

Innymi słowy, chodzi o to, że otrzymujesz wiadomość od jakiegoś faceta [email protected], odpowiadasz za własna treść, a na [email protected] Twoja odpowiedź jest przechowywana w jego bazie danych.

Dodatkowo: Używam dzielonego hostingu, koduję w PHP, rozumiem ASP. Jeśli masz pomysł, jak napisać ten skrypt w innym języku, nie przejmuj się tłumaczeniem, ponieważ nic nie rozumiem.

Połączenie z rozwiązaniem jest również mile widziane.

Z góry dziękuję.

+0

To jest rodzaj usługi, nie sądzę, że jest to możliwe w przypadku współdzielonego hostingu, będziesz potrzebować więcej uprawnień. – Youssef

+0

To jest najczęściej zadawane pytania i spróbuj wyszukać SO w wielu poprzednich odpowiedziach. – symcbean

Odpowiedz

6

Więc
- masz serwer
- dostaniesz e-maile
- chcesz zapisać je int bazy mysql

Cpanel config
- Przejdź do cpnal email spedytor
- dodaj nową:
- przekieruj do PATH - >/home/your_user/whatever/php.script.php

skrypt PHP (być może trzeba zmienić "/ usr/bin/php -q" ścieżkę w zależności od konfiguracji serwera)

#!/usr/bin/php -q 
<?php 
chdir(dirname(__FILE__)); 
$fd = fopen("php://stdin", "r"); 
$email = ""; 
while (!feof($fd)) { 
    $email .= fread($fd, 1024); 
} 
fclose($fd); 

if(strlen($email)<1) { 
    die(); 
} 

// handle email 
$lines = explode("\n", $email); 

// empty vars 
$from = ""; 
$to=""; 
$subject = ""; 
$headers = ""; 
$message = ""; 
$splittingheaders = true; 

for ($i=0; $i < count($lines); $i++) { 
    if ($splittingheaders) { 
     // this is a header 
     $headers .= $lines[$i]."\n"; 
     // look out for special headers 
     if (preg_match("/^Subject: (.*)/", $lines[$i], $matches)) { 
      $subject = $matches[1]; 
     } 
     if (preg_match("/^From: (.*)/", $lines[$i], $matches)) { 
      $from = $matches[1]; 
     } 
     if (preg_match("/^To: (.*)/", $lines[$i], $matches)) { 
      $to = $matches[1]; 
     } 
    } else { 
     // not a header, but message 
     $message .= $lines[$i]."\n"; 
    } 
    if (trim($lines[$i])=="") { 
     // empty line, header section has ended 
     $splittingheaders = false; 
    } 
} 

Works na dzielonego hostingu też! :)
Wszystko, co musisz dodać, to wstaw mysql i użyj zdefiniowanych powyżej zmiennych. Czy wiesz, jak korzystać z bazy danych mysql z php? Czy też potrzebujesz pomocy?

+0

Tylko tej części jestem zdezorientowany: '- przejdź do forwardera poczty cpnal 'Używam serwera Nginx z Ubuntu - jakieś sugestie dla mnie ?? – TheBlackBenzKid

+0

jakiego oprogramowania/usługi serwera poczty używasz? –

+0

W tej chwili nic. Używam głównie Sendgrid na serwerze SMTP, a także SwiftMailer - Nginx dla serwera HTTP - brak panelu sterowania to wszystko jest hard core ... – TheBlackBenzKid

1

Miałem ten sam problem i szukałem czegoś w PHP, więc najpierw szukałem parsera, a potem DB Importera.

więc umieścić je razem i mam to: https://github.com/escobar022/php-imap-ToDB

Uważam, że najważniejszą częścią było wiedzieć, jak e-mail zepsuje (nagłówek, ciało, etc). Tak więc znalazłem klasę analizatora składni (https://github.com/barbushin/php-imap), która rozdziela wiadomości e-mail i pobiera wiadomość e-mail w jej istotnych częściach i ma możliwość pobierania elementów. Poleciłbym spróbować podzielić złożoną wiadomość e-mail na części i zobaczyć, co dokładnie się dzieje.

Kiedy zrozumiałem to, próbowałem wysłać to za pomocą PHPmailera i zorientowałem się, w jaki sposób każda część jest potrzebna do odtworzenia wiadomości e-mail. Kiedy to rozgryzłem, zapisałem te części, rozbijając nagłówki/treści/załączniki (ścieżki względne) do bazy danych.

Mam nadzieję, że to pomoże!

Powiązane problemy