Autor | Zpráva | ||
---|---|---|---|
milan Profil * |
#1 · Zasláno: 24. 7. 2015, 10:13:40
Přeji pěkný den,
zkouším níže uvedený script na odesílání e-mailu s přílohou. Mám dva problémy: 1.) Do e-mailu mi sice přijde příloha ale má název část1 a jako přípona je 1. 2.) Do e-mailu mi nepřijde žádný text z vyplněných polí. Chtěl bych poprosit, zda nevíte kde by mohla být chyba, děkuji Milan $soubor_name = $_FILES["soubor"]["name"]; $soubor = $_FILES["soubor"]["tmp_name"]; if ($soubor_name == "") { /* nebyla vybrana priloha, posleme e-mail obycejne */ // funkce mail odeslání ne e-mail mail("$komu","$predmet","$telo","$header"); } else { /* priloha byla vybrana */ /* nejprve sestrojime hlavicky */ $envelope["from"] = "$odesilatel"; $envelope["to"] = "$prijemce"; /* nyni sestrojime nekolik casti dopisu */ /* 1. cast - uvodni, tou rekneme, ze dopis ma vice casti s ruznymi typy dat */ $part1["type"] = TYPEMULTIPART; $part1["subtype"] = "mixed"; /* 2. cast - do dopisu pripojime prilohu */ /* nejprve zadany soubor nacteme */ Copy($soubor, $soubor_name); /* uploadnuty soubor zkopirujeme z docasneho adresare */ $f = fopen ($soubor_name, "r"); /* otevren pro cteni */ $obsah = fread ($f, filesize($soubor_name)); /* nacteme obsah do promenne */ fclose ($f); $part2["type"] = TYPEAPPLICATION; $part2["encoding"] = ENCBINARY; $part2["subtype"] = "octet-stream"; $part2["description"] = basename($soubor_name); $part2["contents.data"] = "$obsah"; /* 3. cast - do dopisu vlozime zadany text */ $part3["type"] = TYPETEXT; $part3["subtype"] = "plain"; $part3["description"] = "text"; $part3["contents.data"] = $dopis; /* Cely dopis ulozime do pole body */ $body[1] = $part1; $body[2] = $part2; $body[3] = $part3; /* celou zpravu vytvorime a ulozime do promenne $zprava: */ $zprava = imap_mail_compose ($envelope, $body); /* drive nez posleme zpravu funkci Mail musime rozdelit zvlast hlavicku a zvlast telo: */ $pom = StrPos($zprava, "\r\n\r\n"); $hlavicka = SubStr($zprava, 0, $pom+2); $teloSoubor = SubStr($zprava, $pom, StrLen($zprava) - $pom); if (mail ("$prijemce", 'Zpráva z webu', $teloSoubor, $hlavicka)) { print "<h3>E-mail byl úspěšně odeslán!</h3>"; } else { print "<h3>E-mail se nepodařilo odeslat!</h3>"; } } |
||
juriad Profil |
milan:
Proč nepoužiješ knihovnu PHPMailer, která toto a mnoho dalšího už umí? 1. problém: Nejsem si jistý. Zkusil jsi si vypsat, co je výsledkem basename($soubor_name) ?
2. problém: Používáš proměnnou $dopis, ale v případě bez přílohy je to proměnná $telo. Mimochodem, není dobré posílat vše jako application/octet-stream, protože pak s tím mailový klient nemůže nic dělat (nemůže ukázat náhled ani nabídnout otevřít v konkrétní aplikaci). Kopírování souboru jen proto abys jej přečetl je zbytečné; můžeš jej přečíst rovnou v tempu. |
||
milan Profil * |
#3 · Zasláno: 24. 7. 2015, 10:40:52
juriad:
Děkuji za odpověď, mohl bych poprosit o stručný popis jak phpmailer zprovoznit na svém serveru? Moc díky Milan |
||
juriad Profil |
milan:
Stáhneš si ten ZIP, ten si někam na serveru rozbalíš (třeba do adresáře PHPMailer). Pak ve svém skriptu (jako je naznačeno v Simpe Example) requirneš ten soubor PHPMailerAutoload.php (budeš muset zadat správnou cestu, tedy asi něco jako:
require "PHPMailer/PHPMailerAutoload.php"; |
||
milan Profil * |
#5 · Zasláno: 24. 7. 2015, 10:59:08
juriad:
OK díky, jdu to zkusit Pěkný den, Milan |
||
Časová prodleva: 9 let
|
0