| 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: 11 let
|
|||
0