2010-08-12 5 views
5

Juste pour dire ... Je ne sais pas comment je ferais ça :). En d'autres termes, la chose est la suivante: Vous recevez un message de la part d'un gars de [email protected], vous répondez avec votre propre contenu, et [email protected] avez votre réponse stockée dans sa base de données.Comment insérer un message électronique entrant dans la base de données mySQL?

Supplémentaire: J'utilise l'hébergement partagé, je code en PHP, je comprends ASP. Si vous avez une idée de comment écrire ce script dans une autre langue, ne vous embêtez pas à m'expliquer, car je ne comprendrai rien.

Un lien vers une solution est également le bienvenu.

Merci d'avance.

+0

Ceci est une sorte de service, je ne pense pas que ce soit possible sur l'hébergement partagé, vous aurez besoin de plus de privilèges. – Youssef

+0

Ceci est une FAQ essayez de chercher SO pour les nombreuses réponses précédentes. – symcbean

Répondre

6

Alors
- vous avez un serveur
- vous obtenez des e-mails
- vous voulez les sauvegarder int une base de données MySQL

Cpanel config
- aller à l'email cpnal commissionnaire
- ajouter un nouveau
- rediriger vers PATH - > /home/your_user/whatever/php.script.php

script actuel (vous devrez peut-être modifier le chemin "/ usr/bin/php -q" en fonction de la configuration du serveur)

#!/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; 
    } 
} 

Travaux sur l'hébergement mutualisé aussi! :)

Tout ce que vous devez ajouter est l'insertion mysql et utilisez les variables définies ci-dessus. Savez-vous comment utiliser une base de données mysql de PHP? Ou avez-vous besoin d'aide pour ça aussi?

+0

Juste cette partie, je suis confus sur: '- aller à cpnal email forwarder' J'utilise le serveur web Nginx avec Ubuntu - des suggestions pour moi ?? – TheBlackBenzKid

+0

Quel logiciel/service de serveur de messagerie utilisez-vous? –

+0

Pour le moment rien. J'utilise Sendgrid le serveur SMTP principalement et aussi SwiftMailer - Nginx pour le serveur HTTP - aucun panneau de contrôle il est tout noyau dur ... – TheBlackBenzKid

1

J'ai eu ce même problème et je cherchais quelque chose en PHP, donc j'ai cherché un analyseur en premier puis un DB Importer.

Je les ai donc mis ensemble et a obtenu ceci: https://github.com/escobar022/php-imap-ToDB

Je trouve que la partie la plus importante est de savoir comment un email tombe en panne (en-tête, corps, etc). J'ai donc trouvé une classe analyseur (https://github.com/barbushin/php-imap) qui démonte les courriels et récupère l'e-mail dans ses parties essentielles et a la possibilité de télécharger les éléments. Je recommanderais d'essayer de séparer un courriel complexe en plusieurs parties et de voir ce qui se passe exactement. Une fois que j'ai compris cela, j'ai essayé de l'envoyer en utilisant PHPmailer, et j'ai compris comment chaque partie est nécessaire pour répliquer l'e-mail. Une fois que j'ai compris cela, j'ai stocké ces parties, décomposant les en-têtes/corps/pièces jointes (chemins relatifs) dans la base de données.

Espérons que cela aide!

Questions connexes