PROGRESO | WEBESTEEM | ART&DESIGN MAGAZINE 
Forum webesteem Strona Główna webesteem:forum

   Regulamin | Szukaj | Użytkownicy | Grupy | Statystyki | Ostatnie tematy | RSS | Rejestracja | Profil | Skrzynka | Zaloguj

Mail z kilkoma załącznikami
Idź do strony 1, 2  Następny
 
Napisz nowy temat   Odpowiedz do tematu    Forum webesteem Strona Główna | server side i bazy danych
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
skrzypek1364




Od: 2008.12.18
Posty: 173

PostWysłany: 2011.02.28 9:41    Temat postu: Mail z kilkoma załącznikami

Witam,
Wiem że temat był już wałkowany kilka razy, ale chciałbym się dowiedzieć jak mam poprawić kod, aby można było wysłać kilka załączników.

Próbowałem to robić na 100 różnych sposobów i nic nie wychodzi. Doprowadziłem kod do pierwszej wersji bo tu wysyła mi jeden załącznik i wszystko działa, ale jak go zrobić żeby wysyłał więcej?
Jestem blady w PHP więc proszę o wyrozumiałość :)

Kod:
<?php
//sprawdzenie czy załącznik pochodzi z formularza
if ($_POST["wyslij"]==1)
$nazwisko = $_POST["nazwisko"];
$imie = $_POST["imie"];
$email = $_POST["email"];
$tresc= $_POST["tresc"];
{
srand((double)microtime()*1000000);
$znacznik = md5(uniqid(rand()));

   
// dane o odbiorcy, nadawcy
$odbiorca="mojemail@wp.pll";
$tytul="Test zalacznikow";
$nadawca = "Nadawca";
$nadawca_mail="";

// treść listu
$tresclistu = "
Nazwa CFG: $imie
Nick: $nazwisko
email: $email
Krótki opis CFG: $tresc
";

// definicja nagłówków
$naglowki  = "From: $nadawca <$nadawca_mail>\n";
$naglowki .= "MIME-Version: 1.0\n";
$naglowki .= "Content-Type: multipart/mixed;\n";
$naglowki .= "\tboundary=\"___$znacznik==\"";

// nagłówki listu
$tresc="--___$znacznik==\n";
$tresc .="Content-Type: text/plain; charset=\"iso-8859-2\"\n";
$tresc .="Content-Transfer-Encoding: 8bit\n";
$tresc .="\n$tresclistu\n";

// nagłówki i obsługa załącznika 1
$plik_nazwa_tmp = $_FILES["plik1"]["tmp_name"];
$plik_nazwa_oryginalna = $_FILES["plik1"]["name"];
$plik_wielkosc = $_FILES["plik1"]["size"];

if (is_uploaded_file($plik_nazwa_tmp))
{
$tresc .="--___$znacznik==\n";
$tresc .="Content-Type: image/gif\n";
$tresc .="Content-Disposition: attachment;\n";
$tresc .=" filename=\"$plik_nazwa_oryginalna&\"\n";
$tresc .="Content-Transfer-Encoding: base64\n\n";
$f = fopen($plik_nazwa_tmp,"rb");
$dane = fread($f,filesize($plik_nazwa_tmp));
fclose($f);
$tresc .= chunk_split(base64_encode($dane));
$tresc .="--___$znacznik==--\n";
}


// wysłanie listu
if (mail($odbiorca,$tytul,$tresc,$naglowki))
{
print "<script type=\"text/javascript\">window.alert('E-mail z załącznikiem został wysłany poprawnie.');</script>";
}
else
{
print "<script type=\"text/javascript\">window.alert('E-mail NIE został wysłany poprawnie. Spróbuj ponownie.');</script>";
}
}
?>


Oczywiście kod ściągnąłem ale nie mogę sobie poradzić z tym.

W formularzu dodałem pole do wstawienia pliku [plik2]

Byłbym wdzięczny za odpowiedź.

Pozdrawiam
^
Odpowiedz z cytatem
Piotr Skarżyński




Od: 2006.03.30
Posty: 397

PostWysłany: 2011.02.28 10:43    Temat postu:

1. PHPMailer
2. http://php.net/manual/en/features.file-upload.multiple.php
^
Odpowiedz z cytatem
skrzypek1364




Od: 2008.12.18
Posty: 173

PostWysłany: 2011.02.28 11:22    Temat postu:

Dzięki Piotrze, już sprawdzałem tamten skrypcik i wciąż coś nie wychodzi. Dlatego wróciłem do pierwotnej wersji.

Ja potrzebuję wysyłać tylko 2 załączniki, więc może jakoś łatwiej da się to zrobić? Coś dopisać w tym kodzie który już mam?

Pozdrawiam
^
Odpowiedz z cytatem
Piotr Skarżyński




Od: 2006.03.30
Posty: 397

PostWysłany: 2011.02.28 14:01    Temat postu:

zwykły mail() to syf i nie mam zamiaru z nim kombinować

jak chcesz, żeby działało to w form robisz:

Kod:
<form method="post" action="" enctype="multipart/form-data">

    <input name="plik[]" type="file" value="" /> <br />
    <input name="plik[]" type="file" value="" /> <br />

</form>


php konfigurujesz odpowiednio na podstawie przykładów z http://phpmailer.worxware.com/index.php?pg=examples , np tak:


Kod:
if($_POST['wyslij']) {
$mail = new PHPMailer(); //defaults to using php "mail()"; the true param means it will throw exceptions on errors, which we need to catch
$mail->Body = 'ttuuuuuttaaaaaaj tresc';
$mail->AddReplyTo('adres@adres.com', 'First Last');
$mail->AddAddress('adres@adres.com', 'John Doe');
$mail->SetFrom('adres@adres.com', 'First Last');
$mail->AddReplyTo('adres@adres.com', 'First Last');
$mail->Subject = 'PHPMailer Test Subject via mail(), advanced';
 
$mail->AddAttachment($_FILES["plik"]["tmp_name"][1], $_FILES["plik"]["name"][1]);
$mail->AddAttachment($_FILES["plik"]["tmp_name"][0], $_FILES["plik"]["name"][0]);      // attachment
  //$mail->AddAttachment("{$_FILES['plik']['name'][1]}"); // attachment
$mail->Send();

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}
}


to wszystko, z dodaniem w odpowiednie miejsca zmiennych z $_POST już chyba sobie poradzisz
^
Odpowiedz z cytatem
Piotr Skarżyński




Od: 2006.03.30
Posty: 397

PostWysłany: 2011.02.28 14:03    Temat postu:

z ostatniego kodu wypieprzyć trzeba oczywiście linijkę:

"//$mail->AddAttachment("{$_FILES['plik']['name'][1]}"); // attachment"

choć to i tak komentarz, łotewa
^
Odpowiedz z cytatem
skrzypek1364




Od: 2008.12.18
Posty: 173

PostWysłany: 2011.02.28 18:18    Temat postu:

Już jestem zielony od tych wszystkich formularzy przejrzanych w sieci.

I jak narazie jedyne co mi wychodzi to ten pierwszy, który tutaj wrzuciłem. Za każdym razem do niego wracam.

Piotrze PHPMailer zainstalowałem na serwerze, ale pewnie coś zwaliłem bo nie przysyłało wiadomości. Wyskakiwał błąd w linii xx SetFrom.
Nie mogłem tego przegryźć.

Znów więc wróciłem do tego pierwszego. Jest to dla mnie bardzo ważne, a nie wiem co mogę zrobić. Nie mam obok siebie teraz nikogo kto by mi pomógł z tym kodem.

Pomyślałem więc że może coś dodawać w tym moim kodzie:

Kod:
// nagłówki i obsługa załącznika 1
$plik_nazwa_tmp = $_FILES["plik1"]["tmp_name"];
$plik_nazwa_oryginalna = $_FILES["plik1"]["name"];
$plik_wielkosc = $_FILES["plik1"]["size"];

