Op website publiceren via email

Status
Niet open voor verdere reacties.

Alexxxxxxxxxx

Gebruiker
Lid geworden
11 jun 2009
Berichten
29
Hallo, mijn tweede vraag alweer.
Ik vroeg mij af of het mogelijk is om een email naar een bepaald adres te sturen en dat het email bericht dan automatisch op de website gezet wordt.
Het is voor een blog (ik heb het idee van hyves)

Graag hoor ik meer hierover.

Groetjes,
Alex
 
Het is wel mogelijk; mits je de nodige kennis van zaken hebt.

Je zult een systeem moeten schrijven dat je mailbox uitleest, de content van elke mail scant, kijkt of het aan bepaalde voorwaarden voldoet en zo ja de mail verwerken in de website.

Hoeveel ervaring heb je met server-side talen?
 
Eh, ik ben bekend met PHP, HTML, Javascript (kopieren, plakken), Lua (beginner).
Maar nog niet in alles heel goed.
 
ik ben ook wel benieuwd, ik wil het gebruiken om simpel mij mysql database aan te passen
ik kan: PHP, mysql en html (eigenlijk geen javascript).
 
Laatst bewerkt:
Ik denk dat dit topic totaal in het verkeerde forum staat, maar toch:

Stappenplan:

- Maak een apart emailadres aan voor de berichten die gepost moeten worden (niet per sé noodzakelijk, wel het makkelijkst).
- Leer jezelf hoe je PHP middels de IMAP functies een mailbox kunt laten uitlezen.
- Check of het bericht aan bepaalde voorwaarden voldoet (heeft het een onderwerp en een bericht?)
- Als het bericht de bovenstaande check doorstaat, sla dan het bericht op in de database (subject van de mail als titel van de post?)
- Voer dit alles regelmatig uit (elk kwartier / uur) middels een cronjob.

Dat is (basically) wat je moet / kunt doen.
 
Laatst bewerkt:
Try to google ;)

Een cronjob is een commando dat op een door u aangegeven tijdstip automatisch zal worden uitgevoerd.
 
Best een leuke vraag. Content van de mail checken is alleen nodig als vreemden mail gaan sturen naar het mailadres. Het geheel onderbrengen in cron is alleen nodig bij een druk bezochte site, anders zou je bij elke aanvraag even de mail kunnen checken.

Als proof of concept heb ik het volgende script in elkaar gezet, waarbij ik uit ben gegaan van een imap server die voor de mail zorgt en gebruikt van tekst email (geen html):
PHP:
<?php
    if (isset($_GET["s"])) { highlight_file(__FILE__); die(); }
    require_once("../../vars.php");
    mysql_connect("127.0.0.1", $mysql_user, $mysql_pass) or die("Kan geen verbinding maken met de mysql server");
    mysql_select_db($mysql_db) or die("Kan de database niet kiezen");
    $mail=imap_open("{127.0.0.1/notls/imap4}INBOX", $imap_user, $imap_pass) or die("Kan niet verbinden met imap: " . imap_last_error());
    $headers = imap_headers($mail);
    foreach ($headers as $val) {
        $id=trim(substr(preg_replace("/\)(.*)$/i", "", $val),3));
        $header = imap_header($mail,$id);
        $titel = preg_replace("/[^a-z,.;\n \d]/i", "", $header->subject);
        $inhoud = preg_replace("/[^a-z,.;\n \d]/i", "", imap_body($mail,$id));
        $query = "insert into mail_naar_site values ('','".trim($titel)."','".trim($inhoud)."')";
        if (mysql_query($query)) {
            imap_mail_move($mail,$id,"Trash"); //mail verplaatsen naar trash
        } else {
            die(mysql_error());
        }
    }
    imap_expunge($mail); //mail die is getagged voor verwijdering door imap_mail_move() uit INBOX wissen
    imap_close($mail);

    $query = "select titel, inhoud from mail_naar_site order by id desc";
    if ($result = mysql_query($query)) {
        while( $row = mysql_fetch_array($result) ){
            echo "<fieldset><legend>".$row["titel"]."</legend>".nl2br($row["inhoud"])."</fieldset><br />\n";
        }
        mysql_free_result($result);
    }
?>
liever de code op een groot vlak? klik hier

In mijn voorbeeld wordt er eerst gekeken of er nieuwe mail is. Als dat zo is, worden de mails in de database gezet en de mail wordt verplaatst naar "Trash". Vervolgens leest het script de berichten uit de database en geeft die weer. Als je het zelf wilt uitproberen kun je een mail sturen naar
hlasm.gif
. Zodra mijn server de mail heeft verwerkt staat het bericht bovenaan op http://helpmij.someserver.net/mail.

Bij een drukke site kun je het script bij regel 22 splitsen en het bovenste deel als cron draaien.

Zoals ik al zei, het is slechts een proof of concept en kan in deze vorm niet op een live site gebruikt worden - daarvoor is een design, meer error checking, eventueel code om html mails te verwerken, etc nodig. Maar de originele vraag is iig beantwoord: ja, het kan :)
 
Ik zou ook als het geen drukke site is, gewoon een cronjob gebruiken. Dat scheelt gewoon een boel opzoek werk in de mail.

Daarnaast is het toch de bedoeling van de meeste sites dat het een drukke site is / wordt. En dan kun je als het een drukke site wordt alles weer gaan aanpassen zodat het wel met een cronjob werkt.

Ik zou zeggen, gewoon een cronjob gebruiken!
 
Het verschil tussen een drukke en rustige site is meestal ook de hosting. Mensen beginnen vaak met budgethosting (waar je meestal niet eens een cron kunt starten) en stappen later over op een duurder pakket met meer opties en betere support (of als ze zelf liever alles instellen, een vps).
 
Dat begrijp. Maar nu zeg je dat je het per request moet doen als je geen support voor cronjobs hebt. Dat is iets anders dan wat je eerst zei. Maar ik denk dat de TS zo wel antwoord op z'n vraag heeft.
 
niet helemaal goed

ìk heb een mailtje gestuurd naar helpmij@someserver.net

(in je eigen bericht stond [op] i.p.v @ wat bedoel je daarmee)

en ik krijg te zien tussen mijn mailtje door wat reclame en tekstjes die ik niet heb getypd
ik heb de mail verstuurd via hotmail

weet iemand waar dat aanlicht
 
Dat is waarschijnlijk reclame die Hotmail automatisch aan de mails toevoegt.
 
maar hoe moet ik dan om die reclame heen lezen om de juiste waarde in de database aan te passen?
 
Ik zou het zo doen:

Dit is een header en wordt dus niet gepubliceerd
[startmain]
Alleen wat hier tussen staat moet er op komen.
[endmain]
Dit staat ook buiten de content en wordt dus niet gepubliceerd.

Dan kijk je wat de positie van [startmain] en [endmain] is, en dan INSERT je alles wat daar tussen staat.

PHP:
$start = stripos ( $varWaarHetBerichtInZit, '[startmain]' ) + 11;
$end = stripos ( $varWaarHetBerichtInZit, '[endmain]' );

$bericht = substr ( $varWaarHetBerichtInZit, $start, $end - $start );
 
dankje,

ik wil graag de je ook kan ingeven waar je dat moet veranderen (rij en kolom)
je moet dus een rij, kolom en waarde ingeven
hoe kun je dat uit de inhoud van het bericht halen?
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan