Avatar billede anddk Praktikant
09. februar 2004 - 19:40 Der er 26 kommentarer og
1 løsning

Sende html mail

Har en MySql med en del mailadresser som jeg gerne vil sende html mail til. Kan godt sende normale mail ud ved hjælp af nedstående kode, men ikke html mail. Jeg har derfor kikket på denne tråd: http://www.eksperten.dk/spm/380300 Jeg er rettet min kode til som ses længer nede, men det virker ikke, får en ” No input file specified” selv om der er valgt filer og database. Er det virkelig så bøvlet at sende html mail ?

Nogle der har gode råd ? Vil meget gerne have det til at køre med html.

Nuværende kode:
----------------------------------------------------------------
<?php
session_start();
include("db.php");

if($_SESSION[id]) {
    if($_POST[ind]) {
        $query = mysql_query("SELECT mail FROM mail");
        while($row = mysql_fetch_array($query)){
            mail("$row[mail]", "$_POST[overskrift]", "$_POST[tekst]", "From: ditnavn <din@mail.dk>");
        }
    }
?>
<form method="post" action="login.php">
Overskrift: <input type="text" name="overskrift" value=""><br>
Tekst: <textarea wrap="virtual" rows="15" name="tekst" cols="50"></textarea><br>
<input type="submit" name="ind" value="Send">
</form>
<br><br>
<?php
}

?>
-----------------------------------------------------------------

HTML kode som ikke virkere:
-----------------------------------------------------------------
<?php
session_start();
include("db.php");

error_reporting(E_ALL);

function send_multipart_email($to, $from, $reply_to, $subject) {   
    /*
    Sender en multipart/alternative besked med
    en text/plain del og en text/html del.
   
    mail_textplain.inc: Fil der skal indeholde text/plain delen.
    mail_texthtml.inc: Fil der skal indeholde text/html delen.
    */   
    if (!$fp = @fopen("mail_textplain.inc", "r"))
        return FALSE;
    $text_plain = fread($fp, filesize("mail_textplain.inc"));
    if (!$fp = @fopen("mail_texthtml.inc", "r"))
        return FALSE;
    $text_html = fread($fp, filesize("mail_texthtml.inc"));
    fclose($fp);
   
    $headers  = "From: ".$from."\r\n";
    $headers .= "Reply-To: ".$reply_to."\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: Multipart/Alternative; boundary=\"part boundary\"";
   
    $body  = "--part boundary\r\n";
    $body .= "Content-Type: text/plain; charset=ISO-8859-1\r\n";
    $body .= "\r\n".$text_plain."\r\n";
    $body .= "\r\n--part boundary\r\n";
    $body .= "Content-Type: text/html\r\n";
    $body .= "\r\n".$text_html."\r\n";
    $body .= "\r\n--part boundary--\r\n";
   
    return (boolean) mail($to, $subject, $body, $headers);
}

if($_POST[ind]) {
  $query = mysql_query("SELECT mail FROM mail");
  while($row = mysql_fetch_array($query)){
  echo send_multipart_email("$row[mail]", "Anders <nyhed@domain.dk>", "nyhed@domain.dk.dk", "Nyheder fra mig til dig...") ? "Mail sendt" : "Mail kunne ikke sendes";
  }
}

?>
Avatar billede detox Nybegynder
09. februar 2004 - 19:49 #1
Har du disse to filer liggende i samme mappe som scriptet:
'mail_textplain.inc', 'mail_texthtml.inc'.
Avatar billede anddk Praktikant
09. februar 2004 - 19:52 #2
Ja, det har jeg.
Avatar billede detox Nybegynder
09. februar 2004 - 20:06 #3
Jeg kan ikke umiddelbart se nogen fejl. Giver fejlmeldingen nogen hint om hvilket linienummer det går galt?
Avatar billede detox Nybegynder
09. februar 2004 - 20:09 #4
Prøv evt. at fjerne @'erne her og se hvad den siger:

if (!$fp = fopen("mail_textplain.inc", "r"))
        return FALSE;
    $text_plain = fread($fp, filesize("mail_textplain.inc"));
    if (!$fp = fopen("mail_texthtml.inc", "r"))
        return FALSE;
Avatar billede detox Nybegynder
09. februar 2004 - 21:06 #5
Jeg har lige afprøvet scriptet og det virker fint her. Det tyder på, du måske har noget galt med navn eller sti på en (eller flere) af dine filer.
Avatar billede anddk Praktikant
10. februar 2004 - 19:56 #6
Hej detox, har ikke lige haft tid til at kikke på det, regner med jeg når det i morgen.
Avatar billede anddk Praktikant
14. februar 2004 - 18:12 #7
Forstår det ikke. Jeg får bare en "No input file specified."

Alle fileren ligger i samme mappe, det skulle være OK ikke ??
Avatar billede detox Nybegynder
16. februar 2004 - 09:58 #8
Det er ikke scriptet det er galt med, det må være serveropsætningen. Prøv at se hvad denne stump giver af resultat:

<?php
echo $_SERVER['SCRIPT_NAME']."<br />";
echo $_SERVER['SCRIPT_FILENAME'];
?>
Avatar billede anddk Praktikant
16. februar 2004 - 10:46 #9
Det giver:

/nyheder/slet.php
W:\\wwwroot\\nyheder\\slet.php
Avatar billede detox Nybegynder
16. februar 2004 - 11:01 #10
Hvilket styresystem bruger du?
Avatar billede detox Nybegynder
16. februar 2004 - 11:14 #11
Og hvilken php version?

Prøv osse lige:

<?php
echo $_SERVER['PATH_TRANSLATED'];
?>

evt. et link til:

<?php
phpinfo();
?>
Avatar billede anddk Praktikant
16. februar 2004 - 11:25 #12
Bruger Windows 2000 server og PHP Version 4.3.0

W:\\wwwroot\\nyheder\\slet.php

PHP info kan ses her: http://www.andersdk.dk/info/phpinfo.htm
Det er en html siden. PHP siden er gemt og lagt op, da der pt. ikke er adgang til webserveren udefra.
Avatar billede detox Nybegynder
16. februar 2004 - 11:41 #13
Jeg kan ikke se nogen DocumentRoot, er den sat i httpd.conf?

DocumentRoot "W:/wwwroot"

og er stien i øvrigt korrekt?
Avatar billede detox Nybegynder
16. februar 2004 - 12:04 #14
Jeg tror umiddelbart det hænger sammen med at du kører php som CGI (og der er en konfigurationsfejl).
En løsning kunne være at sætte den op til at køre php som modul istedet.
Avatar billede detox Nybegynder
16. februar 2004 - 12:15 #15
Avatar billede detox Nybegynder
23. februar 2004 - 15:32 #16
Hvordan går det?
Avatar billede anddk Praktikant
23. februar 2004 - 18:37 #17
Jeg har ikke fået det til at køre endnu, jeg har haft meget dårlig tid til at kikke på det. Jeg køre på en IIS og ved ikke hvordan man ændre PHP på IIS til at køre som modul istedet ???
Avatar billede detox Nybegynder
23. februar 2004 - 18:53 #18
Du kan godt køre php som modul under IIS, se hvordan her:
http://dk2.php.net/install.iis
Avatar billede anddk Praktikant
23. februar 2004 - 18:56 #19
Tak, prøver det i morgen, skal nok vennne tilbage med resultatet.
Avatar billede detox Nybegynder
23. februar 2004 - 19:05 #20
Avatar billede detox Nybegynder
23. februar 2004 - 22:07 #21
Avatar billede anddk Praktikant
24. februar 2004 - 12:52 #22
Nu går der lidt bedre, får en anden fejl nu, men det er nok bare en kodefejl:

Notice: Use of undefined constant ind - assumed 'ind' in w:\wwwroot\nyheder\test.php on line 39

Notice: Undefined index: ind in w:\wwwroot\nyheder\test.php on line 39
Avatar billede detox Nybegynder
24. februar 2004 - 22:31 #23
Ja, det er typisk når du refererer til et index i et array uden at bruge apostroffer.
Altså: $array[index] kontra: $array['index'].
Avatar billede anddk Praktikant
27. februar 2004 - 10:48 #24
Det hjælp desvære ikke, får stadig fejl i linie 39 som er denne :

if($_POST['ind']) {

Hele koden ser således ud:

<?php
session_start();
include("db.php");

error_reporting(E_ALL);

function send_multipart_email($to, $from, $reply_to, $subject) {   
    /*
    Sender en multipart/alternative besked med
    en text/plain del og en text/html del.
   
    mail_textplain.inc: Fil der skal indeholde text/plain delen.
    mail_texthtml.inc: Fil der skal indeholde text/html delen.
    */   
    if (!$fp = fopen("mail_textplain.inc", "r"))
        return FALSE;
    $text_plain = fread($fp, filesize("mail_textplain.inc"));
    if (!$fp = fopen("mail_texthtml.inc", "r"))
        return FALSE;
    $text_html = fread($fp, filesize("mail_texthtml.inc"));
    fclose($fp);
   
    $headers  = "From: ".$from."\r\n";
    $headers .= "Reply-To: ".$reply_to."\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: Multipart/Alternative; boundary=\"part boundary\"";
   
    $body  = "--part boundary\r\n";
    $body .= "Content-Type: text/plain; charset=ISO-8859-1\r\n";
    $body .= "\r\n".$text_plain."\r\n";
    $body .= "\r\n--part boundary\r\n";
    $body .= "Content-Type: text/html\r\n";
    $body .= "\r\n".$text_html."\r\n";
    $body .= "\r\n--part boundary--\r\n";
   
    return (boolean) mail($to, $subject, $body, $headers);
}

if($_POST['ind']) {
  $query = mysql_query("SELECT mail FROM nyhed");
  while($row = mysql_fetch_array($query)){
  echo send_multipart_email("$row[mail]", "Anders <nyhed@domain.dk>", "nyhed@domain.dk.dk", "Nyheder fra mig til dig...") ? "Mail sendt" : "Mail kunne ikke sendes";
  }
}

?>
Avatar billede detox Nybegynder
27. februar 2004 - 10:59 #25
$_POST['ind'] skal komme fra en form. Hvis du bare vil kalde scriptet direkte, hvilket det ser ud til for mig, skal de to linier fjernes (altså 39 og 44). Ellers skal du bruge:
if(isset($_POST['ind'])) {
(altså hvis du kalder siden fra en anden side via en form).
Avatar billede anddk Praktikant
27. februar 2004 - 11:30 #26
Jubii....... nu køre det, du kan bare der der PHP. Mange tak for din hjælp. Smid et svar så få du dine poing.

Det kørte da jeg fjernet de 2 linier.
Avatar billede detox Nybegynder
27. februar 2004 - 11:49 #27
cool
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