Avatar billede tos Praktikant
18. juni 2009 - 10:35 Der er 11 kommentarer og
1 løsning

php autoreply

Mit mailhotel understøtter ikke out-of-office (autoreply) men de siger at det kan laves med php. Derfor har jeg googlet og fundet en php class "autoresponse.class.php" (http://phpclasses.mkdata.net/browse/package/1997.html) - men jeg kan ikke få scriptet til at køre.

Kender I et php script der virker som jeg kunne få lov at kigge lidt i eller findes der noget standard man "bare" kan downloade?

/Torben
Avatar billede Slettet bruger
18. juni 2009 - 10:42 #1
Jeg kan ikke forestille mig hvordan et php script kan gøre det.
Skulle det så, en gang imellem tjekke om der var kommet nye mails, og så sende svar? Eller mener de at mailserveren kan kalde et bestemt script når du modtager mails?

Jeg tror bare de har givet dig en dum forklaring for ikke selv at skulle til at udvikle noget.
Avatar billede tos Praktikant
18. juni 2009 - 10:51 #2
Ja det var faktisk sådan noget de forslog, så jeg tænkte... jeg kan da ikke være den eneste med det problem og det må da være muligt at lave en cron job der køre én gang i time og checker for nye mails og sender en "Jeg er ikke til stede" mail.
Avatar billede Slettet bruger
18. juni 2009 - 11:03 #3
Jo, jeg er sikker på at det er muligt. Men som sagt, med mindre du kan få dem til at køre scriptet, f.eks. en gang i timen, kan det ikke så godt lade sig gøre.

Jeg var ikke lige i stand til at finde et gratis færdiglavet script, men hvis du selv har lidt erfaring med php kan du selv udvikle et.
Se følgende sider:
http://dk.php.net/imap
http://dk2.php.net/manual/en/function.mail.php

Det er nok muligt, vha. IMAP at tjekke din indbakke for nye mails (mails modtaget efter sidste gang du tjekkede, gemme datoen i en database eller fil), hente headere frem fra dem, og så sende en out-of-office e-mail til alle fra-adresser.
Avatar billede moddi100 Seniormester
19. juni 2009 - 14:40 #4
En skabelon til dit script:

1) opret forbindelse til din indbakke via imap_open().

2) hent en oversigt over alle emails i indbakken.

3) hent derefter hver enkelt og send et auto-svar.

4) flyt så den pågældende email til en ny mappe f.eks. 'besvaret' (se imap_mail_move og imap_createmailbox). Alternativt kan du kun besvarer emails markeret med flaget 'Recent/R' (imap-headerinfo)

5) luk forbindelsen igen

6) gå til hjemmesiden www.cronjob.de og opret en bruger. Der kan du så sætte dit script til at køre f.eks. hver time. Du kan højest køre filen hver 5. minut, hvis du er en ikke-betalende kunde.
Avatar billede tos Praktikant
19. juni 2009 - 14:52 #5
Jf. phpinfo() er IMAP enabled, men alligevel får jeg følgende fejl:
Warning: imap_open() [function.imap-open]: Couldn't open stream {mail.gigahost.dk:143}INBOX in /home/www/webmail/cronjob/reply_mails.php on line 22
Connection to server failed

Er jeg virkelig den eneste i verden med out-of-office problemet på servere der ikke understøtter det :)
Avatar billede moddi100 Seniormester
19. juni 2009 - 15:06 #6
Husk at angive at det er imap?

imap_open("{mail.gigahost.dk:143/imap}INBOX",........);
Avatar billede tos Praktikant
19. juni 2009 - 15:32 #7
det virker heller ikke
Avatar billede tos Praktikant
19. juni 2009 - 15:36 #8
Jeg har taget eksemplet direkte fra http://dk.php.net/manual/en/function.imap-open.php

$mbox = imap_open("{mail.gigahost.dk:143/imap}INBOX", "username", "passwd") or die("Connection to server failed");

Jeg har prøvet med dem alle:

// To connect to an IMAP server running on port 143 on the local machine, do the following:
$mbox = imap_open("{localhost:143}INBOX", "user_id", "password");

// To connect to a POP3 server on port 110 on the local server, use:
$mbox = imap_open ("{localhost:110/pop3}INBOX", "user_id", "password");

// To connect to an SSL IMAP or POP3 server, add /ssl after the protocol specification:
$mbox = imap_open ("{localhost:993/imap/ssl}INBOX", "user_id", "password")
Avatar billede moddi100 Seniormester
19. juni 2009 - 15:47 #9
Du har vel udfyldt med dit eget brugernavn og password?