$plik_nazwa_tmp2 = $_FILES["plik2"]["tmp_name"];
$plik_nazwa_oryginalna2 = $_FILES["plik2"]["name"];
$plik_wielkosc2 = $_FILES["plik2"]["size"];

if (is_uploaded_file($plik_nazwa_tmp))
{
$tresc .="--___$znacznik==\n";
$tresc .="Content-Type: image/gif\n";
$tresc .="Content-Disposition: attachment;\n";
$tresc .=" filename=\"$plik_nazwa_oryginalna\"\n";
$tresc .="Content-Transfer-Encoding: base64\n\n";
$f = fopen($plik_nazwa_tmp,"r");
$dane = fread($f,filesize($plik_nazwa_tmp));
fclose($f);
$tresc .= chunk_split(base64_encode($dane));
$tresc .="--___$znacznik==--\n";
}

tak jak tutaj, ale nic nie wychodzi. Już nie myślę dobrze dzisiaj :) od rana to wałkuje i nic :) Jak ktoś pomoże to obiecuję że się odwdzięczę.

Pozdrawiam
^
Odpowiedz z cytatem
Piotr Skarżyński




Od: 2006.03.30
Posty: 397

PostWysłany: 2011.02.28 19:04    Temat postu:

:)

stwórz plik mail.php, wklej do niego:

Kod:
<?php
require_once 'class.phpmailer.php';

if($_POST['wyslij']) {
$mail = new PHPMailer();
$mail->CharSet = "UTF-8";
$mail->Body = "Imię i nazwisko: {$_POST['imie']} {$_POST['nazwisko']}\r
e-mail: {$_POST['email']}\r
treść: {$_POST['tresc']}";
$mail->SetFrom($_POST['email'], $_POST['imie'].' '.$_POST['nazwisko']);
$mail->AddAddress('adres@skrzypka.pl', 'skrzypek');
$mail->Subject = 'Testujemy...';
 
$mail->AddAttachment($_FILES["plik"]["tmp_name"][1], $_FILES["plik"]["name"][1]);
$mail->AddAttachment($_FILES["plik"]["tmp_name"][0], $_FILES["plik"]["name"][0]);

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}
}
?>

<!doctype html>
<html lang="pl">
<head>
<meta charset="utf-8" />
<title>Test maila</title>
</head>

<body>

    <form method="post" action="#" enctype="multipart/form-data">

        <input name="imie" type="text" value="" /> <br />
        <input name="nazwisko" type="text" value="" /> <br />
        <input name="email" type="text" value="" /> <br />
        <textarea name="tresc" rows="20" cols="80"></textarea> <br />

        <input name="plik[]" type="file" value="" /> <br />
        <input name="plik[]" type="file" value="" /> <br />
        <input name="wyslij" type="submit" value="wyslij" />

    </form>

</body>

</html>


zmień w linii:
Kod:
$mail->AddAddress('adres@skrzypka.pl', 'skrzypek');

adres@skrzypka.pl na swój adres email

wyślij to na serwer i do tego samego folderu wrzuć plik class.phpmailer.php (jest w pliku zip, który weźmiesz stąd http://bit.ly/gbjq3G ), sprawdź czy działa
^
Odpowiedz z cytatem
skrzypek1364




Od: 2008.12.18
Posty: 173

PostWysłany: 2011.02.28 19:50    Temat postu:

Dzięki :) Widzę że masz do mnie cierpliwość :)

wyskakuje błąd:

Kod:
Fatal error: Call to undefined method PHPMailer::SetFrom() in /home/users/skrzypon/public_html/mail.php on line 10


co z tym niefartem?
^
Odpowiedz z cytatem
skrzypek1364




Od: 2008.12.18
Posty: 173

PostWysłany: 2011.02.28 19:56    Temat postu:

Jesteś boski, śmiga :D
zmieniłem class.phpmailer.php na nowszy i działa :)

Dzieki, masz u mnie piwo i to poważnie :D
^
Odpowiedz z cytatem
Piotr Skarżyński




Od: 2006.03.30
Posty: 397

PostWysłany: 2011.02.28 20:54    Temat postu:

uf ;)

za piwo dzięki, nie pijam, więc wypij za moje zdrowie i będzie cacy :)

lubię poniedziałki, więc dla Ciebie lub innych, jeśli będą szukać takiego rozwiązania:
- kolejne inputy do wgrywania załączników można dodawać dynamicznie i ile ich się doda, tyle załączników zostanie wysłanych
- proste sprawdzanie adresu maila i czy w ogóle został podany

Kod:
<?php
require_once 'class.phpmailer.php';

if(!empty($_POST['email'])) {
    $sprawdzEmail = '/^[^@]+@[^\s\r\n\'";,@%]+$/';
    if (preg_match($sprawdzEmail, $_POST['email'])) {
        $email = $_POST['email'];
    }
}

if(!empty($_POST['wyslij']) && empty($email)) {
    echo "Proszę podać adres email";
} elseif(!empty($_POST['wyslij'])) {

$mail = new PHPMailer();
$mail->CharSet = "UTF-8";
$mail->Body = "Imię i nazwisko: {$_POST['imie']} {$_POST['nazwisko']}\r
e-mail: {$email}\r
treść: {$_POST['tresc']}";
$mail->SetFrom($_POST['email'], $_POST['imie'].' '.$_POST['nazwisko']);
$mail->AddAddress('twoj@adresemail.com', 'TwojeImie TwojeNazwisko');
$mail->Subject = 'Testujemy...';

if(!empty($_FILES)) {
    $fileCount = count($_FILES["plik"]["tmp_name"]);
    $i = 0;
    for($i; $i<$fileCount; $i++) {
        $mail->AddAttachment($_FILES["plik"]["tmp_name"][$i], $_FILES["plik"]["name"][$i]);
    }

}

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}
}
?>

<!doctype html>
<html lang="pl">
<head>
<meta charset="utf-8" />
<title>Test maila</title>
<script type="text/javascript">
window.onload = initAll;
  function initAll()
  {
    document.getElementById('add_input').onclick = DodajInput;
  }
  function DodajInput()
  {
    var element = document.createElement('input');
    element.setAttribute('type', 'file');
    element.setAttribute('name', 'plik[]');
   
    element.style.display = "block";
    document.getElementById('pliki').appendChild(element);
  }
</script>
</head>

<body>

    <form method="post" action="#" enctype="multipart/form-data">

        <input name="imie" type="text" value="<?php if($_POST['wyslij']){echo $_POST['imie'];} ?>" /> <br />
        <input name="nazwisko" type="text" value="<?php if($_POST['wyslij']){echo $_POST['nazwisko'];} ?>" /> <br />
        <input name="email" type="text" value="<?php if($_POST['wyslij']){echo $_POST['email'];} ?>" /> <br />
        <textarea name="tresc" rows="20" cols="80"><?php if($_POST['wyslij']){echo $_POST['tresc'];} ?></textarea> <br />

        <div id="pliki">
        <input name="plik[]" type="file" value="" /> <br />
        </div>
        <a href="#" id="add_input" >dodaj kolejny załącznik</a>
        <input name="wyslij" type="submit" value="wyslij" />

    </form>

   

</body>

</html>
^
Odpowiedz z cytatem
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum webesteem Strona Główna | server side i bazy danych Wszystkie czasy w strefie EET (Europa)
Idź do strony 1, 2  Następny
Strona 1 z 2

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

FAQ


serwery wirtualne, tanie domeny

Powered by phpBB © 2001, 2005 phpBB Group

90793997

Page generation time: 0.0337s (PHP: 78% - SQL: 22%) - SQL queries: 14 - GZIP enabled - Debug off