Og imap kan være særdeles besværlig. Har skam selv prøvet lignende.
Avatar billede tos Praktikant
19. juni 2009 - 16:08 #10
ja ja... Normalt når jeg sætter en mail klient op med Gigahost.dk skal jeg bruge den komplette email adresse som username + emailkonto password. Det er disse jeg angiver som username+password:

mbox = imap_open("{mail.gigahost.dk:143/imap}INBOX", "user@domain.com", "kode123")
Avatar billede Slettet bruger
27. juli 2009 - 05:00 #11
Bruger du MySQL? Godt.

CREATE TABLE `mails` (
  `msgid` varchar(225) NOT NULL
) ENGINE=MyISAM

Hvis du bruger PHPMailer - som jeg helt klart foretrækker!

<?php
$out_sub = "Ikke ved roret!";
$out_msg = "Goddag. Jeg er her ikke idag. Desværre. :(";

$host = "mail.gigahost.dk";
$mail = "din@email.dk";
$pass = "dinkode";


// Create variables before logon

$chost = "{" . $host . ":143/imap" . "}";



// Connect to IMAP server/mail server.

$mbox = imap_open($chost, $mail, $pass) or die("Connection to server failed");



if($_GET[page] == "") {



$num_msg = imap_num_msg($mbox);

function retrieve_message($mbox, $i)
{
  $message = array();
 
  $header = imap_header($mbox, $i);
  $structure = imap_fetchstructure($mbox, $i);

  $message['msgid'] = $header->message_id;

  $from = $header->from;
  foreach ($from as $mid => $object) {
    $message['fromname'] = $object->personal;
    $message['fromaddress'] = $object->mailbox . "@" . $object->host;
  }
 
  return $message;
}


include_once('class.phpmailer.php');

for($i = $num_msg; $i > 0; $i--) {
$getmsg = retrieve_message($mbox,$i);

$check_mails = mysql_query("SELECT * FROM mails WHERE msgid = '$getmsg[msgid]'") or die(mysql_error());

$show_mails = mysql_num_rows($check_mails);

if($show_mails == 0) {

$mail            = new PHPMailer();



// Subject and message

$mail->Subject    = $out_sub;

$body            = $message;

$body            = eregi_replace("[\]",'',$body);
$mail->AltBody    = $message; // optional, comment out and test



$mail->MsgHTML($out_msg);


// Reciever

$mail->AddAddress($getmsg[fromaddress]);



if(!$mail->Send()) {

  die("Mailer Error: " . $mail->ErrorInfo);

} else {

echo "E-mail has been sent.";

}

// Insert the outgoing email into the table

mysql_query("INSERT INTO mails (msgid) values ('$getmsg[msgid]')") or die(mysql_error());
}
}


// Close connection

imap_close($mbox);



}

?>


Men hvis du ikke gør dette:

<?php
$out_sub = "Ikke ved roret!";
$out_msg = "Goddag. Jeg er her ikke idag. Desværre. :(";

$host = "mail.gigahost.dk";
$mail = "din@email.dk";
$pass = "dinkode";


// Create variables before logon

$chost = "{" . $host . ":143/imap" . "}";



// Connect to IMAP server/mail server.

$mbox = imap_open($chost, $mail, $pass) or die("Connection to server failed");



if($_GET[page] == "") {



$num_msg = imap_num_msg($mbox);

function retrieve_message($mbox, $i)
{
  $message = array();
 
  $header = imap_header($mbox, $i);
  $structure = imap_fetchstructure($mbox, $i);

  $message['msgid'] = $header->message_id;

  $from = $header->from;
  foreach ($from as $mid => $object) {
    $message['fromname'] = $object->personal;
    $message['fromaddress'] = $object->mailbox . "@" . $object->host;
  }
 
  return $message;
}

for($i = $num_msg; $i > 0; $i--) {
$getmsg = retrieve_message($mbox,$i);

$check_mails = mysql_query("SELECT * FROM mails WHERE msgid = '$getmsg[msgid]'") or die(mysql_error());

$show_mails = mysql_num_rows($check_mails);

if($show_mails == 0) {

mail($getmsg[fromaddress], $out_sub, $out_msg);

// Insert the outgoing email into the table

mysql_query("INSERT INTO mails (msgid) values ('$getmsg[msgid]')") or die(mysql_error());
}
}


// Close connection

imap_close($mbox);



}

?>


Du må selv finpudse resten. :)
Avatar billede tos Praktikant
05. oktober 2012 - 09:45 #12
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester